+
    M÷›jÞ  ã                   óH  € R t ^ RIHtHt ^ RIHtHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ]! RR.R7      t]P9                  R]R7      ]! ]4      3R R ll4       t]P9                  R4      ]! ]4      3R R ll4       tR# )z4Admin dashboard summary counts + chart aggregations.)ÚdateÚ	timedelta)Ú	APIRouterÚDepends)Úfunc©ÚSession)Úget_db)ÚState)ÚDistrict)ÚCenter)ÚDoctor)ÚPatient)ÚMeasurement)ÚDashboardStatsz
/dashboardÚ	Dashboard)ÚprefixÚtagsz/stats)Úresponse_modelc                ó$   € V ^8„  d   QhR\         /# ©é   Údbr   )Úformats   "Ú0D:\projects\ble_backend\app\routers\dashboard.pyÚ__annotate__r      s   € ÷ ñ œñ ó    c           	      ól  € \        V P                  \        4      P                  4       V P                  \        4      P                  4       V P                  \
        4      P                  4       V P                  \        4      P                  4       V P                  \        4      P                  4       R 7      # ))Útotal_statesÚtotal_districtsÚtotal_centersÚtotal_doctorsÚtotal_patients)r   Úqueryr
   Úcountr   r   r   r   )r   s   &r   Údashboard_statsr%      sw   € äØ—X‘Xœe“_×*Ñ*Ó,ØŸ™¤Ó*×0Ñ0Ó2Ø—h‘hœvÓ&×,Ñ,Ó.Ø—h‘hœvÓ&×,Ñ,Ó.Ø—x‘x¤Ó(×.Ñ.Ó0ôð r   z/chartsc                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r       s   € ÷ 9ñ 9œñ 9r   c           
     óÎ  € V P                  \        P                  \        P                  ! \        P
                  4      4      P                  \        P                  4      P                  \        P                  ! \        P
                  4      P                  4       4      P                  4        UUu. uF  w  rRT;'       g    RRV/NK  	  pppV P                  \        P                  \        P                  ! \        P
                  4      4      P                  \        P                  4      P                  \        P                  ! \        P
                  4      P                  4       4      P                  4        UUu. uF  w  rBRT;'       g    RRV/NK  	  pppV P                  \        P                  \        P                  ! \        P
                  4      4      P                  \        4      P                  \        \        P                   \        P
                  8H  4      P                  \        P
                  \        P                  4      P                  \        P                  ! \        P
                  4      P                  4       4      P                  4        UUu. uF  w  rbRVRV/NK  	  ppp\"        P$                  ! 4       pV\'        ^R7      ,
          p	V P                  \        P"                  ! \        P(                  4      \        P                  ! \        P
                  4      4      P+                  \        P"                  ! \        P(                  4      V	8¬  4      P                  \        P"                  ! \        P(                  4      4      P                  4       p
/ pV
 F6  w  rÂ\-        VR4      '       d   VP/                  4       M
\1        V4      pW+V&   K8  	  . p\3        ^4       FX  pV	\'        VR7      ,           pVP5                  RVP7                  R4      RVP9                  VP/                  4       ^ 4      /4       KZ  	  RVRVR	VR
V/# u uppi u uppi u uppi )z<Aggregations for the dashboard graphs (patients & readings).ÚlabelÚUnknownr$   )ÚdaysÚ	isoformatz%d %bÚreadings_by_test_typeÚreadings_by_statusÚpatients_per_doctorÚreadings_last_7_days)r#   r   Ú	test_typer   r$   ÚidÚgroup_byÚorder_byÚdescÚallÚstatusr   Ú	full_namer   Úselect_fromÚ	outerjoinÚ	doctor_idr   Útodayr   Ú
created_atÚfilterÚhasattrr+   ÚstrÚrangeÚappendÚstrftimeÚget)r   ÚtÚcr,   Úsr-   Únamer.   r;   ÚstartÚrowsÚper_dayÚdÚkeyr/   ÚiÚdays   &                r   Údashboard_chartsrO      s(  € ð —H‘Hœ[×2Ñ2´D·J²J¼{¿~¹~Ó4NÓOß	‰”+×'Ñ'Ó	(ß	‰”$—*’*œ[Ÿ^™^Ó,×1Ñ1Ó3Ó	4ß	‰‹ðôñ‰DˆAð 
�!—.�.�y '¨1Ó-ñð ñ ð —H‘Hœ[×/Ñ/´·²¼K¿N¹NÓ1KÓLß	‰”+×$Ñ$Ó	%ß	‰”$—*’*œ[Ÿ^™^Ó,×1Ñ1Ó3Ó	4ß	‰‹ðôñ‰DˆAð 
�!—.�.�y '¨1Ó-ñð ñ ð —x‘x¤× 0Ñ 0´$·*²*¼W¿Z¹ZÓ2HÓIß	‰”VÓ	ß	‰”7œG×-Ñ-´·±Ñ:Ó	;ß	‰”&—)‘)œV×-Ñ-Ó	.ß	‰”$—*’*œWŸZ™ZÓ(×-Ñ-Ó/Ó	0ß	‰‹ðôñ‰GˆDð 
�$˜ Ó#ñð ñ ô �JŠJ‹L€EØ”I 1Ô%Õ%€Eà
�‰”—’œ;×1Ñ1Ó2´D·J²J¼{¿~¹~Ó4NÓOß	‰”—	’	œ+×0Ñ0Ó1°UÑ:Ó	;ß	‰”$—)’)œK×2Ñ2Ó3Ó	4ß	‰‹ð	 	ð €GÛ‰ˆÜ& q¨+×6Ò6ˆa�k‰kŒm¼CÀ»FˆØ�‹ñ ð ÐÜ�1ŽXˆØ”i QÔ'Õ'ˆØ×#Ñ#Ø�c—l‘l 7Ó+¨W°g·k±kÀ#Ç-Á-Ã/ÐSTÓ6UÐVö	
ñ ð 	 Ð!6ØÐ0ØÐ2ØÐ 4ð	ð ùóaùóùós   Â0QÃ
QÅ=QÆ
QÊQ!N)Ú__doc__Údatetimer   r   Úfastapir   r   Ú
sqlalchemyr   Úsqlalchemy.ormr   Údatabaser	   Úmodel.stater
   Úmodel.districtr   Úmodel.centerr   Úmodel.doctorr   Úmodel.patientr   Úmodel.measurementr   Úschemasr   ÚrouterrC   r%   rO   © r   r   Ú<module>r_      s†   ðÙ :ß $ç &Ý Ý "å Ý Ý #Ý Ý Ý !Ý )Ý "á	˜,¨k¨]Ô	;€ð ‡�ˆH ^€Ó4Ù")¨&£/ö ó 5ðð ‡�ˆIÓÙ#*¨6£?ö 9ó ò9r   