z230
This commit is contained in:
@@ -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/`.
|
||||
Reference in New Issue
Block a user