+
    rA‰i  ã            
       óh  € R t ^ RIt^ RIt^ RIHt ^ RIHt ]P                  P                  ^ ]P                  P                  ]P                  P                  ]P                  P                  ]
4      4      4      4       ^ RIHtHt ^ RIHtHtHtHtHtHtHtHtHtHtHtHtHtHtHt  ! R R4      tR# )uD   
æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆç”Ÿæˆ�ã‚µãƒ¼ãƒ“ã‚¹ - ãƒ‡ãƒ¼ã‚¿é›†è¨ˆãƒ­ã‚¸ãƒƒã‚¯
N)Údatetime)Ú
monthrange)ÚESTIMATED_HANDLE_TIME_MINUTESÚHOURLY_COST)Úget_statistics_for_periodÚget_monthly_comparisonÚget_daily_statisticsÚget_hourly_statisticsÚget_day_of_week_statisticsÚget_hour_by_day_of_weekÚget_average_turnsÚget_unresolved_by_hourÚget_keywordsÚget_unresolved_keywordsÚget_unanswered_questionsÚget_recent_dislikedÚget_feedback_daily_statsÚget_qa_usage_rankingÚget_category_usage_rankingc                   ór   a € ] tR t^t o RtV 3R lR ltR tV 3R lR ltV 3R lR ltV 3R	 lR
 lt	Rt
V tR# )ÚReportDataAggregatoruH   æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆã�«å¿…è¦�ã�ªãƒ‡ãƒ¼ã‚¿ã‚’å�Žé›†ãƒ»é›†è¨ˆã�™ã‚‹ã‚¯ãƒ©ã‚¹c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )é   ÚyearÚmonth)Úint)ÚformatÚ__classdict__s   "€ÚDC:\Users\tmash\Documents\claude_code\chat\reports\core\aggregator.pyÚ__annotate__Ú!ReportDataAggregator.__annotate__!   s   ø€ ÷ Añ A™Sð A©ñ Aó    c                óX   € Wn         W n        V P                  4       w  V n        V n        R # )N)r   r   Ú_get_month_rangeÚ
start_dateÚend_date)Úselfr   r   s   &&&r   Ú__init__ÚReportDataAggregator.__init__!   s#   € ØŒ	ØŒ
Ø)-×)>Ñ)>Ó)@Ñ&ˆŒ˜žr!   c                óÆ   € \        V P                  V P                  4      w  rV P                   RV P                  R R2pV P                   RV P                  R RVR 2pW43# )u*   å¯¾è±¡æœˆã�®é–‹å§‹æ—¥ã�¨çµ‚äº†æ—¥ã‚’å�–å¾—Ú-Ú02dz-01)r   r   r   )r&   Ú_Úlast_dayÚstartÚends   &    r   r#   Ú%ReportDataAggregator._get_month_range&   s`   € ä  §¡¨D¯J©JÓ7‰ˆØ—9‘9�+˜Q˜tŸz™z¨#Ð.¨cÐ2ˆØ—‘�˜1˜TŸZ™Z¨Ð,¨A¨h°s¨^Ð<ˆØˆzÐr!   c                ó    <€ V ^8„  d   QhRS[ /# ©r   Úreturn©Údict)r   r   s   "€r   r   r    -   s   ø€ ÷ 
ñ 
¡$ñ 
r!   c           
     óV  € V P                  4       p\        V P                  V P                  4      p/ RRV P                  RV P                  RV P                  RV P
                  /bRVbRVbR\        V P                  V P
                  4      bR	\        V P                  V P
                  4      bR
\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\        V P                  V P
                  4      bR\!        V P                  V P
                  4      bR\#        V P                  V P
                  4      bR\%        V P                  V P
                  4      bRV P'                  V4      b# )u*   å…¨ãƒ‡ãƒ¼ã‚¿ã‚’å�Žé›†ã�—ã�¦è¾žæ›¸ã�§è¿”ã�™Úperiodr   r   r$   r%   ÚsummaryÚ
comparisonÚdaily_statsÚhourly_statsÚday_of_week_statsÚhour_by_day_of_weekÚ	avg_turnsÚunresolved_by_hourÚkeywordsÚunresolved_keywordsÚunanswered_questionsÚrecent_dislikedÚfeedback_daily_statsÚqa_usage_rankingÚcategory_usage_rankingÚestimated_savings)Ú_get_summaryr   r   r   r$   r%   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú_calculate_savings)r&   r8   r9   s   &  r   Úcollect_all_dataÚ%ReportDataAggregator.collect_all_data-   sü  € à×#Ñ#Ó%ˆÜ+¨D¯I©I°t·z±zÓBˆ
ð
ØØ˜Ÿ	™	Ø˜Ÿ™Ø˜dŸo™oØ˜DŸM™Mð	ð
ð �wð
ð ˜*ð
ð Ô/°·±ÀÇÁÓOð
ð Ô1°$·/±/À4Ç=Á=ÓQð
ð  Ô!;¸D¿O¹OÈTÏ]É]Ó![ð
ð "Ô#:¸4¿?¹?ÈDÏMÉMÓ#Zð
ð Ô*¨4¯?©?¸D¿M¹MÓJð
ð !Ô"8¸¿¹È$Ï-É-Ó"Xð
ð œ T§_¡_°d·m±mÓDð
ð  "Ô#:¸4¿?¹?ÈDÏMÉMÓ#Zð!
ð" #Ô$<¸T¿_¹_ÈdÏmÉmÓ$\ð#
ð$ Ô2°4·?±?ÀDÇMÁMÓRð%
ð& #Ô$<¸T¿_¹_ÈdÏmÉmÓ$\ð'
ð( Ô 4°T·_±_ÀdÇmÁmÓ Tð)
ð* %Ô&@ÀÇÁÐRV×R_ÑR_Ó&`ð+
ð,   ×!8Ñ!8¸Ó!Að-
ð 	
r!   c                ó    <€ V ^8„  d   QhRS[ /# r2   r4   )r   r   s   "€r   r   r    K   s   ø€ ÷ 
ñ 
™dñ 
r!   c                ó&  € \        V P                  V P                  4      pVR,          pVR,          pVR,          pVR,          pVR,          pVR,          pVR,          pV^ 8”  d   \        W2,          ^d,          ^4      M^ p	V^ 8”  d   \        WB,          ^d,          ^4      M^ p
V^ 8”  d   \        WW,          ^d,          ^4      M^ pV^ 8”  d   \        Wr,          ^d,          ^4      M^ pV^ 8”  d   \        W(,          ^4      M^ p/ VCRV	R	V
R
VRVRV/C# )u   ã‚µãƒžãƒªãƒ¼çµ±è¨ˆã‚’è¨ˆç®—Útotal_conversationsÚanswered_countÚunanswered_countÚlikes_countÚdislikes_countÚtotal_feedbacksÚ
unique_ipsÚresolution_rateÚunresolved_rateÚsatisfaction_rateÚfeedback_rateÚconversations_per_user)r   r$   r%   Úround)r&   ÚstatsÚtotalÚansweredÚ
unansweredÚlikesÚdislikesrS   rT   rU   rV   rW   rX   rY   s   &             r   rH   Ú!ReportDataAggregator._get_summaryK   s$  € ä)¨$¯/©/¸4¿=¹=ÓIˆàÐ+Õ,ˆØÐ)Õ*ˆØÐ-Õ.ˆ
Ø�mÕ$ˆØÐ)Õ*ˆØÐ 1Õ2ˆØ˜<Õ(ˆ
ð ?DÀa¼iœ% Õ 0°3Õ 6¸Ô:ÈQˆà@EÈÄ	œ% 
Õ 2°SÕ 8¸!Ô<ÈqˆàGVÐYZÔGZœE %Õ"9¸CÕ"?ÀÔCÐ`aÐàCHÈ1Ä9œ˜oÕ5¸Õ;¸QÔ?ÐRSˆàAKÈaÄ¤ uÕ'9¸1Ô!=ÐUVÐð
Øð
à˜Ø˜ØÐ!2Ø˜]Ø$Ð&<ñ
ð 	
r!   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   r8   r3   r4   )r   r   s   "€r   r   r    k   s   ø€ ÷ 
ñ 
©$ð 
±4ñ 
r!   c                ó¬   € VR,          pV\         ,          pV^<,          pV\        ,          pRVR\         R\        RVR\        V^4      R\        V4      /# )u'   æŽ¨å®šå‰Šæ¸›æ™‚é–“ãƒ»ã‚³ã‚¹ãƒˆã‚’è¨ˆç®—rO   Úestimated_handle_time_minutesÚhourly_costÚsaved_minutesÚsaved_hoursÚ
saved_cost)r   r   rZ   r   )r&   r8   r]   rf   rg   rh   s   &&    r   rI   Ú'ReportDataAggregator._calculate_savingsk   sd   € àÐ+Õ,ˆð !Ô#@Õ@ˆà# bÕ(ˆà ¤;Õ.ˆ
ð ˜hØ+Ô-JØœ;Ø˜]Øœ5 ¨aÓ0Øœ#˜j›/ð
ð 	
r!   )r%   r   r$   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r'   r#   rJ   rH   rI   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      s8   ø‡ € ÙR÷Að Aò
÷
ð 
÷<
ð 
÷@
ö 
r!   r   )rn   ÚosÚsysr   Úcalendarr   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úconfigr   r   Úcore.databaser   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   © r!   r   Ú<module>r|      sy   ðñó 
Û 
Ý Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°2·7±7·?±?À8Ó3LÓ#MÓNÔ Oß =÷÷ ÷ ÷ ñ ÷&_
ó _
r!   