OpenOnco v0.1.0
UA EN
Спробувати →

Обмеження

OpenOnco свідомо не намагається замінити лікаря або повноцінну MDT-команду. Цей розділ — повний і чесний список того, що engine не робить, де він відмовляється генерувати план без додаткових даних, і де клінічне рішення залишається за лікарем. Знати обмеження так само важливо, як знати можливості.

STUB-статус усього клінічного контенту. Reviewer sign-offs ≥ 2: 15/202 (CHARTER §6.1 вимагає двох Clinical Co-Lead approvals для будь-якої Indication, перш ніж її можна вважати «published»). Зараз весь контент — STUB. Це інструмент демонстрації архітектури, не клінічна довідка для реальних пацієнтів. Стан станом на 2026-04-26 23:04 UTC.

1. Виявлення відсутніх даних — Open Questions механізм

Engine не приймає рішення без потрібних даних. Замість того, щоб мовчки brati default, він явно фіксує які поля бракує і якого тесту/висновку потребує. Цей механізм називається Open Questions і він — цілеспрямована частина MDT-orchestrator (Q1-Q6 + DQ1-DQ4 rules per MDT_ORCHESTRATOR_SPEC §3).

Treatment-mode Open Questions (Q1-Q6) — приклади з реального коду

  • Q1 — Histology not confirmed: якщо disease.id резолвиться але немає biopsy_date чи histology_report — engine emits warning «Treatment Plan generated against ICD-O-3 code only; recommend confirming primary histology before initiating therapy».
  • Q2 — Stage missing: якщо Algorithm.decision_tree посилається на staging але profile немає stage — fall-through на default з flag «Lugano/Ann Arbor stage required for confident risk-stratification».
  • Q3 — RedFlag clause references findings absent: якщо RF-MM-HIGH-RISK-CYTOGENETICS перевіряє tp53_mutation + del_17p + t_4_14 + gain_1q, а в profile є тільки del_17p — engine не дає false negative; emits «Cytogenetic panel incomplete; high-risk status assessed with partial data».
  • Q4 — Biomarker required by Indication missing: якщо IND-CLL-1L-VENO вимагає BIO-CLL-HIGH-RISK-GENETICS для default-track selection — engine emits «IGHV mutation status + FISH del(17p) required to confirm 1L recommendation».
  • Q5 — Performance status missing: якщо ecog відсутній — fall на conservative default (тільки standard track), emits «ECOG performance status required for transplant-eligibility assessment».
  • Q6 — Drug availability flag: якщо selected Regimen містить препарат позначений як nszu_reimbursement: false (наприклад daratumumab у MM) — emits «D-VRd: daratumumab not currently NSZU-reimbursed in Ukraine; verify funding pathway before initiation».

Diagnostic-mode Open Questions (DQ1-DQ4) — для pre-biopsy режиму

  • DQ1 — Tissue location missing: якщо suspicion.tissue_locations empty — workup match не може ranжувати, emits «Тип ткани локалізації потрібно вказати для матчингу workup».
  • DQ2 — Lineage hint absent: без lineage_hint engine використовує тільки tissue + presentation для matching, lower confidence.
  • DQ3 — Presentation free-text empty: presentation_keywords scoring × 0; only lineage + tissue brati участь.
  • DQ4 — Working hypotheses not provided: engine не має preferred direction, переважає найбільш generic workup (наприклад WORKUP-LYMPHADENOPATHY-NONSPECIFIC замість WORKUP-SUSPECTED-LYMPHOMA).
Чому не «беремо default тихо»: CHARTER §15.2 C6 (anti automation-bias) — engine не може робити вигляд що знає коли не знає. Кожна missing-data ситуація має бути візуально помітна лікарю. Open Questions рендеряться у Plan як окрема section, не сховано.

2. П'ять gap-ів персоналізації

«Персоналізація» в OpenOnco — це rule-based вибір з фіксованих варіантів, а не AI-генерація. Цe навмисна архітектурна позиція (CHARTER §8.3 — заборонені prompt patterns). Конкретні gap-и:

Gap 1

Без per-patient dose calculation

Regimen зберігає стандартну дозу (bortezomib 1.3 mg/m²), не множиться на BSA пацієнта і не зменшується під CrCl 30 мл/хв автоматично. Лікар сам перераховує. Це принципово, щоб уникнути класифікації як FDA medical device.

Gap 2

Без response-adapted cycle adjustment

Regimen фіксує total_cycles: 6 + 2 maintenance. Engine не адаптується автоматично на основі response (PR vs CR після PET2). Re-staging plan генерується через окремий revise_plan з новим profile — лікар явно тригерить.

Gap 3

Genomic matching обмежений curated biomarkers

Якщо у пацієнта виявили PD-L1 78%, engine не запропонує pembrolizumab — бо немає Indication з відповідним biomarker_requirement у KB. Це обмеження coverage (треба додати entity), не engine-логіки.

Gap 4

SupportiveCare однакова для всіх на одному режимі

PJP prophylaxis attached до D-VRd для всіх — навіть для пацієнта з алергією на bactrim. Engine не знає альтернатив (dapsone замість bactrim). Лікар сам substitute'ить.

Gap 5

Без cumulative-toxicity tracking між lines

2L+ алгоритми вже існують для 38 гематологічних хвороб (85 показань 2L+), але profile не carrier'ить prior_treatment_history як structured field. 2L plan для пацієнта що отримав bortezomib у 1L з grade 2 нейропатією — engine не знає про попередній exposure якщо нічого нового не вказано; лікар сам інтерпретує prior_lines з вільного тексту.

3. Жорсткі CHARTER-обмеження (will not change)

Це не technical debt — це принципові архітектурні рішення що визначають позицію проекту як non-device CDS і gатекіпять FDA / клінічну безпеку.

CHARTER §8.3

LLM не приймає клінічні рішення

LLM-и допомагають лише з: boilerplate code, doc drafts, extraction з clinical documents (з human verification), translation з clinical review. Не: вибір режиму, генерація доз, інтерпретація biomarker для therapy selection.

CHARTER §15.2 C7

Без histology — без treatment Plan

Treatment Plan генерується тільки якщо disease.id або icd_o_3_morphology підтверджені. Інакше engine відмовляється і вмикає DiagnosticPlan mode (workup brief). revise_plan з treatment назад в diagnostic — заборонено, raises ValueError.

CHARTER §15.2 C5

Без time-critical recommendations

Engine не призначений для emergency oncology (oncologic emergencies, time-sensitive infusion reactions). Це б тригернуло device classification. Якщо Indication позначена time_critical: true — engine додає disqualification warning у FDA compliance.

CHARTER §6.1

Two-reviewer merge для clinical content

Будь-яка зміна під knowledge_base/hosted/content/ що affects clinical recommendations потребує два з трьох Clinical Co-Lead approvals. Без цього Indication залишається STUB.

CHARTER §15.2 C6

Anti automation-bias mandatory

Engine ніколи не показує тільки одну рекомендацію — завжди ≥2 tracks side-by-side. Alternative не buried, не «click to expand», не fine-print. Лікар бачить що це вибір, не директива.

CHARTER §9.3

Patient data ніколи не у repo / public artifact

patient_plans/ gitignored. Будь-які patient HTML — gitignored pattern. Site (docs/) показує тільки synthetic examples. Збір telemetry заборонений без explicit consent.

4. Coverage limits (поточний стан KB)

OpenOnco — work in progress. Зараз модельовано 65 захворювань (37 гематологічних + 28 солідних) — це далеко не повний WHO-HAEM5 / WHO Classification of Tumours. Конкретно:

КатегоріяСтанЩо це означає
Хвороби з повним ланцюгом56 / 65Решта — частково модельовані; engine може видати warning «no Algorithm found for disease=X»
Indications 1L165Перша лінія покрита для всіх 65 хвороб
Indications 2L+85Друга-четверта лінія: 34 гематологічних хвороб (AITL, ALCL, AML, APL, ATLL, B-ALL, BURKITT, CHL, CLL, CML, DLBCL-NOS, ET, FL, HCL, HCV-MZL, HGBL-DH, MCL, MDS-HR, MDS-LR, MF-SEZARY, MM, NK-T-NASAL, NLPBL, NODAL-MZL, PCNSL, PMBCL, PMF, PTCL-NOS, PTLD, PV, SPLENIC-MZL, T-ALL, T-PLL, WM) + 4 солідних (ENDOMETRIAL, ESOPHAGEAL, GASTRIC, RCC). Решта solid-tumor 2L+ — частково (CRC, breast, urothelial), не systematically.
RedFlags310Cover критичні clinical scenarios для існуючих хвороб; для нових disease треба додавати
Solid tumors28BREAST, CERVICAL, CHOLANGIOCARCINOMA, CHONDROSARCOMA, CRC, ENDOMETRIAL, ESOPHAGEAL, GASTRIC, GBM, GIST, GLIOMA-LOW-GRADE, HCC, HNSCC, IFS, IMT, MELANOMA, MPNST, MTC, NSCLC, OVARIAN, PDAC, PROSTATE, RCC, SALIVARY, SCLC, THYROID-ANAPLASTIC, THYROID-PAPILLARY, UROTHELIAL — переважно 1L. 2L+ і ад'ювантні контексти — частково.
Pediatric oncology0Out of scope for MVP — окремий track спеціалізації
Радіотерапія планівчастковоRT входить у мультимодальні Indications (cervical CRT, GBM Stupp, PMBCL R-CHOP+RT, esophageal CROSS), але як окрема сутність з технічними параметрами (доза/фракції/target volumes) ще не моделюється
Хірургія планівне модельованоSurgical oncology indications відсутні
Маркетингових даних доступу до режимів (НСЗУ formulary live)статичний flagПоки що hard-coded на режимах; не auto-refresh з НСЗУ — це окремий backlog item
Experimental options (clinical trials)integratedPhase C done: enumerate_experimental_options + ExperimentalOption schema, інтеграція у generate_plan, render третього треку, 7-day on-disk TTL cache. Що ще: курований мапінг trials ↔ patient-eligibility (а не лише disease+biomarker)
Access Matrix (UA-availability per Plan)integratedPhase D: AccessMatrix + AccessMatrixRow агрегують registered/НСЗУ/cost/pathway по треках, рендеряться у Plan. Що ще: curated AccessPathway seed (~30 препаратів) — потребує two-reviewer signoff per CHARTER §6.1
Що НЕ означає STUB: structured data + algorithm logic + sources вже є. Що STUB означає: не пройшло dual sign-off Clinical Co-Lead. Тобто фактично ми маємо «proposed plan» який треба перевірити, не «approved plan».

5. Що engine ніколи не робить

Прозорий список заборонених patterns — щоб усі знали межі:

Never

Не сховує alternative track

Обидві рекомендації завжди показані. UI не has «expand to see alternative» pattern.

Never

Не генерує нову Indication LLM-ом

Усе вибирається з уже-curated KB. Якщо немає підходящої Indication — engine emits warning, не «creative invention».

Never

Не модифікує дози «під пацієнта»

Дози зі стандартного NCCN/ESMO. Adjustments тільки через explicit dose_modification_rules у Regimen YAML, ніяких ad hoc calculations.

Never

Не оцінює «що краще» між tracks

Algorithm обирає default, але не вирішує що default «кращий». Лікар має повну autonomy обрати alternative — це задокументовано у automation_bias_warning.

Never

Не інтерпретує imaging

«Bulky disease» приходить як structured field dominant_nodal_mass_cm, не з аналізу зображень. Image analysis = device classification.

Never

Не робить cohort matching

«У базі з N пацієнтів M% обрали X» — це окремий future feature, потребує persisted patient registry + privacy review. Поки що недоступне.

6. Як з цим жити

Цей engine задумано як підготовку до tumor-board, не заміну. Лікар вводить profile, отримує structured draft з усіма sources і open questions, а далі:

1
Перевіряє sources

Кожна claim у плані має citation. Лікар може прочитати оригінальний NCCN/ESMO/МОЗ розділ і підтвердити що engine не misquote'ить.

2
Заповнює Open Questions

Якщо engine emit'ить «cytogenetic panel incomplete» — лікар замовляє тест, додає у profile, запускає revise_plan. Plan оновлюється, OpenQuestion закривається.

3
Адаптує під пацієнта

Дози пере-перевіряє, supportive care substitute'ить за алергіями, Ukraine-availability перевіряє вручну. Engine — draft, лікар — final.

4
Tumor board discusses

MDT brief показує які ролі activated і які питання відкриті. Це structured agenda для board meeting. Decisions з board fixед'аться як provenance events.