o
    65iv                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 eG dd dZ
eG dd	 d	ZeG d
d dZeG dd dZeG dd dZeG dd dZeG dd dZdS )u   데이터 모델 정의    )	dataclassfield)Decimal)date)Optionalc                   @   sb   e Zd ZU dZeed< edZeed< edZeed< e	defddZ
e	dee fd	d
ZdS )MonthlyValueu   월별 예산/실적 값monthr   budgetactualreturnc                 C      | j | j S )u   차이 (실적 - 예산))r
   r	   self r   W/var/www/tkim.planitai.co.jp/gemegg/20251207-make-pdf-report/project/src/data_models.pyvariance      zMonthlyValue.variancec                 C      | j dkrdS | j| j  d S )u   달성률 (%)r   Nd   )r	   r
   r   r   r   r   achievement_rate      
zMonthlyValue.achievement_rateN)__name__
__module____qualname____doc__str__annotations__r   r	   r
   propertyr   r   r   r   r   r   r   r      s   
 r   c                   @   s   e Zd ZU dZeed< dZeed< dZe	ed< e
edZee ed< ed	efd
dZed	efddZed	efddZed	ee fddZdS )PLItemu   손익계산서 항목namer   levelFis_totaldefault_factorymonthly_valuesr   c                 C      t dd | jD tdS )u   예산 합계c                 s       | ]}|j V  qd S N)r	   .0vr   r   r   	<genexpr>'       z&PLItem.total_budget.<locals>.<genexpr>r   sumr$   r   r   r   r   r   total_budget$      zPLItem.total_budgetc                 C   r%   )u   실적 합계c                 s   r&   r'   )r
   r(   r   r   r   r+   ,   r,   z&PLItem.total_actual.<locals>.<genexpr>r   r-   r   r   r   r   total_actual)   r0   zPLItem.total_actualc                 C   r   )u   차이 합계)r1   r/   r   r   r   r   total_variance.   r   zPLItem.total_variancec                 C   r   )u   전체 달성률r   Nr   )r/   r1   r   r   r   r   total_achievement_rate3   r   zPLItem.total_achievement_rateN)r   r   r   r   r   r   r    intr!   boolr   listr$   r   r   r   r/   r1   r2   r   r3   r   r   r   r   r      s   
 r   c                   @   s   e Zd ZU dZeed< eed< dZeed< dZe	e ed< dZ
e	e ed< dZe	e ed	< d
Zeed< edefddZede	e fddZdS )KPICardu
   KPI 카드titlevalueu   円unitNprevious_valuetarget_valuetrendz#2563ebcolorr   c                 C   s*   | j dkr| jddS | jd| j  S )u   포맷된 값%z.1fz,.0f)r:   r9   r   r   r   r   formatted_valueF   s   
zKPICard.formatted_valuec                 C   s.   | j du s
| j dkrdS | j| j  | j  d S )u   전기 대비 변화율Nr   r   )r;   r9   r   r   r   r   change_rateM   s   zKPICard.change_rate)r   r   r   r   r   r   r   r:   r;   r   r<   r=   r>   r   r@   rA   r   r   r   r   r7   ;   s   
 r7   c                   @   sL   e Zd ZU dZee ed< eedZee	 ed< dZ
eed< dZeed< d	S )
	ChartDatau   차트 데이터labelsr"   datasets r8   bar
chart_typeN)r   r   r   r   r6   r   r   r   rD   dictr8   rG   r   r   r   r   rB   U   s   
 rB   c                   @   s8   e Zd ZU dZeed< eed< eedZee	 ed< dS )CashFlowItemu   캐시플로우 항목r   categoryr"   r$   N)
r   r   r   r   r   r   r   r6   r$   r   r   r   r   r   rI   ^   s
   
 rI   c                   @   sJ   e Zd ZU dZeed< eed< dZeed< dZe	e ed< dZ
eed	< dS )
FinancialRatiou   재무 비율r   r9   r?   r:   N	benchmarkrE   description)r   r   r   r   r   r   r   r:   rL   r   rM   r   r   r   r   rK   f   s   
 rK   c                   @   s  e Zd ZU dZeed< eed< eed< eed< eejdZ	eed< ee
dZe
e ed< ee
dZe
e ed	< ee
dZe
e ed
< ee
dZe
e ed< ee
dZe
e ed< eedZeeef ed< ee
dZe
e ed< dedee fddZdedee fddZdS )FinancialReportu!   전체 재무 리포트 데이터company_namefiscal_yearperiodtarget_monthr"   generated_atannual_kpismonthly_kpispl_itemscashflow_itemsfinancial_ratioschartsmonth_labelsr   r   c                 C   s"   | j D ]}|j|kr|  S qdS )u   이름으로 P/L 항목 조회N)rV   r   )r   r   itemr   r   r   get_pl_item   s
   

zFinancialReport.get_pl_itemr8   c                 C   s(   | j | j D ]}|j|kr|  S qdS )u   타이틀로 KPI 조회N)rT   rU   r8   )r   r8   Zkpir   r   r   get_kpi   s
   
zFinancialReport.get_kpiN)r   r   r   r   r   r   r   r   todayrS   r6   rT   r7   rU   rV   r   rW   rI   rX   rK   rH   rY   rB   rZ   r   r\   r]   r   r   r   r   rN   p   s    
 rN   N)r   dataclassesr   r   decimalr   datetimer   typingr   r   r   r7   rB   rI   rK   rN   r   r   r   r   <module>   s&    	