# materialize_lab_reports_v1.0.py **Verze:** 1.0  |  **Datum:** 2026-06-16 Materializuje **Lab Reports** z MongoDB (`covance.labreports`) do **Dropboxu**. Cíl: adresář = **identická kopie Monga** (plné zrcadlo) — doplní chybějící PDF a **smaže přebytečné**. Žádná jiná ambice. (Opak download skriptu, který plní Mongo z portálu.) ## Cílové cesty (klíč = `studyCode`) ``` 77242113UCO3001 -> u:\Dropbox\!77242113UCO3001\#020 Reporty\LabCorp 42847922MDD3003 -> u:\Dropbox\!!42847922MDD3003\#000 Reports\LabCorp ``` ## Struktura `\\.pdf` — podsložka **per centrum** (`CZ10003\`, …), do ní všechna PDF toho centra. ## Název souboru = `doc.fileName` z Monga. Když víc **různých** reportů (různé `reportId`) má v jednom centru **stejný** název, přidá se ke všem z té skupiny ` []` → vždy unikátní a stabilní (idempotentní zrcadlo). Běžné případy (liší se datum Posted) zůstávají s čistým názvem. ## Zrcadlení - **+ zapsat** chybějící (PDF binárka se z Monga tahá až teď, jen pro chybějící; existující se shodnou velikostí se přeskočí — obsah reportu je v čase neměnný). - **− smazat** PDF, které v Mongu nejsou; odstranit prázdné podsložky center. - Mazání **naostro** (žádný potvrzovací krok) — je to čistý mirror. - **Pojistka:** pokud Mongo vrátí pro studii 0 dokumentů, studie se **přeskočí** (nesmaže celý adresář kvůli výpadku DB) — obejde `--allow-empty`. ## Spuštění (čistá Mongo+FS operace, GUI netřeba) ``` python materialize_lab_reports_v1.0.py --dry-run # jen náhled (+X/−Y), nic nezapíše python materialize_lab_reports_v1.0.py # zrcadlí naostro python materialize_lab_reports_v1.0.py --verify # u existujících porovná i sha256 python materialize_lab_reports_v1.0.py --study 42847922MDD3003 # jen jedna studie ``` ## Návaznost Plní [[project_covance_labreports]] download_lab_reports_v1.4 (portál → Mongo), tento skript dělá druhý směr (Mongo → Dropbox). Idempotentní — lze pouštět opakovaně / na konci download běhu.