2.4 KiB
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:
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_MODEpromě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/.