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

Можливості

OpenOnco приймає JSON-профіль пацієнта і повертає структурований план лікування або діагностичний brief, з повним trace кожного рішення і цитуваннями всіх джерел. Жодного «чорного ящика»: усе рішення складається з декларативних правил, які можна прочитати у KB і відстежити в trace. Нижче — детально, як ми працюємо з даними, джерелами і запитами.

Що вже зроблено

65
Хвороби в KB
37 гематологічних · 28 солідних · 56 з повним ланцюгом · 38 мають 2L+ алгоритм

Кожна хвороба має свій archetype (etiologically_driven як HCV-MZL, risk_stratified як MM, biomarker_driven як NSCLC/EGFR або HGBL/MYC-BCL2, stage_driven як cervical), що визначає логіку алгоритму вибору лікування. Зараз 1L покрито для всіх 65 хвороб (57 алгоритмів), 2L+ — для 34 гематологічних та 4 солідних (38 алгоритмів).

16
Лікарі-скіли (віртуальні спеціалісти)
кожен скіл має свою версію, sources, last_reviewed

Гематолог, патолог, інфекціоніст-гепатолог, радіолог, молекулярний генетик, клінічний фармацевт, радіотерапевт, паліативна допомога та інші — кожен активується на конкретні тригери у профілі пацієнта і додає свої open-questions + supportive care recommendations до плану.

24
Workups (триаж)
pre-biopsy діагностичний шлях

Коли в пацієнта ще немає підтвердженої гістології (CHARTER §15.2 C7 забороняє treatment Plan без неї), engine вмикає diagnostic mode: видає Workup Brief зі списком тестів, biopsy approach, IHC panel, та переліком ролей що мають бути в triage MDT. Як тільки histology підтверджено — diagnostic plan promote-иться в treatment plan через revise_plan(...).

310
Red flags
тригери ескалації або розслідування

Червоні прапорці — структуровані клінічні умови, що автоматично змінюють план: RF-BULKY-DISEASE (нодальна маса >7 см) перемикає HCV-MZL з antiviral-first на BR + DAA, RF-MM-HIGH-RISK-CYTOGENETICS (t(4;14), del(17p), gain 1q) ескалує MM з триплету VRd до квадруплету D-VRd. Кожен RedFlag прив'язаний до domain-role, який «виловлює» його у MDT brief.

186
Режими лікування
250 показань (165 першої лінії · 85 2L+)

Кожна схема — список drugs з дозами, шкалою циклів, dose adjustments (для renal impairment, FIB-4, frailty), premedications, mandatory supportive care та monitoring schedule. Кожна Indication (сполучення disease + line_of_therapy + biomarker / stage / demographic-фільтрів) гейтить конкретний Regimen — наприклад, MGMT-METHYLATION для GBM Stupp, CD79B/COO/IPI для DLBCL R-CHOP vs Pola-R-CHP, t(11;14)/MIPI для MCL, MYC+BCL2 rearrangements для HGBL-DH, AFP для HCC, FLIPI для FL.

185
Препарати

ATC/RxNorm-кодовані. Кожен з регуляторним статусом FDA/EMA/MOЗ + НСЗУ reimbursement (наприклад, daratumumab наразі НЕ реімбурсується НСЗУ — це блокер для D-VRd, явно фіксований у плані).

95
Тести / процедури

LOINC-кодовані лабораторні + imaging + histology + IHC + genomic тести. Кожен має priority_class (critical / standard / desired / calculation_based) — рендеряться у Plan як «pre-treatment investigations» таблиця.

162
Джерела (top-level guidelines + RCTs)
NCCN · ESMO · EHA · BSH · EASL · МОЗ · WHO · CTCAE · FDA

Під цими 162 джерелами — 26,062+ primary clinical publications (RCTs, мета-аналізи, когортні дослідження) і 10,269 сторінок керівництв. Сама лише NCCN B-Cell Lymphomas guideline — ~500 сторінок з ~700 references. Кожна Indication / Regimen / RedFlag цитує конкретні джерела з position (supports / contradicts / context), paraphrased quote, page/section. FDA Criterion 4 — лікар незалежно перевіряє підставу кожної рекомендації.

14
Специфікації

CHARTER (governance + FDA позиціювання), CLINICAL_CONTENT_STANDARDS, KNOWLEDGE_SCHEMA, DATA_STANDARDS, SOURCE_INGESTION, REFERENCE_CASE, MDT_ORCHESTRATOR, DIAGNOSTIC_MDT, WORKUP_METHODOLOGY, SKILL_ARCHITECTURE.

Зріз станом на 2026-04-26 23:04 UTC. Reviewer sign-offs ≥ 2: 15/202 — увесь клінічний контент позначено як STUB до dual-sign-off Clinical Co-Lead. Це інструмент підтримки рішень, не медичний пристрій.

1. Як обробляється запит

Лікар дає engine'у JSON-профіль пацієнта (FHIR/mCODE-сумісний у майбутньому, спрощений dict у MVP). Engine виконує 6 послідовних стадій і повертає Plan з ≥2 альтернативними tracks (CHARTER §2 — обидва треки в одному документі, alternative не сховано).

Stage 1
Disease + Algorithm resolve
disease.icd_o_3_morphology або disease.id → знайти Disease entity. Disease + line_of_therapy → знайти відповідний Algorithm.
Stage 2
Findings flattening
Об'єднує demographics + biomarkers + findings в один flat dict для evaluation.
Stage 3
RedFlag evaluation
Кожен з 310 RedFlag-ів перевіряється проти findings. Boolean rule engine: any_of/all_of/none_of clauses з threshold-ами.
Stage 4
Algorithm walk
Decision tree крок за кроком. Кожен step → outcome → branch (result або next_step). Trace зберігає всі fired_red_flags на кожному кроці.
Stage 5
Tracks materialization
ВСІ Indication з algorithm.output_indications стають окремими tracks (standard / aggressive / surveillance). Selected = default, перший. Решта — alternative.
Stage 6
Per-track resolution
Indication → Regimen → MonitoringSchedule + SupportiveCare + Contraindications. Все resolve'иться з KB readonly.

Час обробки одного пацієнта — 50-200 ms (KB load домінує). У Pyodide перший запуск 8-15 сек (завантаження runtime), наступні — як локальний CLI. Серверу немає — engine крутиться локально (CLI) або у браузері користувача (Pyodide). Patient JSON ніколи не залишає машину.

2. Як ми працюємо з даними пацієнта

Engine читає лише структуровані поля з patient profile. Кожне поле має чітку семантику: або тригерить RedFlag, або filter'ує доступні Indications, або configurує Regimen materialization. Невпізнані поля ігноруються — ніяких «прихованих ефектів».

КатегоріяЩо читаємоЯк використовуємо
Disease (вхідна точка) disease.id · icd_o_3_morphology · line_of_therapy визначає який Algorithm запускати
Diagnostic mode trigger disease.suspicion.lineage_hint · tissue_locations · presentation вмикає DiagnosticPlan замість Plan (workup brief)
Demographics age · sex · ecog · fit_for_transplant · decompensated_cirrhosis · pregnancy_status filter в Indication.applicable_to.demographic_constraints
Biomarkers будь-які BIO-X з KB як ключі: BIO-CLL-HIGH-RISK-GENETICS, BIO-MM-CYTOGENETICS-HR, BIO-HCV-RNA, ... тригерять RedFlags, filter'ять Indications
Findings 310+ структурованих полів — dominant_nodal_mass_cm, ldh_ratio_to_uln, creatinine_clearance_ml_min, blastoid_morphology, tp53_mutation, del_17p, ... thresholds у RedFlag triggers
Prior tests completed prior_tests_completed: [TEST-IDs] виключає вже зроблені тести з generated workup_steps
Clinical record (free-form) будь-який clinical_record envelope не читається engine'ом — використовується тільки render layer для context

3. Як ми працюємо з джерелами — і чому це наша ключова перевага

26,062+
26,062+ primary clinical publications (RCTs, мета-аналізи, когортні дослідження) реферуються під 162 обраними top-level guidelines. Сумарно — 10,269 сторінок керівництв. Жоден лікар фізично не може опрацювати такий обсяг для кожного пацієнта; engine реферує його за вас і повертає Plan з phrased citations + page links.

Кожне джерело — це окрема Source entity з власним ID (наприклад SRC-NCCN-BCELL-2025), title, version, license, access mode (referenced vs hosted per SOURCE_INGESTION_SPEC §1.4). Зараз у KB 162 джерел:

Source IDТипСторінокPrimary refsРоль у корпусі
SRC-NCCN-BCELL-2025NCCN B-Cell Lymphomas v.2.2025500700primary_guideline
SRC-NCCN-MM-2025NCCN Multiple Myeloma 2025400600primary_guideline
SRC-NCCN-AML-2025NCCN AML 2025350500primary_guideline
SRC-NCCN-MPN-2025NCCN MPN 2025300400primary_guideline
SRC-EASL-HCV-2023EASL HCV Guidelines 202380250primary_guideline
SRC-WHO-LNSC-2023WHO Lymph Node, Spleen, Thymus Cytopathology150200diagnostic_methodology
SRC-CTCAE-V5NCI CTCAE v5.0 (toxicity terminology)15030terminology
SRC-ESMO-MZL-2024ESMO Marginal Zone Lymphomas 202430150primary_guideline
SRC-BSH-MZL-2024BSH MZL Guideline 202450120regional_guideline
SRC-EHA-WORKUP-2024EHA Practical Workup Guidelines 202440100diagnostic_methodology
SRC-MOZ-UA-LYMPH-2024МОЗ Україна — Лімфоми (placeholder)6050regional_guideline
SRC-ARCAINI-2014IELSG-19 RCT — MALT lymphoma1050rct_publication
SRC-FDA-CDS-2026FDA CDS Software Guidance 20263020regulatory
Сумарно10,26926,062+

Кожна клінічна claim у KB має citation. Indication, Regimen, RedFlag, Algorithm — всі мають поле sources: list де для кожного джерела вказано:

Структура citation

  • source_id — посилання на Source entity
  • positionsupports / contradicts / context
  • relevant_quote_paraphrase — паніфразоване твердження з guideline (не дослівне copy-paste для license safety)
  • page_or_section — точна локалізація в документі

Render layer показує повний список cited sources під кожною Indication у Plan. Це і є FDA Criterion 4 (CHARTER §15.2): лікар може незалежно перевірити підставу кожної рекомендації, не довіряючись engine на віру.

Source hosting за замовчуванням — referenced. Ми не дублюємо бази (NCCN, ESMO, etc.) — посилаємось. Hosting потребує explicit H1-H5 justification (CHARTER §15.2 referenced vs hosted vs mixed). Виключення: PDF документи (FDA CDS, CTCAE) збережено локально для archive stability.

4. Як ми обробляємо запити

Три способи запустити engine, жоден не серверний:

CLI
Локально на машині лікаря

python -m knowledge_base.engine.cli --patient profile.json --render plan.html. Працює offline, не потребує мережі. Profile залишається на диску.

Pyodide
У браузері (try.html)

Pyodide v0.26.4 завантажує Python WebAssembly runtime, micropip ставить pydantic+pyyaml, розпаковує engine bundle (~302KB) у in-memory FS. Engine крутиться у браузері. Patient JSON не покидає машину.

Library
Python import

from knowledge_base.engine import generate_plan, revise_plan — інтеграція з EHR, CSV pipelines, batch testing. Stateless, deterministic.

Privacy by design. Patient JSON ніколи не залишає машину користувача. Немає логів, немає БД, немає accidental leakage. Reproducibility: Plan.knowledge_base_state.algorithm_version фіксує версію KB → same input + same KB = same output.

5. Що повертаємо назад

Engine повертає Plan (treatment mode) або DiagnosticPlan (workup brief). Кожен Plan містить:

ПолеЩо містить
tracks[]≥2 alternative tracks (default first), кожен з indication + regimen + monitoring + supportive_care + contraindications
fda_complianceFDA Criterion 4 fields: intended_use, hcp_user_specification, patient_population_match, algorithm_summary, data_sources_summary, data_limitations, automation_bias_warning
traceпокрокова історія walk_algorithm: step / outcome / branch / fired_red_flags для кожного кроку
knowledge_base_statesnapshot версії KB на момент генерації (audit per CHARTER §10.2)
kb_resolvedвсі referenced entities (Disease, Tests, RedFlags, Algorithm) для render layer
warningsschema/ref errors, time_critical disqualifications, missing data hints
supersedes / superseded_byверсійний chain між plans для тієї ж пацієнта

Опціонально вмикається MDT brief — orchestrate_mdt() читає Plan + патієнтський профіль і додає required/recommended/optional ролі (з 16 віртуальних спеціалістів), open questions, provenance graph. Renders як inline section у Plan HTML.

6. Як план оновлюється при появі нових даних

revise_plan(updated_patient, previous_plan, revision_trigger) приймає оновлений профіль і генерує нову версію плану з supersedes/superseded_by chain. Три легальні переходи + одна заборона:

ІзЗі змінамиПерехідРезультат
DiagnosticPlan vNтільки suspicion (без histology)diagnostic → diagnosticDiagnosticPlan v(N+1)
DiagnosticPlan vNпідтверджена histologydiagnostic → treatment (promotion)Plan v1 (перший treatment)
Plan vNбудь-яке оновлення з histologytreatment → treatmentPlan v(N+1)
Plan vNвидалено histologyILLEGAL — ValueError, CHARTER §15.2 C7

Попередній plan не мутується — повертається deep copy з superseded_by заповненим. Caller (CLI / EHR) сам вирішує що робити з обома версіями. Per CHARTER §10.2 — стара версія зберігається indefinitely.

Що тригерить новий plan: зміна будь-якого з ~30 структурованих полів — нові biomarkers (del(17p) виявлено), нова стадія (ECOG 1→3), нові findings (bulky disease на restaging), нові infectious flags (HBV reactivation), pregnancy detected. Зміна clinical_record free-text НЕ тригерить regeneration (engine не читає free text).

7. Що ще робимо

24
Diagnostic workups

Pre-biopsy режим: коли histology ще немає, engine видає Workup Brief зі списком тестів, biopsy approach, IHC panel і ролей triage MDT. Per CHARTER §15.2 C7 — без histology treatment Plan не генерується.

MDT
Multidisciplinary brief

Orchestrator читає Plan + profile і призначає required/recommended/ optional ролі (16 catalog), формулює open questions (Q1-Q6 + DQ1-DQ4), будує decision provenance graph.

stats
KB dashboard

python -m knowledge_base.stats — actual entity counts + per-disease coverage matrix + reviewer signoff ratio. Доступне як CLI / JSON / embeddable HTML widget для landing page.

render
A4 print-friendly HTML

Single-file HTML з embedded CSS, без external assets крім Google Fonts. Adapt'ується під A4 print через @page + @media print. Tracks side-by-side, alternative не сховано (anti automation-bias per CHARTER §15.2 C6).

trials
Experimental options (Phase C — done)

enumerate_experimental_options(...) запитує ClinicalTrials.gov v2 за disease + biomarker + line_of_therapy і повертає ExperimentalOption з UA-availability metadata (sites_ua, countries) — render-time, engine не використовує trial як сигнал вибору. Status filter: RECRUITING / ACTIVE_NOT_RECRUITING / ENROLLING_BY_INVITATION; інтегровано у generate_plan, render показує третій трек у Plan; 7-day on-disk TTL cache для офлайн-запусків.

access
Access Matrix (Phase D)

Кожен Plan містить AccessMatrix — per-track agg-table UA-реєстрації, НСЗУ-покриття, cost orientation (₴ ranges) і primary AccessPathway. Render-time only (CHARTER §8.3, invariant test guarantee). Stale-cost warning при cost_last_updated > 180 днів. Trial-рядки додаються автоматично коли experimental track активний.