
    {9jt                     H+   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlZ	d dl
Zd dlZ ej        d           d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& dZ' ed          Z(e()                    dd            ej*                    +                    d          Z, e-e(de, dz            Z. e-e(de, dz            Z/e(dz  Z0e0)                    d            e	j1        d          Z2i dddddddddd d!d"d#d$d%d&d'd&d(d)d*d+d,d-d.d/d0dd1d2d3d4d5d6d7d8d9d2d:dd;d<d=Z3d>d?d@dAdBdCdDdEdFdGdHdIZ4g dJZ5g dg dKfddLgfddMgfddNgfddOgfd!dPgfd#dQdRgfd%dSdTgfd'dUdVgfd(dWgfd*dXgfd,dYgfdZd[gfd.d\gfd0g d]fd1d^gfd3d_d`gfdadbgfd5d5gfdcddgfdedegfdfdfdggfdhdhgfdidigfdjdkgfdldmgfdndogfdpdqdrgfdsdtgfdudLgfdvdvgfdwdwgfdxdygfdzdzgfd{d{gfd|d|gfd}d}gfd~d~gfddgfZ6d Z7d Z8d Z9 ej:        e'          Z; e	j<        de;          Z=dD ]Z>e>e=j?        vrde=e><   e=e=d         @                                e=d         @                                z  e=d         @                                z            A                                Z=e=d         B                    e7          e=d<   e=C                    e9d          e=d<   e=d         B                    e8          e=d<   e=d         jD        +                    d          E                    d          ZFdue=jG        eFe=d         E                    d          z  e=d         H                    e-          j-        I                    d          z  df<   de=jG        eFe=d         E                    dZ          z  e=d         H                    e-          j-        J                    dd          z  df<   de=jG        eFe=d         E                    d          z  e=d         H                    e-          j-        J                    dd          z  df<   e=d         K                    d          H                    e-          e=d         K                    d          H                    e-          B                    d           z   e=d<   due=jG        e=d         E                    d          e=d         K                    d          j-        J                    ddd          z  df<   e=e=d         @                                          A                                Z=e=d         K                    e=d                   K                    d          e=d<   e=C                    d d          e=d<   e=d         C                    d           e=d<   e=e=d         e2k             A                                Z=e=L                    ddg          Z=e=M                    g dd          ZNg ZO ePeNd         Q                                R                                          D ]ZSeNeNd         eSk    eNd         K                    d          H                    e-          j-        T                                dk    z           L                    ddg          ZUeUeUd         H                    e-          j-        J                    ddd                    ZU eVeU          r,eUjW        d         ZXeOY                    eSeXd         eXd         +                    d           d eXZ                    d          pdeXZ                    d          pd           e-eXZ                    d          pd           e-eXZ                    d          pd          T                                r4 e-eXZ                    d          pd          T                                rdndz    e-eXZ                    d          pd          z   dd         d            e	j[        eO          Z\g dZ]e\e\d         ^                    e]                   A                                Z\e\d         B                    d  e_e]          D                       e\d<   e\L                    d          `                    d          Z\eja        b                    dddd           g dg dg dg dg ddZcdÄ ZddĄ Zedń Zfg Zgech                                D ]\  ZiZjg ZkejD ]ZleNeNd         elk    eNd         @                                 z  eNd         e2k    z           A                                ZUeUeUd         H                    e-          j-        J                    ddd                    ZUeUM                    ddg          L                    d          ZU eVeU          dk    rekY                    eleUf           eks eVek          ZmdZn ejo        emenz            Zp ejq        ependepdz  fddɦ          \  ZrZserjt        u                    dʦ           esjv        D ]Zwewx                    d˦            eyesjv        ek          D ]\  Zw\  ZlZUewx                    d̦            eeeleUd         z                                          \  Z{Z|ew}                    e{e|            efewele{e|           ew~                    eUd         eUd         ddddЬѦ           ew                    eUd         eUd         dddddլ֦            eVeU          dk    rMeUjW        d          d         Zew                    e e	j        d׬ئ          z
  e e	j        d׬ئ          z              eUjW        d         Z edeled                   \  ZZed         pdT                                Zew                    el ded          de ded         +                    dۦ           de 	ddݬަ           ew                    dddd           ew                    ddd           ew                    dd           ew                    dddewj        dddd edddd          	  	         e0ei dz  Zer                    ed            ej        er           egY                     e-e                     e\j        se\C                    d d          e\d<    e            Ze                     eded         dd                     e                     eded         ddej                             e                     ed ed         ddej                             e                     eded         dd                     e                     eded          ej        d          dd	                     e                     ed
ed          ej        d          dddd                     e                     eded          ej        d           ej        d          ddd                     dhdZdidZg ZeY                     edd                     eY                     ed ej*                    +                    d           de' dd                     eY                     eddez                       eY                     edd
                     eY                     edd                     eY                     edd ez                       eY                     ed!d
                     g d"gZe5D ] ZXeY                     eeX                     !eY                     eed#ez  d$ez  d%ez  d&ez  d'ez  gd(                     eY                     eddez                       eY                     ed)d
                      ee\j?                  ge\K                    d          H                    e-          j        z                                z   ZeY                     eed$ez  d*ez  d+ez  d+ez  d,ez  d+ez  gdd-                     eY                     e#                       eY                     ed.d
                     eY                     ed/d                     egD ]KZeY                     edd0ez                       eY                     e"ed1ez  d 2                     LeY                     e#                       eY                     ed3d
                     d4d5gd6d7gd8d9gd:d;gd<d=gd>d?gd@dAgdBdCggZeY                     eedDez  dEez  gd(                     eY                     edFd
                     dGdHggdI e4h                                D             z   ZeY                     eedJez  dKez  gd(                     eY                     edd ez                       eY                     edLd                     dM Z e_e          D ]S\  ZZ eee"          rBd dNlm"Z  ej        ej                  Zd1ez  Zeej        z  ej        z  Zee_        ee_        T ee.edOez  dOez  dPez  dPez  Q          Ze                    eeeR           dS ej*                    +                    d           d ej        e'           dTgZdU e	j[        e5g dV          fdWe\ffD ]9\  ZZeY                    dXe dYe                    ddZ          z              :eY                    d[           egD ]+ZeY                    d\ ee          j         d]           ,eY                    d^ e	j[         ee4h                                          dGdHg                              ddZ          z              eY                    d_            ee/                              d`                    e          dab            edce.            edde/            ede eVeg                      edf eVe\                      ee\                    dg                     dS (j      N)datetime)PathAgg)PdfPages)colors)A4)getSampleStyleSheetParagraphStyle)cm)SimpleDocTemplate	ParagraphSpacerTable
TableStyleImage	PageBreakKeepTogether)stringWidthz4/home/agent/.hermes/assets/Gesundheit/health_data.dbz5/home/agent/Gesundheit/reports/hyrimoz_lab_monitoringT)parentsexist_okz%Y-%m-%d,Hyrimoz_Behcet_Laborkontrolle_Arztgespraech_z.pdfz.htmlcharts)r   z
2024-01-01CRP)Ng      @
Leukozyten)      @g      $@   Hämoglobin)g      (@g     0@   Hämatokrit)g     A@      I@Thrombozyten)     b@g     `x@	Kreatinin)g      O@g     Z@eGFR)      N@NALT/ALAT)Nr   AST/ASATGGT)Nr#   Alk. Phosphatase)g      D@g     @`@Bilirubin gesamt)Ng      5@Phosphat)gףp=
?g333333?GesamtcholesterinLDL-Cholesterin)N      @non-HDL-Cholesterin)N333333@Triglyceride)N       @)r.   gffffff@)Ng@)Ng      .@)g     @g     @)?r   )r   r    )GlukoseHbA1cProtein/Kreatinin UrinAlbumin/Kreatinin Urinspez. Gewicht UrinUrin Erythrozyten
FibrinogenFaktor VIIIu   Hatemi G et al. 2018 update of the EULAR recommendations for the management of Behçet’s syndrome. Ann Rheum Dis. 2018;77:808–818. PMID: 29625968.u   Leccese P et al. Management of major organ involvement of Behçet’s syndrome: systematic review for EULAR update. Rheumatology. 2018. PMID: 30107448.u   Emmi G et al. Adalimumab-based treatment versus DMARDs for venous thrombosis in Behçet’s syndrome: retrospective 70-patient study. Arthritis Rheumatol. 2018. PMID: 29676522.u   Erol F et al. Does anticoagulation in combination with immunosuppressive therapy prevent recurrent thrombosis in Behçet’s disease? Clin Rheumatol. 2024. PMID: 38357865.zEuropean Medicines Agency: Hyrimoz EPAR / Product information (adalimumab biosimilar): contraindications, infections, TB/HBV screening, monitoring warnings.zUS FDA Humira (adalimumab) Prescribing Information: serious infections, TB testing before/during therapy, HBV reactivation, malignancy warnings, hematologic/hepatic events.zFurer V et al. 2019 update of EULAR recommendations for vaccination in adult patients with autoimmune inflammatory rheumatic diseases. Ann Rheum Dis. 2020. PMID: 31413005.u   NHS Specialist Pharmacy Service: DOACs monitoring guidance — baseline and periodic FBC, liver function, renal function; assess bleeding/anemia and renal-dose suitability.u   Akpolat T et al. Renal Behçet’s disease: an update. Semin Arthritis Rheum. 2008/related reviews; renal involvement can include hematuria/proteinuria/glomerulonephritis, supporting urinalysis when systemic disease is active.zKDIGO CKD guidance: albuminuria/proteinuria and eGFR are core kidney damage markers; spot urine albumin-creatinine/protein-creatinine ratios quantify renal involvement.zEULAR cardiovascular-risk management principles in inflammatory rheumatic disease: systemic inflammation and glucocorticoid exposure can modify CV risk; lipid/metabolic risk should be assessed.)	EULAR2018	MAJOR2018EMMI2018EROL2024EMA_HYRIMOZ
FDA_HUMIRA
EULAR_VACCDOAC_SPSRENAL_BEHCETKDIGO_ALBUMINCV_EULAR))	Sehr hochzCRP + BSG/ESRu"   Krankheitsaktivität / Entzündungu   Baseline und Verlauf unter Hyrimoz: zeigt, ob Entzündung objektiv sinkt; bei vascular Behçet wichtig, weil Thrombosen oft inflammation-driven sind.zEULAR2018; EMMI2018; MAJOR2018)rE   z!Grosses Blutbild mit Differentialu   Safety + Entzündungu   TNF-Hemmer können selten hämatologische Auffälligkeiten/Infekte maskieren; Leukozyten/Neutrophile, Hb und Thrombozyten helfen Infekt, Anämie/Blutung und Entzündungsreaktion zu erkennen.z!FDA_HUMIRA; EMA_HYRIMOZ; DOAC_SPS)rE   z(Leberwerte: ALT, AST, GGT, AP, BilirubinzHyrimoz-/Medikamenten-SafetyzAdalimumab kann selten Leberreaktionen/Hepatitis-B-Reaktivierung triggern; Basis und Verlauf sind sinnvoll, besonders bei Kombimedikation.FDA_HUMIRA; EMA_HYRIMOZ)rE   z7Nierenfunktion: Kreatinin, eGFR, Harnstoff, Elektrolytez&Eliquis-Safety + systemische Kontrolleuw   Apixaban-Sicherheit/Dosis hängt u.a. von Nierenfunktion ab; Behçet kann selten renal beteiligt sein; Verlauf wichtig.z%DOAC_SPS; RENAL_BEHCET; KDIGO_ALBUMIN)rE   zjUrinstatus/Sediment: Erythrozyten, Leukozyten, Protein, Blut; plus Albumin/Kreatinin und Protein/KreatininzNieren-/Vaskulitis-Screeningu   Screening auf Hämaturie/Proteinurie als Hinweis auf renale Beteiligung oder Blutung unter Antikoagulation; quantifizierbare Ratios sind besser als Streifentest allein.z%RENAL_BEHCET; KDIGO_ALBUMIN; DOAC_SPS)rE   u>   TB-Screening: IGRA/Quantiferon ± Thorax nach ärztl. ErmessenzVor/unter TNF-Hemmeru   TNF-Blockade erhöht Risiko für Reaktivierung latenter Tuberkulose; vor Start muss ausgeschlossen/behandelt werden, bei Exposition/Symptomen wiederholen.rF   )rE   z0Hepatitis B: HBsAg, anti-HBc, anti-HBs; HCV; HIVzInfektions-Safety vor BiologiczqHBV-Reaktivierung ist unter TNF-Hemmern beschrieben; HCV/HIV als relevante Basisinfektionen vor Immunsuppression.rF   )Hochuo   Fibrinogen, D-Dimer, Faktor VIII — nur wenn klinisch sinnvoll/bei Symptomen oder zur Hämostase-Verlaufsfrageu   Thrombose-/Entzündungs-Kontextu   Nicht als Routine-“alles klar”-Marker geeignet, aber bei vascular Behçet/Thrombose-Frage als Vergleich oder bei neuen Symptomen hilfreich; Faktor VIII/Fibrinogen können Entzündung/Prothrombose reflektieren.zEULAR2018; EROL2024)rG   z4Lipidprofil: Gesamt, LDL, HDL, non-HDL, Triglycerideu   Vaskuläres Gesamtrisikou   Chronische Entzündung und Steroide erhöhen CV-Risiko; bei vascular phenotype LDL/non-HDL als modifizierbarer Risikofaktor relevant.rD   )Mittelu   HbA1c / NüchternglukosezMetabolisches Risikou   Steroidexposition, Entzündung und kardiovaskuläres Risiko rechtfertigen periodische Kontrolle; Glukose war in der DB teils erhöht.rD   )rH   uW   Immunglobuline IgG/IgA/IgM — wenn rezidivierende Infekte/ungewöhnliche Infektneigungu   Infektanfälligkeit einordnenua   Nicht zwingend Routine vor jedem TNF-Hemmer, aber bei Infektanfälligkeit als Baseline nützlich.zEMA_HYRIMOZ; FDA_HUMIRA)rH   uA   Ferritin, Eisenstatus, B12/Folat, Vitamin D — symptomorientiertu#   Fatigue/Anämie/Knochen-Immunsystemu   Nicht Hyrimoz-spezifisch, aber bei Müdigkeit, niedrigerem Hb, Ernährungsrestriktionen oder Steroid-/Entzündungsbelastung sinnvoll.zklinische Basisdiagnostik)z^CRP$zC[- ]?reaktives ProteinzC-Reaktives Protein \(CRP\)z^Leukozyten$u   ^Hämoglobin$u   ^Hämatokrit$z^Thrombozyten$z^Kreatinin$z^eGFRzeGFR \(Niere\)z^ALT$ALATASATASTz^GGT$zAlk\. Phosphatase	BilirubinAlbuminz	^Albumin$z
^Phosphat$)zCholesterin gesamtzCholesterin totalz^Cholesterin$LDLz^(?:Non|non)-HDLz^(?:Non|non)-HDL-CholesterinHDL-Cholesterinz^HDL-Cholesterin$r2   z	^Glukose$r3   D-DimerzD-Dimerer8   r9   r4   zProtein/Kreatininr5   zAlbumin/KreatininzIgG/Kreatinin UrinzIgG/Kreatininr6   spezzSpezifisches Gewichtr7   zEry \(isomorph\)zUrin Leukozyten	HIV Ag/AkHBs-AntigenzAnti-HBsz
^Anti-HBs$Anti-HBs quantAnti-HBc-totalAnti-HCVz	Vitamin DFerritinzVitamin B12 aktivzVitamin B12c                 z    t           D ]2\  }}|D ]*}t          j        || pdt          j                  r|c c S +3| S N )ALIASESresearchI)namecpatsps       5/home/agent/Gesundheit/generate_hyrimoz_lab_report.pycanonrd      s^      4 	 	AyDJB-- 	 K    c                 \   | t           j        S t          |                                                               dd          }|rt          j        d|          rt           j        S t          j        d|          }|st           j        S t          |                    d                    }|S )N,.z\d{4}-\d{2}-\d{2}z[-+]?\d+(?:\.\d+)?r   )	npnanstrstripreplacer\   r]   floatgroup)xsmvals       rc   	parse_numrt      s    y-	!ffllnnS#&&AA	.22A26Mi%q))ARVmaggajjCJre   c           	          dD ]}t           d          r                     |          nd }|dvrR	 t          j        |d          }t          j        |          s|                                c S o# t          $ r Y {w xY wd                     fddD                       }t          j	        d	|          }|rwt          j
        t          |                    d
                    t          |                    d                    t          |                    d                              S t          j	        d|          }|rt          |                    d                    }t          |                    d
                    }t          |                    d                    }d|cxk    rdk    r-n n*d|cxk    rdk    rn nt          j
        d|z   ||          S 	 t          j                             d                                                    S # t          $ r t          j        cY S w xY w)N)abnahme_datumbefund_datumgetrY   coerce)errors c              3   `   K   | ](}t                              |          pd           V  )dS )rZ   N)rk   rx   ).0krows     rc   	<genexpr>zdate_from.<locals>.<genexpr>   s:      TT1SWWQZZ%2&&TTTTTTre   )	bemerking
datei_namequellez(\d{1,2})\.(\d{1,2})\.(20\d{2})         )yearmonthdayz)(^|[^0-9])(\d{2})(\d{2})(\d{2})(?=[^0-9])         i  ermittlung_datum)hasattrrx   pdto_datetimeisna	normalize	Exceptionjoinr\   r]   	Timestampintro   NaT)	r   keyrs   tstxtrr   yymmdds	   `        rc   	date_fromr      s1    1  %c511;cggcllltj  ^C999wr{{ *<<>>)))*    ! 	TTTT0STTTTTCi2C88A ^|QWWQZZAGGAJJSQRQXQXYZQ[Q[__]]]]i<cBBA @qwwqzz??s1771::B3qwwqzz??b9999"99999B<T"WBB????~cgg&899::DDFFF   vs#   =A33
B ?B +8H$ $H=<H=zVselect l.*, d.datei_name from laborwerte l left join dokumente d on d.id=l.dokument_id)rv   rw   r   rv   r   dokument_idparameter_name	canonicalr   )axisdatewertnumz
2026-01-28z^\s*1(?:\.0)?\s*$zAlbumin Urin<F)regexzIgG UrinIgGrZ   einheitc                     | rd| z   ndS )Nr{   rZ    )us    rc   <lambda>r      s!    yz  oCorstotot  AC re   display_valuer   zUrin|Viollier 28.01.2026)caser   r   z
manuell/DB
source_docc                 D   t          j        |                     d                    rVt          |                     d                                                    r"t          |                     d                    n#t          |                     d          pd          S )Nr   r   rZ   )r   notnarx   rk   rl   )rrs    rc   r   r      s    "(266RZK[K[B\B\  *dadegekeklteueuavava|a|a~a~  *dRVVH-=-=)>)>)>  EH  IK  IO  IO  P\  I]  I]  Ic  ac  Ed  Ed re   source_notec                     t          j        |           s%t          |                                           dk    rdnt          |           S )Nrj   rZ   )r   r   rk   lower)rp   s    rc   r   r      s;    bgajj8mCPQFFLLNN\aLaLagjklgmgm re   bemerking_cleanid)r   r   r   r   last)subsetkeepz20\d{2}-\d{2}-\d{2})r   naz%d.%m.%Yc                     t          |           dv rt          |          dv rdnGt          |           dvrt          |           nddz   t          |          dvrt          |          ndz   S )N)rZ   Nonerj   rZ   )r   rj   u   –)rk   )mnmxs     rc   r   r      s    c"gg9L.L.LQTUWQXQX\oQoQorr  CF  GI  CJ  CJ  R`  C`  C`wz{}w~w~w~  fh  jo  wo  |  @B  |C  |C  KY  |Y  |Y  qt  uw  qx  qx  qx  _a  wb re   reference_minreference_maxu    · d   )	ParameterAktuellDatumReferenz	Bemerkung) r   r   r   r   r   r!   r"   r$   r%   r&   r'   r(   r)   rP   r8   r9   r*   r+   rO   r-   r/   r2   r3   r4   r5   r6   r7   rR   rS   rT   rU   rV   r   c                     i | ]\  }}||	S r   r   )r}   ivs      rc   
<dictcomp>r      s    (I(I(I11(I(I(Ire   ord)columnsg      !@g      #@   )z	font.sizezaxes.titlesizez
figure.dpi)r   r   r   r   )r!   r"   r4   r5   )r$   r%   r&   r'   r(   )r*   r+   rO   r-   r/   r2   r3   )rP   r8   r9   )01_entzuendung_blutbild02_niere_urin03_leber04_lipide_metabolik05_thrombose_markerc                     t                               | d          \  }}t          j        |          s||dS |||k     r||dz  k    rdndS |||k    r||dz  k    rdndS d	S )
NNN)u   —z#e5e7eb?)niedrig#f59e0b)r   #ef4444333333?)   erhöhtr   )r   r   )zNorm/OKz#22c55e)
REF_RANGESrx   r   r   )paramrs   lohis       rc   status_for_valuer      s    ^^E<00FB	ws||  
rz	~#((),3%%<RR	~#((),3%%<RRre   c                 >   d |D             }t                               | d          \  }}t          |          }|"|                    t	          |                     |"|                    t	          |                     |sdS t          |          t          |          }}||z
  }|dk    r t          t          |          dz  d          }t          |dz  t          |          dz  d	          }||z  }||z  }|dk    r||dk    rt          d|          }||fS )
Nc                 T    g | ]%}t          j        |          t          |          &S r   )r   r   rn   )r}   r   s     rc   
<listcomp>z!visual_limits.<locals>.<listcomp>   s+    555"'!**5E!HH555re   r   )r   r   r   g{Gz?g      ?g)\(?g?皙?)r   rx   listappendrn   minmaxabs)	r   valslo_refhi_ref
candidatesyminymaxspanpads	            rc   visual_limitsr      s   55d555D^^E<88NFFdJ:,,U6]];;;:,,U6]];;;"ddZ#j//$D$;Dqyy3t99T>3''
d4iT5#
.
.CCKDaxxV^v{{C4LLT:re   c                    t                               |d          \  }}||d S |||                     |t          ||          ddd           |                     t          ||          t	          ||          ddd           |                     t	          ||          |ddd           |                     |dd	d
d           |                     |dd	d
d           d S ||dk    r|dz  n|dz   }|                     |t	          ||          ddd           |                     t          ||          t	          ||          ddd           |                     t          ||          |ddd           |                     |dd	d
d           d S ||d	z  }|                     |t	          ||          ddd           |                     t          ||          t	          ||          ddd           |                     t          ||          |ddd           |                     |dd	d
d           d S d S )Nr   z#fee2e2g?r   )coloralphazorder#dcfce7g?z#f97316r   g      ?r   )r   	linewidthr   r   r   #ffedd5      ?)r   rx   axhspanr   r   axhline)axr   r   r   r   r   	orange_hi	orange_los           rc   shade_referencer    sN   ^^E<00FB	zbj	~".


4T2itA
NNN


3tR==#dB--yUV
WWW


3tR==$itA
NNN


2Y#S
KKK


2Y#S
KKKKK	 "aBHHR!V	


4T2itA
NNN


3tR==#dI"6"6it\]
^^^


3tY''YdST
UUU


2Y#S
KKKKK	H	


4T9--YdST
UUU


3tY''T2it\]
^^^


3tR==$itA
NNN


2Y#S
KKKKK 
re   r   g333333!@g333333@)figsizesqueezeconstrained_layoutz#fbfcfeoffonog@z#1d4ed8r   )markerr   r   r      whitegffffff?r   )rq   r   	edgecolorr   r   -   )daysz	
aktuell r{   z%d.%m.%yz#0f172a   )r   r   gq=
ףp?#64748br   )r   r   r   rp      g      @)r   labelrotation	labelsizey)r   r  g{Gz?g{Gz?u7   grün=Ziel/Norm · orange=grenzwertig · rot=ausserhalbg333333@z#475569bottomleftg
ףp=
?noner1   )	facecolorr   r  r   )	transformfontsizer   vahabboxz.pngtight)bbox_inchesc                 `    t          | d         t          | d                             d         S )Nr   r   r   )r   rt   )rs    rc   r   r   B  s+    0@;QZ[\]f[gQhQh0i0ijk0l re   StatusSmallBodyText	   )r_   parentfontSizeleading
SmallWhite)r_   r&  r'  r(  	textColor	BodyWhite   Tinyg@H1BlueTitle#0f3761      )r_   r&  r*  r'  r(  H2BlueHeading2      
      )r_   r&  r*  r'  r(  spaceBefore
spaceAfterBoxz#eef6ffz#93c5fd   )r_   r&  	backColorborderColorborderWidthborderPaddingr(  c                     t          t          |                               dd                              dd                              dd                              dd          t          |                   S )	N&z&amp;r   z&lt;>z&gt;
z<br/>)r   rk   rm   styles)r   styles     rc   PrG  N  sk    SXX%%c'22::3vFFNNsSYZZbbcghopprxy~r  A  A  Are   c           	         g }t          |           D ]:\  }}|r|dk    r|rdndn|rdnd|                    fd|D                        ;t          |||rdndd	          }d
ddddt          j        d          fddddg}	|r+|	dddt          j        d          fdddt          j        fgz  }	t          |rdndt          |                     D ]}
|
dz  dk    r/|	                    dd|
fd|
ft          j        d          f           |rt          | |
                   dk    rt          | |
         d                   }d|v sd|v r0|	                    dd|
fd|
ft          j        d          f           d |v sd!|v r/|	                    dd|
fd|
ft          j        d"          f           |	                    t          |	                     |S )#Nr   r)  r+  r#  r$  c                 0    g | ]}t          |          S r   )rG  )r}   r`   	row_styles     rc   r   zmake_table.<locals>.<listcomp>U  s!    777a!Ay//777re   r   LEFT)	colWidths
repeatRowshAlign)VALIGNr   r   r   r   TOPGRIDrP  rQ        ?z#d7dee8)LEFTPADDINGrP  rQ  r   )RIGHTPADDINGrP  rQ  r   )
TOPPADDINGrP  rQ  r   )BOTTOMPADDINGrP  rQ  r   
BACKGROUND)r   r   r0  	TEXTCOLORr   r   z#f8fafcr8     NormOKr   r   r   r   )	enumerater   r   r   HexColorr  rangelenrk   setStyler   )datawidthsheadersmallcolor_status	processedr   r   trF  r!  statusrJ  s               @rc   
make_tablerk  Q  sJ   I4 9 9#AG{AQRFFU;\\ejZzZaZapz	777737778888I4FAAQvVVVA)F5foV_F`F`+a  dC  Ee  gE  Gh  iE s<fV_Y-G-GH;W\]cdjdpJqrr%11As4yy11 T TQ3665<<qeRF6?9;U;U VWWW 	TCQLLA--tAwqz??F46>>lAa5!Avy7Q7QRSSSSf$$	V(;(;lAa5!Avy7Q7QRSSSJJz%  !!!Hre   uE   Hyrimoz / Adalimumab bei vascular Behçet — Labor- & Urin-KontrolleuA   Gesprächsgrundlage für den nächsten Arzttermin · erstellt am z%d.%m.%Y %H:%Mu    · Datenquelle: u6    · Verlauf ab 01.01.2024 · aktuelle HealthManager-DBrT  	Kurzfazitu  Priorität haben: Entzündungsaktivität (CRP + BSG), komplettes Blutbild mit Differential, Leber- und Nierenwerte, Urinstatus/Sediment plus Albumin-/Protein-Kreatinin-Ratio, sowie infektiologische Sicherheitschecks vor/unter TNF-Hemmer (TB/IGRA, HBV/HCV/HIV). Bei vascular Behçet ist das Ziel nicht “Laborkosmetik”, sondern objektive Krankheitskontrolle plus frühzeitige Erkennung von Infekt-, Leber-, Nieren- oder Blutungsproblemen.r   u(   1) Empfohlene Kontrollen mit Begründung)
   Priorität
Wert/PanelZwecku   Begründung für ArztgesprächQuelleng333333?g333333@r,   g333333@g@)rd  rf  z.2) Aktuelle Werte aus der Gesundheitsdatenbankg      @r0   gffffff@)rd  rf  rg  z3) Verlaufsgrafikenu8  Hinweis: Es werden nur Messwerte ab 01.01.2024 dargestellt. Einige Daten wurden aus Dokumenten nachträglich importiert; wenn die Bemerkung ein Messdatum enthielt, wurde dieses Messdatum verwendet. Grün/orange/rot sind visuelle Orientierungsbereiche; labor- und arztseitige Referenzbereiche bleiben verbindlich.g333333?g3333332@)widthheightu,   4) Konkrete Fragen an die Ärztin / den ArztThemaFrageTherapiezielzzWelche objektiven Kriterien zeigen bei mir, dass Hyrimoz wirkt? CRP/BSG, Symptome, Duplex/MRI, keine neuen SVT/Thrombosen?zMonitoring-FrequenzuM   Wie oft Blutbild, Leber, Niere, CRP/BSG und Urin in den ersten 3–6 Monaten?z
Urin/Niereuo   Soll wegen Behçet/Eliquis regelmässig Urinstatus + Albumin/Kreatinin + Protein/Kreatinin kontrolliert werden?Infektionsscreeninguz   Ist IGRA/Quantiferon dokumentiert? HBV/HCV/HIV liegen teilweise vor — reicht das oder braucht es Wiederholung vor Start?Antikoagulationui   Welche Kriterien müssten erfüllt sein, bevor Eliquis irgendwann überhaupt diskutiert/reduziert würde?zLipide/CV-Risikour   LDL/non-HDL waren erhöht: Soll vascular Behçet als zusätzlicher Risikofaktor in die Lipidstrategie einfliessen?	AlarmplanzBei welchen Symptomen soll Hyrimoz pausiert und sofort Kontakt aufgenommen werden? Fieber, Infekt, Atemnot, neue neurologische Zeichen, starke Hautinfektion?g      @g      ,@z
5) Quellenu   Kürzelr   c                     g | ]	\  }}||g
S r   r   )r}   r~   r   s      rc   r   r     s     %G%G%G!qe%G%G%Gre   g@g-@u   Medizinischer Hinweis: Dieser Bericht ersetzt keine ärztliche Beurteilung. Er dient als strukturierte Gesprächsgrundlage und Priorisierung der Laborkontrollen.c                    |                                   |                     dd           |                     t          j        d                     |                     t          d         dt          z  z
  dt          z  d|j                    | 	                    dt          z  dt          z  d           | 
                                 d S )	N	Helveticar  r  r   gffffff?g?zSeite u+   JARVIS Health · Hyrimoz/Behçet Monitoring)	saveStatesetFontsetFillColorr   r_  drawRightStringr   r   page
drawStringrestoreState)canvasdocs     rc   add_page_numberr    s    

NN;"""
	22333
2a5R<R1D#(1D1DEEE
c"fc"f&STTT
re   )r   r   g      ?)pagesizerightMargin
leftMargin	topMarginbottomMargin)onFirstPageonLaterPagesu  <!doctype html><html><head><meta charset="utf-8"><title>Hyrimoz Laborkontrolle</title><style>
body{font-family:Inter,Arial,sans-serif;background:#f6f8fb;color:#0f172a;margin:0;padding:32px} .page{max-width:1100px;margin:auto;background:white;padding:32px;border-radius:18px;box-shadow:0 8px 28px #0001} h1{color:#0f3761} h2{color:#0f3761;border-bottom:2px solid #dbeafe;padding-bottom:6px} table{border-collapse:collapse;width:100%;font-size:13px;margin:12px 0} th{background:#0f3761;color:white;text-align:left} td,th{border:1px solid #d7dee8;padding:7px;vertical-align:top} tr:nth-child(even){background:#f8fafc} .box{background:#eef6ff;border-left:5px solid #2563eb;padding:14px;border-radius:10px} img{max-width:100%;border:1px solid #e2e8f0;border-radius:12px;margin:10px 0}
</style></head><body><div class="page"><h1>Hyrimoz / Adalimumab bei vascular Behçet — Labor- & Urin-Kontrolle</h1><p>Erstellt u   </p><div class="box">Kurzfazit: Priorität haben CRP+BSG, Blutbild mit Differential, Leber/Niere, Urinstatus/Sediment plus Albumin-/Protein-Kreatinin-Ratio sowie TB/HBV/HCV/HIV-Sicherheitschecks.</div>zEmpfohlene Kontrollen)rm  rn  ro  u   Begründungrp  zAktuelle Wertez<h2>z</h2>)indexescapez<h2>Verlaufsgrafiken</h2>z<img src="charts/z">z<h2>Quellen</h2>z</div></body></html>rD  zutf-8)encodingPDFHTMLCHARTSCURRENT_ROWS)r  )r$  )NTTF)osr\   sqlite3mathhtmlr   pathlibr   pandasr   numpyri   
matplotlibusematplotlib.pyplotpyplotpltmatplotlib.backends.backend_pdfr   reportlab.libr   reportlab.lib.pagesizesr   reportlab.lib.stylesr	   r
   reportlab.lib.unitsr   reportlab.platypusr   r   r   r   r   r   r   r   reportlab.pdfbase.pdfmetricsr   DBOUTDIRmkdirnowstrftimeDATErk   r  r  IMGDIRr   MIN_DATEr   SOURCESRECOMMENDATIONSr[   rd   rt   r   connectconread_sql_queryrawcolr   r   copymapapplydteqjan28locastypematchcontainsfillnasort_valuesdrop_duplicates	raw_dedupcur_rowssorteddropnauniquer`   rl   subra  ilocr!  r   rx   	DataFramecurrentORDERisinr^  droprcParamsupdatechart_groupsr   r   r  chart_pathsitemsfnameparamspresentrb   ncolsceilrowssubplotsfigaxespatchset_facecolorflatr   r   ziptolistr   r   set_ylimplotscatterdset_xlim	Timedeltar   rj  scolunit	set_titlegridtick_paramstext	transAxesdictoutsavefigcloseemptyrE  addr  r_  rG  rk  storyrec_datar   valuescur_datacp	questionssource_datar  idxel
isinstancePILPILImageopenfilenameimwrr  rq  h	drawWidth
drawHeightr  buildr  
html_partstitledfto_htmlr_   
write_textr   print	to_stringr   re   rc   <module>r     sS   " " " " " " " " " " " " " " " " " " " "                         
u          4 4 4 4 4 4             & & & & & & D D D D D D D D " " " " " " v v v v v v v v v v v v v v v v v v v v 4 4 4 4 4 49tCDD TD ) ) )X\^^Z((CHdHHHHIISJtJJJ	JKKhd3332<%%	;+ < <	
 N  L   
<     {  ;!" K#$ *)*$ 3  
: j k C ~ r A @  y @ T   (
RRRS(O$%( %&'( %&'	(
 '()( >"#( h)*+( (G$%( '6"#( XJ( ./0( ,(( ( -!( YYYZ(  !!(" 02QRS#($ -./%(& o&''(( )(* xj+(, [)*-(. M?#/(0 ^$%1(2  4563(4  4565(6 ,-.7(8 G%<=>9(: ./0;(< )*=(> <.!?(@ ^$%A(B -!C(D )*+E(F )*+G(H +I(J <.!K(L +M(N >*+O(T      8 GOBBrtwxx6  C
#+C 
C %%''#h-*<*<*>*>>]ASAXAXAZAZZ
[\aacc%&**511K IIiaI((Fv;??9%%E
F
++..|<< @Q$%((666V9K9KC9P9P9T9Z9Z[o9p9ppr}} ~ |J$%((333c&k6H6H6M6M6Q6Z6Z[^fk6Z6l6llnyy z xB$%((///#f+2D2DS2I2I2M2V2VWZbg2V2h2hhjuu v[''++22377#i.:O:OPR:S:S:Z:Z[^:_:_:c:c  eC  eC  ;D  ;D  DO  ar		!	!,	/	/C4D4K4KB4O4O4S4\4\]w  D  LP4\  5Q  5Q  	R  T_  	_  `V				!!##l#**3x=99@@NNL 99  e  e  lm9  n  nM ;'--.m.mnn Fx %%''OOVDM""


%J%J%JQW

X
X	 
		+&--//6688	9	9 
 
A9[)1,61B1I1I"1M1M1T1TUX1Y1Y1]1c1c1e1egi1ijkwwy  AE  yF  	G  	GCS[$$(112HPTY^1___`C
s3xx 
(2,q'9AfIDVDVWaDbDb b  b  b  de  di  di  jy  dz  dz  d@  ~@  BC  BG  BG  HW  BX  BX  B^  \^  _  _#aeeM228b99ss155Q^K_K_KeceGfGfGlGlGnGn  >gsvsvwxw|w|  ~O  xP  xP  xV  TV  tW  tW  t]  t]  t_  t_  >gVV  eg  h  kn  kn  op  ot  ot  uF  oG  oG  oM  KM  kN  kN  N  PT  QT  PT  U
 
 	 	 	
 	X \  \  \$))%0016688{#''(I(I		%8H8H(I(I(IJJE""'''66   sMM N N NPPP[[[SSS L  L  LAAA         L L L. !'')) !! !!ME6G 0 0y-q0i6F6K6K6M6M5MNR[\bRcemRmnottvvV##C((,556LTX]b5cccd//;;FCC3s88Q;;#w///H	c'llAD1T6!2!2Dcl4T$Y/?cghhhICII&&&i''c$)W-- j j
7Ac
"]1c%j&7&7&9&9::
d
D$AtT***
FSZs)\]^^^


3v;E
b	W`clm
nnn3s88q==hqk&!AKKLBLb11111|r|7L7L7L3LMMMXb\''4;77Y%2,,..
mmT&\mmDmmd6l>S>ST^>_>_mmekmmu~  EF  	G  	G  	G
CyB???
CrSAAA
C3///
dUacamx{  DM  RZ  _e  lp  lp  {B  JM  Y_  eh  li  li  li  	j  	j  	j  	j%~~~CKKK)))CIcNNNss3xx     } v&l&lstuuGH  

>>wvj/ACYZ[[[ \ \ \ 

>>|F:4FQT^_kqkwxxx y y y 

>>{6*3EPQ[]ioiuvvv w w w 

>>vfZ.@3X[\\\ ] ] ] 

>>xw?6?[dKeKepr|~  A  A  A 

>>xz0Bofo^gNhNhsu  @B  PR  _`  a  a  a  b  b  b 

>>uVJ-??6?[dKeKe  tCsy  tC  DM  tN  tN  \_  op  z|  }  }  }  ~  ~  ~A A A A   ( 	 QQVX`aa b b b QQ  JS_S[S_SaSaSjSjk{S|S|  J  J  PR  J  J  J  LS  T  T  U  U  U VVAd2g    QQ{H%% & & & QQ  J  LQ  R  R  S  S  S VVAc"f    QQ98DD E E E
X
X
X	Y	  AOODDGG ZZ#b&RBs2vc"f)MUYZZZ [ [ [ VVAd2g    QQ?JJ K K K
$w

	 7>>"#5#5#<#<S#A#A#H#O#O#Q#Q	Q ZZ#b&RBs2vc"fSQSV)T\`osttt u u u YY[[    QQ$h// 0 0 0 QQ  J  LS  T  T  U  U  U
 5 5B	LL$r'""###	LLrb3334444 YY[[    QQ=xHH I I I   M  Nf g  A  T  U~   I  J  m  n		 ZZ	3r6$r'*:%HHH I I I QQ|X&& ' ' '
#$%G%Gw}}%G%G%GG ZZSVDG,<DIII J J J VVAc"f    QQ  s  u|  }  }  ~  ~  ~   i ( (FCz"e ())))))8=%%
r'Qry[)1acBCFs2vY]^`Y`ostvovwww 		%_?	 K K K[ CO  CK  CO  CQ  CQ  CZ  CZ  [k  Cl  Cl[ [ J  C  J  KM  N  N[ [ [ \
 +LBL  SN  SN  SN  -O  -O  -O  P  Sc  el  Rm  n P PIE2)U)))"**5**N*NNOOOO 
  - . . .
 = =B;$$r((-;;;<<<< 
  $\R\$$w}}2G2GR[\fQg%h%h%h%p%pw|  FJ%p  &K  &K  K  L  L  L 
  ( ) ) ) T

  dii
++g  > > > eS    fd    hK   ! ! ! ncc'll # # # ge$$ % % % % %re   