Files
2026-06-15 16:10:47 +02:00

103 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# vtmf_pipeline_v1.3 — Kompletní V-TMF workflow (report → Mongo → download)
**Verze:** 1.3 · **Datum:** 2026-06-12
**Změny v1.1:** oprava tichého selhání — výjimka kteréhokoli kroku se
vypíše jako „PIPELINE SELHALA" + exit kód 2 (v1.0 končila zavádějícím
souhrnem „0 staženo, 0 chyb"). Export reportu robustnější: menu ⋯,
položka Export to Excel i tlačítko Export se hledají přes víc selektorů
a ve všech frames; při nenalezení se automaticky uloží diagnostika
stránky do debug/<čas>_report_* (screenshot, HTML všech frames, výpis
title/aria-label atributů) — z ní se dá určit přesný selektor.
**Změny v1.2:** selektory exportu ověřené na živém DOM (Claude in
Chrome; žádný iframe na celé stránce): menu ⋯ =
`.actionMenuContainer .dropDown.vv_dropdown_toggle button.vv-icon-button`
(button má prázdný title!); menu se načítá asynchronně (AJAX) →
po kliknutí se čeká na položku `a.ReportAction[data-action-name='ExcelExport']`;
„Data Only" = radio `name=requiredRadioField value=STANDARD`, defaultně
checked (pojistka přes .check()); tlačítko Export = React `<button>`
s emotion class hash → selektovat jen přes roli+text.
**Změny v1.3:** na konci běhu se prohlížeč i konzole zavřou
automaticky (žádné čekání na ENTER); interaktivní vstup zůstává jen
u 2FA a u ručně nezavřitelného dialogu.
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"`
(VTMF číslo + verze, unikátní index na dvojici):
- nový dokument → založí se (first_seen, deleted=False,
downloaded=False),
- změna sledovaných polí (name, status, type, subtype, desc,
date, url, studies) → promítne se + záznam do `history[]`
(timestamp + old/new),
- dokument chybí v reportu → `deleted=True, deleted_at` a stažený
soubor se přejmenuje s ` [D]` před příponou,
- dokument se vrátí do reportu → `deleted=False` a ` [D]`
se ze souboru zase odebere.
Výsledná sada = záznamy s `deleted=False`.
4. **Stažení chybějících** — všechny `deleted=False, downloaded≠True`:
doc URL → Source File → uložení do
`U:\Dropbox\!!!Days\Downloads Z230\VTMF-77242113UCO3001\<Type>\<Subtype>\`
jako `YYYY-MM-DD Description [VTMF-xxx] [vY.Z].<skutečná přípona>`.
Výsledek (cesta, čas, případně chyba) se ihned zapisuje do Mongo —
běh jde kdykoli přerušit a příště naváže.
## 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
last_error, error_at # poslední chyba stahování
history: [{ts, changes: {pole: {old, new}}}]
```
## Migrace starého stavu
Při prvním běhu se `download_state.csv` (z download_vault v2.x)
jednorázově namigruje: záznamy `ok` se k odpovídajícímu VTMF zapíší
jako `downloaded=True` + cesta. CSV se přejmenuje na
`download_state.csv.imported`.
## Konfigurace (konstanty nahoře)
- `REPORT_URL` — ID reportu + filtr studie (pro jinou studii se mění
jen tato dvě ID)
- `LIMIT` — None = stáhnout vše zbývající; číslo = dávka na běh
- `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); objevuje se
se zpožděním → wait_for visible 8 s (home) / 2-4 s (jinde).
- Report Excel má rozbité deklarované rozměry → přímá iterace řádků.
- Document Name/Number/Status jsou =HYPERLINK vzorce → regex.
- Export kliknout právě jednou; 503/redirecty v network logu
ignorovat, rozhoduje expect_download.
## Spuštění
```powershell
& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.3.py"
```
Předchůdce: download_vault v1.xv2.1 (TRASH/).