Files
janssen/IWRS/Trash/Patients/CONTEXT.md
T
2026-06-10 11:59:19 +02:00

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 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

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