# vtmf_pipeline_v1.5 — Kompletní V-TMF workflow (report → Mongo → download → SeaweedFS) **Verze:** 1.5 · **Datum:** 2026-06-15 **Změny v1.5:** upload každého staženého dokumentu do SeaweedFS Filer (`192.168.1.50:8888`, cesta `/vtmf-documents/ab/cd/`). SHA-256 content-addressed dedup — identický soubor se uloží jen jednou (HEAD check → 404 → PUT; při 200 dedup hit). Chyba uploadu neblokuje download ani zápis do Mongo — soubor zůstane na disku a pole `sha256/seaweed_path/seaweed_url/seaweed_synced_at` zůstanou `null` (lze doplnit backfillem). Souhrn na konci uvádí počet nově nahraných, dedup hitů a případných chyb uploadu zvlášť. _(Předchozí změny viz TRASH/vtmf_pipeline_v1.4.md)_ Jeden běh skriptu udělá celé workflow pro studii 77242113UCO3001: 1. **Login** do vtmf.veevavault.com (persistentní profil `vault_profile/`, J&J SSO, případné 2FA potvrdíte na telefonu + ENTER; údaje z `.env` v rootu projektu). 2. **Export reportu** „Document Inventory Report - Study Level" (přímá URL s ID reportu `0RP000000000182` a filtrem studie `0ST000000137008`) → menu ⋯ → Export to Excel → Data Only → uloží se s timestampem do `WhatToDownload/`, po zpracování se přesune do `WhatToDownload/Zpracovano/`. 3. **Parse + sync do MongoDB** — Tower `mongodb://192.168.1.76:27017`, db **VTMF**, kolekce **documents**, klíč `_id = "VTMF-xxx|vY.Z"`: - nové dokumenty se založí, - změny sledovaných polí se promítnou (+ `history[]`), - dokumenty chybějící v reportu se označí `deleted=True` a stažený soubor dostane ` [D]` před příponou, - znovuobjevené se vzkřísí a ` [D]` se odebere. 4. **Stažení + SeaweedFS upload** — všechny `deleted=False, downloaded≠True`: - Source File se uloží do `U:\Dropbox\!!!Days\Downloads Z230\VTMF-77242113UCO3001\\\` jako `YYYY-MM-DD Description [VTMF-xxx] [vY.Z].`, - soubor se přečte z disku, vypočítá se SHA-256, obsah se nahraje do SeaweedFS na `/vtmf-documents/{sha256[:2]}/{sha256[2:4]}/{sha256}`, - do Mongo se zapíše `downloaded=True, file, sha256, seaweed_path, seaweed_url, seaweed_synced_at`; chyba SeaweedFS tyto fieldy nechá `null` ale `downloaded=True` se zapíše (soubor je na disku). - Placeholder dokumenty (`div.vv_placeholder_text` viditelný) se přeskočí s `placeholder=True, downloaded=True`. ## Mongo schéma (kolekce documents) ``` _id: "VTMF-19077748|v1.0" vtmf, version, url, name, status, type, subtype, desc, date, studies first_seen, last_seen # kdy poprvé/naposledy v reportu deleted, deleted_at # není ve výsledné sadě reportu downloaded, file, downloaded_at placeholder # True = Vault placeholder bez obsahu sha256 # hex SHA-256 staženého souboru seaweed_path # /vtmf-documents/ab/cd/ seaweed_url # http://192.168.1.50:8888/vtmf-documents/... seaweed_synced_at # kdy nahráno / null při chybě last_error, error_at # poslední chyba stahování history: [{ts, changes: {pole: {old, new}}}] ``` ## SeaweedFS detaily - **Filer**: `http://192.168.1.50:8888` (přímý PUT, žádný master assign) - **Dedup**: HEAD → 404 → PUT; HEAD → 200 → dedup hit (vrátí `uploaded=False`) - **Timeout**: HEAD 10 s, PUT 120 s (velké soubory) - **MIME**: `mimetypes.guess_type()`, fallback `application/octet-stream` - **Backfill**: dokumenty s `downloaded=True, seaweed_path=null` lze dohnat samostatným skriptem (čte `file` z Mongo, nahraje, zapíše pola) ## Konfigurace (konstanty nahoře) - `SEAWEED_FILER` — URL Filer serveru - `SEAWEED_PREFIX` — prefix cesty (`/vtmf-documents`) - `REPORT_URL` — ID reportu + filtr studie - `LIMIT` — None = vše; číslo = dávka - `MONGO_URI/DB/COLL`, `DOWNLOAD_ROOT`, `EXCEL_DIR` - `TRACKED_FIELDS`, `MAX_ATTEMPTS`, `RETRY_PAUSE_MS`, `BETWEEN_DOCS_MS` ## Ověřené technické detaily (nesahat bez ověření) - Maintenance dialog: zavírat POUZE přes `.ui-dialog a.ok.vv_button` (křížek `.ui-dialog-titlebar-close` je display:none). - Report Excel má rozbité deklarované rozměry → přímá iterace řádků. - Document Name/Number/Status jsou =HYPERLINK vzorce → regex. - Export kliknout právě jednou; rozhoduje `expect_download`. - Placeholder detekce: `div.vv_placeholder_text` (uvnitř `div.vv_placeholder_pane > div.vv_placeholder_container`). ## Spuštění ```powershell & "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.5.py" ``` Předchůdce: vtmf_pipeline_v1.4 (TRASH/).