This commit is contained in:
2026-06-16 14:32:28 +02:00
parent b825e4ee7c
commit f385d7bf0b
95 changed files with 43120 additions and 0 deletions
@@ -0,0 +1,49 @@
# download_lab_reports_v1.1.py
**Verze:** 1.1  |  **Datum:** 2026-06-16
Stahuje PDF **Lab Reports** ze `xsp.labcorp.com` (studie **77242113UCO3001**,
interní `36940`, 10 CZ center) a ukládá je **přímo do MongoDB** — metadata
z tabulky + skutečné PDF (inline Binary). **Na disk neukládá.**
## Princip
Playwright + perzistentní profil (`browser_profile/`), jednorázový login,
klik na „English" ve sloupci Download. PDF bajty se čtou z Playwright temp
souboru (`download.path()`), `save_as` se nevolá → nic netrvalého na disku.
Materializaci adresáře z Monga řeší samostatný (budoucí) skript.
## Inkrementálně (stop-at-known)
List je řazený **Posted DESC** (nejnovější nahoře). Skript jde shora dolů;
u každého řádku nejdřív přečte metadata a spočítá `record_id`. Jakmile narazí
na **už uložený** report, **končí** (vše pod ním je starší a už v Mongo je) —
stahuje tedy jen nové.
**Korekce výsledků** = stejný report znovu vystavený s **novým Posted**
nový `record_id` → stáhne se jako nový, původní zůstává.
## MongoDB
- db `covance`, kolekce **`labreports`**
- klíč `record_id = "{site}|{subject}|{accession}|{visit}|{posted}"`
(Posted vč. času odlišuje reissue)
- dokument: `study`, `studyCode`, `type`, `site`, `subject`, `accession`,
`visit`, `collected` (yyyy-mm-dd), `posted` (yyyy-mm-dd HH:MM),
`fields` (sloupce tabulky), `fileName`, **`pdf`** (Binary ~260 KB),
`pdfSize`, `pdfSha256`, `firstSeen`, `lastSeen`, `history[]`
- upsert: nový → insert; změna sha/fields → push do `history` + update;
shoda → jen `lastSeen`
## Spuštění
```
python download_lab_reports_v1.1.py --dry-run # jen vypíše NOVÉ, nestahuje, nepíše
python download_lab_reports_v1.1.py --limit 5 # test: max 5 řádků
python download_lab_reports_v1.1.py # inkrementální běh (stop-at-known)
python download_lab_reports_v1.1.py --full # projít vše (rekonciliace)
```
## Pozn. ke spuštění
Otevírá viditelné GUI Chrome — musí běžet z **terminálu uživatele s desktop
session** (ne headless/agent prostředí).
## Nahrazuje
`download_lab_reports_v1.0.py` (ukládal na disk) — po dokončení jeho běhu
přesunout v1.0 (.py i .md) do `TRASH/`.