
    j                       d 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
  G d de
      Z G d d	e      Z ed
d
       G d d             Z ed
d
       G d d             Z ed
d
       G d d             Z	 	 	 	 ddZy)z-Customer-safe weekly reporting source values.    )annotations)	dataclassfield)date)LiteralProtocolc                  &    e Zd ZU dZded<   ded<   y)WeeklyActionOutcomez2Action result fields consumed by weekly reporting.straction_textz4Literal['met', 'not_met', 'pending', 'insufficient']outcomeN__name__
__module____qualname____doc____annotations__     /home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/weekly_operations_domain_reporting.pyr
   r
   	   s    <AAr   r
   c                      e Zd ZdZy)WeeklyReviewInputErrorz:Weekly review input cannot produce a customer-safe source.N)r   r   r   r   r   r   r   r   r      s    Dr   r   T)frozenslotsc                     e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   d
ed<   ded<   dZded<   dZded<   dZded<   edd       Z	edd       Z
edd       Zedd       Zedd       Zedd       Zy)WeeklySummaryzBThe owner-facing weekly operating summary for one customer stream.r   	starts_onends_onztuple[date, ...]eligible_weekdayscheckin_datesfloatcheckin_rate_percenttuple[str, ...]trendskeep_behaviorschange_behaviorsr   next_decisionNzfloat | Noneaverage_weight_kgweight_change_kginsufficient_dataweight_trendc                    | j                   S Nr"   selfs    r   completion_rate_percentz%WeeklySummary.completion_rate_percent%       (((r   c                    | j                   S r-   r.   r/   s    r   rate_percentzWeeklySummary.rate_percent)   r2   r   c                    | j                   S r-   r.   r/   s    r   checkin_ratezWeeklySummary.checkin_rate-   r2   r   c                    | j                   S r-   )r%   r/   s    r   keepzWeeklySummary.keep1   s    """r   c                    | j                   S r-   )r&   r/   s    r   changezWeeklySummary.change5   s    $$$r   c                    | j                   S r-   )r'   r/   s    r   next_actionzWeeklySummary.next_action9   s    !!!r   )returnr!   )r=   r#   r=   r   )r   r   r   r   r   r(   r)   r+   propertyr1   r4   r6   r8   r:   r<   r   r   r   r   r      s    LOM''####%%&*|*%)l)+L#+) ) ) ) ) ) # # % % " "r   r   c                      e Zd ZU dZ edd      Zded<   ded<   d	ed
<   d	ed<   ded<   ded<   ded<   ded<   ded<   d	ed<   ddZddZy)CustomerWeeklyReviewSourcezDTyped customer-safe weekly review source without delivery authority.Fcustomer_weekly_review)initdefaultz!Literal['customer_weekly_review']source_kindr   customer_keyr   period_start
period_end
last_focusobserved_execution_or_change	judgementr<   next_review_criterionnext_review_datec                    dj                  d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                  j                          f      S )N
u   지난 집중: u   실행과 변화: u   이번 판단: u   다음 행동: u   다음 확인: u    · )joinrI   rJ   rK   r<   rL   rM   	isoformatr/   s    r   renderz!CustomerWeeklyReviewSource.renderO   s    yy!$//!23$T%F%F$GH!$..!12!$"2"2!34!$"<"<!=T$BWBWBaBaBcAde
 	
r   c                "    | j                         S r-   )rR   r/   s    r   render_customer_bodyz/CustomerWeeklyReviewSource.render_customer_bodyZ   s    {{}r   Nr>   )	r   r   r   r   r   rE   r   rR   rT   r   r   r   rA   rA   >   s]    N5:46K2  O"%%N	
r   rA   c                  :    e Zd ZU dZded<   ded<   ded<   ded	<   y
)WeeklyReviewRequestzAInputs required to derive one customer-safe weekly review source.r   summaryr   rF   zWeeklyActionOutcome | Nonelatest_actionr   rM   Nr   r   r   r   rV   rV   ^   s    K--r   rV   c                   | j                   }| j                  }| j                  }| j                  }|j	                         rt        |      t        urt        d      |d}|j                  dk7  rdnd}n |j                  }dddd	d
|j                     }|j                  j                  d      rdnd}t        |j	                         |j                  |j                  ||||j                  d|	      S )zIDerive a narrow weekly customer source from a summary and action outcome.z'weekly customer review input is invalidu,   이전 승인 행동이 아직 없습니다.r*   u9   이번 주 기록으로 다음 변화를 확인합니다.uH   이번 주 기록이 더 쌓이면 변화를 확인할 수 있습니다.uE   지난 행동의 확인 기준이 기록에서 확인되었습니다.uF   지난 행동의 확인 기준이 아직 충족되지 않았습니다.u,   지난 행동의 확인 시점 전입니다.u?   지난 행동을 판단할 기록이 충분하지 않습니다.)metnot_metpendinginsufficientu   유지:u%   이번 주 계획을 유지합니다.u=   이번 주에는 한 가지 행동을 바꿔 확인합니다.u   다음 주 기록의 변화)rW   rF   rX   rM   striptyper   r   r+   r   r   r'   
startswithrA   r   r   )requestrW   rF   rX   rM   focusobservedrK   s           r   #build_customer_weekly_review_sourcerd   h   s    ooG''L))M//4(8#9#E$%NOO> ##':: H[ 	 ))Z_E]	

 

!   ++I6 	0L 
 &%
 
r   N)ra   rV   r=   rA   )r   
__future__r   dataclassesr   r   datetimer   typingr   r   r
   
ValueErrorr   r   rA   rV   rd   r   r   r   <module>rj      s    3 " (  $B( BEZ E $d#&" &" $&"R $d#  $> $d#  $( ((r   