z230
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# Kontext práce — IWRS Notifications Pipeline
|
||||
## Datum: 2026-06-01
|
||||
|
||||
## Co bylo uděláno
|
||||
|
||||
### Nové soubory
|
||||
- `download_subject_notifications.py` — standalone skript pro stažení notifikací (referenční, nepoužívaný v pipeline)
|
||||
- `test_notifications.py` — testovací skript pro jednoho pacienta (CZ100222003 / UCO3001)
|
||||
- `create_iwrs_tables.py` — jednorázový skript pro vytvoření MySQL tabulek
|
||||
|
||||
### Upravené soubory
|
||||
- `download_subject_details.py` — přidáno stahování notifikací (PDF + JSON) pro každý subjekt přímo v loopě
|
||||
- `import_to_mysql.py` — přidána funkce `import_notifications()` která importuje JSON+PDF do DB a přesouvá do `Zpracováno/`
|
||||
- `create_iwrs_tables.sql` — přidána tabulka `iwrs_notifications`
|
||||
- `run_all.py` — krok 2 nyní volá `dsd.run()` z `download_subject_details.py`
|
||||
|
||||
## Jak to funguje
|
||||
|
||||
### Stahování notifikací (v `download_subject_details.py`)
|
||||
1. Při výběru subjektu se zachytí `table_1` API response (obsahuje notifikace s `pk`, `et_title`, `label`, `body`, `actual_date_raw`)
|
||||
2. Porovná `pk` s DB (`iwrs_notifications`) — stahuje jen nové
|
||||
3. Stáhne PDF přes `page.request.get()` s Bearer tokenem (JWT se načítá čerstvě před každým requestem)
|
||||
4. Uloží PDF + JSON do `IncomingSourceReportsDetails/{study}/`
|
||||
5. Název souboru: `{actual_date_raw}_{label_s_podtržítky}.pdf` (při kolizi přidá `_pk{pk}`)
|
||||
|
||||
### API endpointy
|
||||
- **Notifikace data**: `POST /_/p/{instance_id}/api/v1/reports_api/report_data?path=patient_detail_report&id={subject}&key=table_1&unblinded=false`
|
||||
- **PDF download**: `GET /_/p/{instance_id}/api/v1/meta_api/pdfnotification?pk={pk}&title={et_title}&html=true`
|
||||
- **app_instances** (pro zjištění instance_id): `GET /_/api/dispatch/app_instances/`
|
||||
- Headers: `Authorization: Bearer {JWT}`, `lang: en`, `prancer_study: {study_code}`
|
||||
|
||||
### Instance ID mapping
|
||||
- `77242113UCO3001` → `/_/p/106`
|
||||
- `42847922MDD3003` → `/_/p/70`
|
||||
- `77242113CRD3001` → `/_/p/103`
|
||||
|
||||
### Import (`import_to_mysql.py`)
|
||||
- Čte všechny `.json` soubory z `IncomingSourceReportsDetails/{study}/`
|
||||
- Načte příslušné `.pdf` jako binární data
|
||||
- Uloží do tabulky `iwrs_notifications` (UNIQUE KEY na `pk` — bez duplikátů)
|
||||
- Přesune soubory do `IncomingSourceReportsDetails/{study}/Zpracováno/`
|
||||
|
||||
## MySQL tabulka `iwrs_notifications`
|
||||
```sql
|
||||
id, study, subject, pk (UNIQUE), title, label, event, actual_date, text (TEXT), pdf (MEDIUMBLOB), source_file, imported_at
|
||||
```
|
||||
|
||||
## Aktuální stav
|
||||
- UCO3001: ~76 notifikací importováno
|
||||
- MDD3003: ~119 notifikací importováno (část 403 chyb — JWT expiroval, opraveno načítáním JWT čerstvě)
|
||||
- MDD3003 notifikace s 403 čekají na příští `run_all.py` (soubory nejsou v `Zpracováno`, takže se znovu stáhnou)
|
||||
|
||||
## Co zbývá / možná vylepšení
|
||||
- Ověřit že MDD3003 403 chyby jsou opraveny (JWT refresh)
|
||||
- `CZ100132003` UCO3001 — timeout při stahování XLS (subjekt přeskočen, zkusit znovu)
|
||||
- Případně přidat retry logiku pro timeout
|
||||
Reference in New Issue
Block a user