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,53 @@
# 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/`.