2.8 KiB
download_lab_reports_v1.2.py
Verze: 1.2 | 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á.
Klíč record_id = reportId
reportId = stabilní 32-hex ID dokumentu z dat AG Gridu, napříč všemi řádky
unikátní (ověřeno: 997 řádků → 997 unikátních reportId/fileId).
Proč ne metadata: na portálu se reálně vyskytují různá PDF se shodnými
viditelnými metadaty — stejný site|subject|accession|visit|posted i na
minutu (korekce výsledku / reissue se shodným časem Posted). Ověřeno: 5 souborů
pro accession 6227697718 má 5 různých sha256. Klíčování podle metadat (v1.1)
by je chybně sloučilo → ztráta dat. reportId to řeší.
Odkud data
Z in-memory dat AG Gridu přes grid API (__agComponent.gridApi):
getDisplayedRowAtIndex(i).data → reportId, fileLinks[].fileId+fileName
(server), postedDateTime (ISO), siteNum, subjectNumber. reportId jde
přečíst bez scrollování → levný pre-check „už mám". Accession/Visit/Collected
leží v gridu níž (ve struktuře visits), proto se berou z buněk (po scrollu).
Pozn.: accession se nijak nepočítá ani neodvozuje — je to reálný
identifikátor přidělený kitu v laboratoři; čte se doslova z buňky a ukládá
1:1 (accession i fields.Accession).
Stahování + inkrementálně
Klik na „English" → expect_download, PDF z download.path() (bez save_as).
List je Posted DESC; ze seznamu (rowIndex, reportId) se shora hledá první už
uložený reportId → stop-at-known (zbytek je starší a v Mongo je). Stahují
se jen nové (nahoře). Korekce = nový reportId → uloží se jako nový.
MongoDB dokument
record_id(=reportId), study, studyCode, type, site, subject,
accession, visit, collected, posted, postedIso, fileId,
serverFileName, fields (sloupce tabulky), fileName (náš název),
pdf (Binary ~260 KB), pdfSize, pdfSha256, firstSeen, lastSeen,
history[]. Upsert: nový→insert; změna sha/fields→push history+update;
shoda→jen lastSeen.
Název v fileName: 77242113UCO3001 {odběr} {Site} {Subject} {Visit} {Accession} posted {posted}.pdf
Spuštění (z terminálu uživatele — otevírá GUI Chrome)
python download_lab_reports_v1.2.py --dry-run # vypíše NOVÉ, nestahuje
python download_lab_reports_v1.2.py --limit 5 # test: 5 nových
python download_lab_reports_v1.2.py # inkrementální běh
python download_lab_reports_v1.2.py --full # rekonciliace přes vše
Nahrazuje
download_lab_reports_v1.0.py (disk) a v1.1 (klíč podle metadat — chybný).
Obě → TRASH/.