# download_lab_reports_v1.3.py **Verze:** 1.3  |  **Datum:** 2026-06-16 Stahuje PDF **Lab Reports** ze `xsp.labcorp.com` (studie **77242113UCO3001**, interní `36940`, 10 CZ center) přímo do **MongoDB** (`covance.labreports`) — metadata + skutečné PDF (inline Binary). **Na disk neukládá.** ## Režim synchronizace — proměnná `SYNC_MODE` Nahoře ve skriptu: ```python SYNC_MODE = "delta" # "delta" | "fullsync" ``` - **delta** — jen NOVÉ reporty přes interní `reportId` (stop-at-known). List je Posted DESC; shora se hledá první už uložený `reportId` → vše pod ním je starší a v Mongo je. Rychlé, běžný provoz. - **fullsync** — projde VŠECHNY řádky a doplní chybějící/změněné (rekonciliace). CLI přepíše proměnnou: `--delta` / `--fullsync`. ## Klíč `record_id = reportId` Stabilní 32-hex ID dokumentu z dat AG Gridu, napříč všemi řádky **unikátní** a **perzistentní v čase** (ověřeno: stejné `reportId` vrací i jiný grid pro totéž centrum). Řeší různá PDF se shodnými viditelnými metadaty (reissue se shodným Posted i na minutu) — metadata na klíč nestačí. ## Odkud data Z in-memory dat AG Gridu (`__agComponent.gridApi`): `reportId`, `fileLinks[].fileId`+`fileName` (server), `postedDateTime` (moment.js → převedeno na ISO string), `siteNum`, `subjectNumber`. Accession/Visit/Collected leží v gridu níž (ve `visits`) → z buněk (po scrollu). `accession` se čte **doslova** (reálný identifikátor kitu), neukládá se nijak odvozeně. ## MongoDB dokument `record_id`(=reportId), `study`, `studyCode`, `type`, `site`, `subject`, `accession`, `visit`, `collected`, `posted`, `postedIso` (string), `fileId`, `serverFileName`, `fields`, `fileName`, **`pdf`** (Binary), `pdfSize`, `pdfSha256`, `firstSeen`, `lastSeen`, `history[]`. ## Spuštění (z terminálu uživatele — GUI Chrome) ``` python download_lab_reports_v1.3.py # podle SYNC_MODE (default delta) python download_lab_reports_v1.3.py --fullsync # rekonciliace python download_lab_reports_v1.3.py --dry-run # vypíše nové, nestahuje python download_lab_reports_v1.3.py --limit 5 ``` ## Zmeny v1.3 - `SYNC_MODE` proměnná (delta/fullsync) + CLI `--delta`/`--fullsync`. - Oprava `postedIso`: v1.2 ukládal celý moment.js objekt; nyní čistý ISO string. ## Nahrazuje `download_lab_reports_v1.2.py` → `TRASH/`.