2.9 KiB
2.9 KiB
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 funkceimport_notifications()která importuje JSON+PDF do DB a přesouvá doZpracováno/create_iwrs_tables.sql— přidána tabulkaiwrs_notificationsrun_all.py— krok 2 nyní voládsd.run()zdownload_subject_details.py
Jak to funguje
Stahování notifikací (v download_subject_details.py)
- Při výběru subjektu se zachytí
table_1API response (obsahuje notifikace spk,et_title,label,body,actual_date_raw) - Porovná
pks DB (iwrs_notifications) — stahuje jen nové - Stáhne PDF přes
page.request.get()s Bearer tokenem (JWT se načítá čerstvě před každým requestem) - Uloží PDF + JSON do
IncomingSourceReportsDetails/{study}/ - 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/10642847922MDD3003→/_/p/7077242113CRD3001→/_/p/103
Import (import_to_mysql.py)
- Čte všechny
.jsonsoubory zIncomingSourceReportsDetails/{study}/ - Načte příslušné
.pdfjako binární data - Uloží do tabulky
iwrs_notifications(UNIQUE KEY napk— bez duplikátů) - Přesune soubory do
IncomingSourceReportsDetails/{study}/Zpracováno/
MySQL tabulka iwrs_notifications
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 vZpracováno, takže se znovu stáhnou)
Co zbývá / možná vylepšení
- Ověřit že MDD3003 403 chyby jsou opraveny (JWT refresh)
CZ100132003UCO3001 — timeout při stahování XLS (subjekt přeskočen, zkusit znovu)- Případně přidat retry logiku pro timeout