
    Xjp                     `    d dl mZ d dlmZ g dZg dZe G d d             Zdedee   fd	Zy
)    )	dataclass)Decimal)Housing	Utilities	GroceriesTransportation
HealthcarezDebt Payments)DiningEntertainmentShoppingSubscriptionszPersonal Carec                   ,    e Zd ZU eed<   eed<   eed<   y)BudgetRecommendationcategory_namesuggested_amountbucketN)__name__
__module____qualname__str__annotations__r        D/var/www/html/financials/app/services/insights/budget_recommender.pyr   r      s    Kr   r   monthly_incomereturnc                    | t        d      z  t        t              z  j                  t        d            }| t        d      z  t        t              z  j                  t        d            }| t        d      z  j                  t        d            }g }t        D ]  }|j                  t        ||d               t        D ]  }|j                  t        ||d               |j                  t        d|d             |S )	u   Return 50/30/20 budget recommendations for the given monthly income.

    Defines the BudgetRecommendation interface contract — Story 10.7's
    from_history() must return the same type.
    z0.50z0.01z0.30z0.20needswantsSavingssavings)r   lenNEEDS_CATEGORIESquantizeWANTS_CATEGORIESappendr   )r   needs_per_catwants_per_catsavings_totalrecsnames         r   fifty_thirty_twentyr,      s     
'&/	)C0@,A	A	'&/	" 
 
'&/	)C0@,A	A	'&/	"  $gfo5??PM')D  H(}gFGH  H(}gFGHKK$YyIJKr   N)	dataclassesr   decimalr   r#   r%   r   listr,   r   r   r   <module>r0      sM    !   
    D9M4N r   