5.5 KiB
vtmf_pipeline_v1.6 — V-TMF workflow přes 3 úrovně (STUDY / COUNTRY / SITE)
Verze: 1.6 · Datum: 2026-06-15
Co je nové proti v1.5
v1.5 stahovala jen study-level dokumenty jedné studie do ploché
<Type>\<Subtype> struktury. v1.6 řeší celou hierarchii VTMF
STUDY → COUNTRY → SITE a sdílený (M:N) charakter dokumentů.
Klíčové poznatky z reportů:
- Dokument je do studií/zemí/center jen referencovaný (M:N) — např. Master Confidentiality Agreement v nemocnici je jeden dokument referencovaný do všech studií i center té nemocnice. Reference ≠ kopie.
- Sloupce
Study,Study Country,Sitejsou comma-separated seznamy. - Tři reporty = tři úrovně dokumentu. Aby byl TMF kompletní, musí se stáhnout všechny tři.
- Country i site report filtrují jen na zemi (CZ), ne na studii → empiricky vrací 100 % dokumentů navázaných na UCO3001, ořez na studii je pojistka (no-op).
- Study report má 15 sloupců (+
Document Date), country/site 17 (+Created By,Study Country,Site; bezDocument Date).
Konfigurace REPORTS
TARGET_STUDY = "77242113UCO3001"
REPORTS = [
{"level":"study", "study":TARGET_STUDY, "country":None,
"url":".../0RP000000000182?study__v...IN=0ST000000137008"},
{"level":"country", "study":TARGET_STUDY, "country":"Czech Republic",
"url":".../0RP000000000319?study_country__v...IN=0SC00000017T056"},
{"level":"site", "study":TARGET_STUDY, "country":"Czech Republic",
"url":".../0RP000000000762?study_country__v...EQ=0SC00000017T056"},
]
Jiná studie / země = jen úprava ID v URL + TARGET_STUDY.
Tok jednoho běhu
- Login (persistentní profil, J&J SSO, 2FA na telefonu).
- Pro každý report v
REPORTS:- export do Excelu (Data Only) →
WhatToDownload/<ts> <level> ...xlsx, - parse (zobecněný parser, sloupce podle názvu),
- ořez na
TARGET_STUDY(řádek se bere jen pokud má studii vstudies), - scoped sync do Mongo,
- archiv reportu do
Zpracovano/.
- export do Excelu (Data Only) →
- Jeden průchod stažení všech
deleted=False, downloaded≠Truena disk i do SeaweedFS.
Mongo schéma (kolekce documents)
_id: "VTMF-9108777|v2.0" # číslo dokumentu | verze
vtmf, version, url, level # level = study|country|site (pro cestu)
levels: ["site"] # všechny úrovně, kde se objevil
scopes: ["site|77242113UCO3001|Czech Republic", ...] # pro scoped mazání
name, status, type, subtype, classification, desc
process_name, external_system_name
created_by, last_modified_by, version_created_by
date # YYYY-MM-DD (Document/Approval/Version date)
studies: ["77242113UCO3001", ...] # comma-split sloupce reportu
countries: ["Czech Republic", ...]
sites: ["BH5-CZ10001", ...]
first_seen, last_seen, deleted, deleted_at
downloaded, downloaded_at, placeholder # žádné pole file (Dropbox zrušen)
sha256 # kontrolní součet (NE cesta)
seaweed_path, seaweed_url, seaweed_synced_at # jediné umístění souboru
history: [{ts, changes:{pole:{old,new}}}]
Scoped sync (řeší mazací háček)
Mazání už nekouká na celou kolekci (to by sync country reportu označil
study/site dokumenty jako smazané). Každý report má
scope = "<level>|<study>|<country>"; dokument nese pole scopes[].
- dokument v reportu →
$addToSetscope, - dokument, který z tohoto scope zmizel → scope se odebere; teprve když
nemá žádný scope →
deleted=True+ soubor[D].
Evidence reportů — kolekce report_runs
level, study, country, url, scope, exported_at, file, row_count, doc_keys[]
Umožní ukázat „co přesně bylo v reportu" a slouží jako audit.
Úložiště = JEN SeaweedFS (žádný Dropbox/disk)
Dokumenty se stahují z Vaultu přes dočasný soubor Playwrightu rovnou do SeaweedFS Fileru — na disk/Dropbox se nic neukládá. Klíč = číslo dokumentu
- verze:
/vtmf-documents/<vtmf>/<verze>.<přípona>
např. /vtmf-documents/VTMF-9108777/v2.0.pdf
Žádné SHA cesty, žádný content dedup, žádné hardlinky. SHA-256 se počítá a
ukládá do Mongo jen jako kontrolní součet. Která úroveň / země / centra =
pole level / countries[] / sites[] v Mongo.
Aktuální verzi čehokoli do Dropboxu (nebo kamkoli jinam) zařídí samostatný export skript ze SeaweedFS — pipeline se tím nezdržuje.
Migrace stávajících dat → migrate_to_v16.py
Stávající study-level data (v1.3–v1.5) převede na schéma v1.6. Dvě fáze,
default DRY-RUN, ostře s --apply:
--phase mongo— re-parse nejnovějšího archivu study reportu v1.6 parserem → obohatí ~1692 dokumentů o nová pole (level, scopes[], studies[], countries=[], sites=[], classification, …). Nesahá na download stav.--phase seaweed— překlíčuje SeaweedFS ze starých SHA cest na nové<vtmf>/<verze>(~1637 souborů; zdroj bajtů = stávající soubor na disku, fallback GET ze SHA cesty), opravíseaweed_path/url+sha256, smaže staré SHA objekty a odebere polefilez Mongo. Fyzické soubory v Dropboxu pak můžeš smazat ručně.
# náhled
& "...\.venv\Scripts\python.exe" "...\migrate_to_v16.py"
# ostře
& "...\.venv\Scripts\python.exe" "...\migrate_to_v16.py" --apply
Spuštění pipeline
& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.6.py"
Předchůdce: vtmf_pipeline_v1.5 (TRASH/).