
    g5i                        d Z ddlmZ ddlZddlmZmZ 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mZ e G d d             Z G d d      Zy)zAI-powered KPI analyzer.    )annotationsN)	dataclassfield)Any   )GeminiClient)PromptLibrary)KPITree)KPIAnalyzerBottleneckInfoPerformanceInfoc                  b    e Zd ZU dZded<   ded<   ded<   dZded	<    ee
      Zded<   ddZ	y)AnalysisResultzResult of AI analysis.stranalysis_typesummarydict[str, Any]datag333333?float
confidence)default_factoryraw_responsec                `    | j                   | j                  | j                  | j                  dS )zConvert to dictionary.r   r   r   r   r   )selfs    d/var/www/tkim.planitai.co.jp/gemegg/20251207-make-pdf-report/project/planitai-kpi/src/ai/analyzer.pyto_dictzAnalysisResult.to_dict   s,     "//||II//	
 	
    N)returnr   )
__name__
__module____qualname____doc____annotations__r   r   dictr   r    r   r   r   r      s4     L
J#(#>L.>
r   r   c                  8    e Zd ZdZddZd	dZd
dZd	dZddZy)
AIAnalyzerz*AI-powered analyzer for KPIs using Gemini.c                V    || _         || _        t        |      | _        t        | _        y)zyInitialize AI analyzer.

        Args:
            client: Gemini client.
            tree: KPI tree to analyze.
        N)clienttreer   kpi_analyzerr	   prompts)r   r*   r+   s      r   __init__zAIAnalyzer.__init__&   s&     	'-$r   c           
     .   | j                   j                         D cg c]  }|j                          }}| j                  j                  j                  || j                  j                         t        j                  |dd            }| j                  j                  || j                  j                        }|j                  dd      }t        d||j                  d	g       |j                  d
g       |j                  dg       d|      S c c}w )zAnalyze KPI trends.

        Args:
            period: Analysis period string.

        Returns:
            Analysis result with trend insights.
        F   ensure_asciiindent)periodtree_structureperformance_datapromptsystem_promptr   u*   トレンド分析を完了しました。trendtrends
highlightscorrelations)r;   r<   r=   r   r   r   r   )r,   get_performance_summaryr   r-   TREND_ANALYSISrenderr+   to_textjsondumpsr*   generate_jsonSYSTEM_PROMPTgetr   )r   r4   pr6   r8   responser   s          r   analyze_trendszAIAnalyzer.analyze_trends2   s     261B1B1Z1Z1\]AAIIK]] ,,3399,,.!ZZ(8uUVW 4 
 ;;,,,,44 - 

 ,,y*VW!",,x4&ll<< (^R @
 "	
 		
# ^s   Dc                   | j                   j                         }|j                  dd      }|j                  dd      xs d}| j                   j                         }|D cg c]  }|j	                          }}| j                   j                         D cg c]  }|j	                          }}| j                  j                  j                  ||dt        j                  |dd      | j                  j                         t        j                  |dd      	      }	| j                  j                  |	| j                  j                  
      }
|
j                  ddt!        |       d      }t#        d||
j                  dg       |
j                  dg       |
j                  dg       |
j                  dg       |d|
      S c c}w c c}w )ziAnalyze KPI bottlenecks.

        Returns:
            Analysis result with bottleneck insights.
        nameKGIachievement_rater   z.1fFr0   r1   )kgi_namerN   r6   r5   bottleneck_datar7   r   u0   ボトルネック分析を完了しました。u   件の課題を特定。
bottleneckroot_causespriority_order
quick_winsstrategic_initiatives)rR   rS   rT   rU   detected_bottlenecksr>   )r,   get_kgi_summaryrG   find_bottlenecksr   r?   r-   BOTTLENECK_ANALYSISrA   rC   rD   r+   rB   r*   rE   rF   lenr   )r   kgi_summaryrO   rN   bottlenecksbrP   rH   r6   r8   rI   r   s               r   analyze_bottleneckszAIAnalyzer.analyze_bottlenecksX   s    ''779??651&??+=qAFQ ''88:0;<1199;<< 261B1B1Z1Z1\]AAIIK]] 1188 05!ZZ(8uUVW99,,. JJUSTU 9 
 ;;,,,,44 - 

 ,,y,\]`al]m\n  oG  +H  I&'||M2>"*,,/?"D&ll<<)16Mr)R(7 "
 	
- = ^s   !GG	c                   | j                   j                         }| j                   j                         D cg c]  }|j                          }}| j                   j	                         }| j                   j                         }|dd D cg c]  }|j                          }}| j                  j                  j                  |t        j                  |dd      t        j                  |dd      t        j                  |dd      t        j                  |dd            }	| j                  j                  |	| j                  j                        }
|
j                  dd	      }|
j                  d
d      }t        |      dkD  r| d|dd  dn| d| }t!        d||||
j                  dg       |
j                  dg       |
j                  dg       |
j                  dg       dd|
      S c c}w c c}w )zGenerate executive summary.

        Args:
            period: Reporting period.

        Returns:
            Analysis result with executive summary.
        N   Fr0   r1   )r4   r[   r6   category_summaryrP   r7   headlineu   KPI分析レポートperformance_overview d   z: z...executive_summaryr<   key_metricsissues_and_actionsnext_month_focus)rb   rc   r<   rg   rh   ri   g?)r   r   r   r   r   )r,   rW   r?   r   get_category_summaryrX   r-   EXECUTIVE_SUMMARYrA   rC   rD   r*   rE   rF   rG   rZ   r   )r   r4   r[   rH   r6   ra   r\   r]   rP   r8   rI   rb   overviewr   s                 r   generate_executive_summaryz%AIAnalyzer.generate_executive_summary   s    ''779151B1B1Z1Z1\]AAIIK]],,AAC''88:0;BQ@1199;@@ //66

;U1M!ZZ(8uUVW!ZZ(8uUVW JJUSTU 7 
 ;;,,,,44 - 

 <<
,CD<< 6;8;H8KXJb$3 04T\S]]_`h_iQj-$(0&ll<<'||M2>&.ll3G&L$,LL1CR$H !
 	
1 ^ As   G2G7c                f    | j                  |      | j                         | j                  |      dS )zRun all analyses.

        Args:
            period: Analysis period.

        Returns:
            Dictionary mapping analysis type to result.
        )r;   r\   rf   )rJ   r^   rm   )r   r4   s     r   get_full_analysiszAIAnalyzer.get_full_analysis   s6     ))&1335!%!@!@!H
 	
r   N)r*   r   r+   r
   )r4   r   r   r   )r   r   )r4   r   r   zdict[str, AnalysisResult])	r    r!   r"   r#   r.   rJ   r^   rm   ro   r&   r   r   r(   r(   #   s!    4
%$
L.
`0
d
r   r(   )r#   
__future__r   rC   dataclassesr   r   typingr   r*   r   r-   r	   src.kpi.treer
   src.kpi.analyzerr   r   r   r   r(   r&   r   r   <module>ru      sH     "  (    "   I I 
 
 
&d
 d
r   