+
    &•j»(  ã                  óx  € ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHt ^ RIHtHt ^ RIHtHtH t  ^ RI!H"t"H#t#H$t$H%t% ]	! ]
! ]4      .R7      t&]! ]PN                  ]PP                  4      t)R R lt*R R lt+R R lt,R R lt-]&P]                  R4      R/R R ll4       t/R R lt0]&Pc                  R]Pd                  R7      ]
! ])4      3R  R! ll4       t3]&Pi                  R"4      ]
! ])4      3R# R$ ll4       t5]&Pm                  R"4      ]
! ])4      3R% R& ll4       t7]&Pc                  R']Pd                  R7      ]
! ])4      3R( R) ll4       t8]&Pi                  R*4      ]
! ])4      3R+ R, ll4       t9]&Pm                  R*4      ]
! ])4      3R- R. ll4       t:R# )0é    )Úannotations)Údate)ÚDecimal)Ú	Annotated)Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)Úfunc)ÚIntegrityError)ÚSession)Úget_current_userÚrequire_roles)Úget_db)ÚRole)ÚFinancialExpenditureHeadÚReportBudgetAllocation)ÚEMDÚPaymentTrackingÚPurchaseOrder)ÚBudgetHeadCreateÚBudgetHeadUpdateÚExpenditureHeadCreateÚExpenditureHeadUpdate)Údependenciesc               ó   € V ^8„  d   QhRR/# )é   Úreturnr   © )Úformats   "Ú:/var/www/html/proc/backend/app/api/financial_management.pyÚ__annotate__r"      s   € ÷ $ñ $�Wñ $ó    c                ó>   € \        \        T ;'       g    ^ 4      4      # )r   )r   Ústr)Úvalues   &r!   Ú_moneyr'      s   € Ü”3�u—z�z “?Ó#Ð#r#   c               ó   € V ^8„  d   QhRR/# )r   r   r%   r   )r    s   "r!   r"   r"   !   s   € ÷ ,ñ , ñ ,r#   c                 óÀ   € \         P                  ! 4       p V P                  ^8¼  d   V P                  MV P                  ^,
          pV R\	        V^,           4      RR  2# )é   Ú-Néþÿÿÿ)r   ÚtodayÚmonthÚyearr%   )r-   Ústarts     r!   Ú_current_financial_yearr1   !   sL   € Ü�JŠJ‹L€EØŸ+™+¨Ô*ˆE�JŠJ°·
±
¸Qµ€EØˆW�A”c˜% !�)“n R SÐ)Ð*Ð+Ð+r#   c               ó    € V ^8„  d   QhRRRR/# )r   Úfinancial_yearr%   r   ztuple[date, date]r   )r    s   "r!   r"   r"   '   s   € ÷ ?ñ ? ð ?Ð):ñ ?r#   c                ó¸   €  \        V R ,          4      p\	        T^^4      \	        T^,           ^^4      3#   \        \        3 d   p\        RRR7      ThRp?ii ; i):Nr*   Ni�  z'Financial year must use YYYY-YY format.©Ústatus_codeÚdetailN)ÚintÚ	TypeErrorÚ
ValueErrorr	   r   )r3   Ú
start_yearÚexcs   &  r!   Ú_year_boundsr=   '   sd   € ðhÜ˜¨Õ+Ó,ˆ
ô �
˜A˜qÓ!¤4¨
°Q­¸¸2Ó#>Ð>Ð>øô ”zÐ"ô hÜ¨Ð4]Ô^ÐdgÐgûðhús   ‚5 µAÁAÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   Údbr   Ú
allocationr   r   Údictr   )r    s   "r!   r"   r"   /   s"   € ÷ ñ ˜7ð Ð0Fð È4ñ r#   c                óN  € \        VP                  4      w  r#\        P                  ! \        P                  ! \
        P                  R 4      4      P                  VP                  P                  4       VP                  P                  4       .4      p\        P                  ! \
        P                  \        P                  ! \
        P                  4      4      p\        V P                  \        P                  ! \        P                  ! \        P                  ! \
        P                   \
        P"                  ^ 4      4      ^ 4      4      P%                  WEV8¬  WS8*  4      P'                  4       4      p\        V P                  \        P                  ! \        P                  ! \(        P*                  4      ^ 4      4      P-                  \
        \
        P.                  \(        P0                  8H  4      P%                  WEV8¬  WS8*  4      P'                  4       4      p\        VP2                  4      pRVP.                  RVP                  RVP4                  RVP                  RVP                  RTRTRTR	W‡,
          R
\7        V'       d   Wx,          ^d,          M^ 4      RVP8                  /# )Ú Úidr3   Úexpenditure_groupÚ	head_codeÚ	head_nameÚallocation_amountÚcommitted_amountÚpaid_amountÚbalance_amountÚutilization_percentÚremarks)r=   r3   r   ÚlowerÚcoalescer   Úbudget_headÚin_rF   rG   Úpo_dater   Ú
created_atr'   ÚqueryÚsumÚpo_valueÚestimated_costÚfilterÚscalarr   rJ   ÚjoinrD   Úpo_idrH   rE   ÚfloatrM   )	r?   r@   Ú
start_dateÚend_dateÚmatching_headÚ
order_dateÚ	committedÚpaidÚ	allocateds	   &&       r!   Ú_allocation_valuesrd   /   sà  € Ü'¨
×(AÑ(AÓBÑ€JÜ—J’JœtŸ}š}¬]×-FÑ-FÈÓKÓL×PÑPØ	×	Ñ	×	#Ñ	#Ó	% z×';Ñ';×'AÑ'AÓ'CÐDó€Mô —’œ}×4Ñ4´d·i²iÄ×@XÑ@XÓ6YÓZ€JÜØ
�‰”—’œtŸxšx¬¯ª´m×6LÑ6LÌm×NjÑNjÐlmÓ(nÓoÐqrÓsÓtß	‰�¨ZÑ7¸Ñ9OÓ	Pß	‰‹ó€Iô
 Ø
�‰”—’œtŸxšx¬×(CÑ(CÓDÀaÓHÓIß	‰Œmœ]×-Ñ-´×1FÑ1FÑFÓ	Gß	‰�¨ZÑ7¸Ñ9OÓ	Pß	‰‹ó	€Dô �z×3Ñ3Ó4€Iàˆj�m‰mØ˜*×3Ñ3Ø˜Z×9Ñ9Ø�Z×)Ñ)Ø�Z×)Ñ)Ø˜YØ˜IØ�tØ˜)Õ*ØœuÇ dÕ&6¸Ö&<ÐPQÓRØ�:×%Ñ%ðð r#   z	/overviewNc               ó    € V ^8„  d   QhRRRR/# )r   r?   ú#Annotated[Session, Depends(get_db)]r3   z
str | Noner   )r    s   "r!   r"   r"   Q   s   € ÷ @ñ @Ð4ð @Àjñ @r#   c           &     ób  € T;'       g    \        4       pV P                  \        4      P                  \        P                  V8H  \        P
                  P                  R 4      4      P                  \        P                  \        P                  4      P                  4       pV Uu. uF  p\        W4      NK  	  pp. pR. F¦  pV Uu. uF  qDR,          V8X  g   K  VNK  	  ppVP                  RVR\        R V 4       \        R4      4      R\        R V 4       \        R4      4      R\        R V 4       \        R4      4      R	\        R
 V 4       \        R4      4      /4       K¨  	  V P                  \        \        4      P!                  \        \        P"                  \        P$                  8H  4      P                  \        P
                  P                  R 4      4      P                  \        P                  \        P                  4      P                  4       p	V P                  \&        \(        4      P!                  \(        \(        P"                  \&        P*                  8H  4      P                  \,        P.                  ! \&        P0                  \(        P2                  4      P5                  4       4      P7                  R4      P                  4       p
V P                  \8        4      P                  \,        P.                  ! \8        P:                  \8        P<                  \8        P>                  4      P5                  4       4      P7                  R4      P                  4       pRTRTRTRR\        R V 4       \        R4      4      R\        R V 4       \        R4      4      R\        R V 4       \        R4      4      R	\        R V 4       \        R4      4      /RV	 UUu. uFg  w  rÍRVP"                  RVP$                  RVP@                  RVP                  RVP                  RVP@                  RVP                  RVPB                  /NKi  	  uppRV
 UUu. uFµ  w  rïRVP"                  RVPD                  RVPF                  RVPH                  R VPJ                  R!VP0                  R"VPL                  RVPN                  R#\Q        \S        VPL                  4      \S        VPN                  4      ,
          \        R4      4      R$VPT                  /
NK·  	  uppR%V Uu. uFq  pRVP"                  R&VPV                  R'VPX                  R(VPZ                  R)VP\                  R*VP<                  R+VP:                  R,VP^                  R-VP`                  /	NKs  	  up/# u upi u upi u uppi u uppi u upi )/TrE   rH   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5i©rH   Nr   ©Ú.0Úrows   & r!   Ú	<genexpr>Úoverview.<locals>.<genexpr>_   s   é € Ð%UÉ*À3Ð*=×&>Ò&>Ë*ùó   ‚Ú0rI   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5i©rI   Nr   rj   s   & r!   rm   rn   `   s   é € Ð$SÉ
ÀÐ);×%<Ò%<Ë
ùro   rJ   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5i©rJ   Nr   rj   s   & r!   rm   rn   a   s   é € ÐI¹j°s M× 2Ò 2»jùro   rK   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5i©rK   Nr   rj   s   & r!   rm   rn   b   s   é € Ð"OÁJ¸SÐ'7×#8Ò#8ÃJùro   iè  r3   Úbudget_headsÚgroup_summaryÚtotalsc              3  ó2   "  € T F  qR ,          x € K  	  R# 5iri   r   rj   s   & r!   rm   rn   x   s   é € Ð%WÉ,À3Ð*=×&>Ò&>Ë,ùro   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5irr   r   rj   s   & r!   rm   rn   y   s   é € Ð$UÉÀÐ);×%<Ò%<Ëùro   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5irt   r   rj   s   & r!   rm   rn   z   s   é € ÐK¹l°s M× 2Ò 2»lùro   c              3  ó2   "  € T F  qR ,          x € K  	  R# 5irv   r   rj   s   & r!   rm   rn   {   s   é € Ð"QÁL¸SÐ'7×#8Ò#8ÃLùro   Úexpenditure_headsrD   Úbudget_head_idÚbudget_head_codeÚbudget_head_namerF   rG   rM   Úvendor_paymentsÚvendor_nameÚpo_norP   Ú
invoice_noÚinvoice_dateÚinvoice_amountÚoutstanding_amountÚpayment_statusÚemd_refundsÚemd_unique_idÚtender_numberÚbidder_nameÚamountÚexpiry_dateÚreturned_dateÚrefund_statusÚreturn_details)ÚAdministrativeÚ	Programme)1r1   rT   r   rX   r3   Ú	is_activeÚis_Úorder_byrE   rG   Úallrd   ÚappendrU   r   r   rZ   rD   r   r   r   r[   r   rO   r†   rR   ÚdescÚlimitr   r�   r�   rS   rF   rM   rƒ   r„   rP   r…   r‡   rJ   Úmaxr'   r‰   r‹   rŒ   r�   rŽ   r‘   r’   )r?   r3   Úselected_yearÚallocationsrl   rw   rx   ÚgroupÚ
group_rowsr~   Úpayment_rowsÚemd_rowsÚheadÚbudgetÚpaymentÚorderÚemds   &&               r!   Úoverviewr¨   P   s½  € à"×?Ð?Ô&=Ó&?€Mà
�‰Ô'Ó(ß	‰Ô&×5Ñ5¸ÑFÔH^×HhÑHh×HlÑHlÐmqÓHrÓ	sß	‰Ô(×:Ñ:Ô<R×<\Ñ<\Ó	]ß	‰‹ð	 ñ <GÓG¹;°CÔ& rÖ/¹;€LÐGØ€MÛ0ˆÙ%1ÓW¡\˜cÐ9LÕ5MÐQVÑ5V—c�c¡\ˆ
ÐWØ×ÑØ Ø¤Ñ%UÉ*Ó%UÔW^Ð_bÓWcÓ!dØ¤Ñ$SÉ
Ó$SÔU\Ð]`ÓUaÓ bØœ3ÑI¹jÓIÌ7ÐSVË<ÓXØœcÑ"OÁJÓ"OÔQXÐY\ÓQ]Ó^ð
ö 	ñ 1ð 	�‰Ô)Ô+AÓBß	‰Ô$Ô&<×&?Ñ&?ÔC[×CjÑCjÑ&jÓ	kß	‰Ô(×2Ñ2×6Ñ6°tÓ<Ó	=ß	‰Ô(×:Ñ:Ô<T×<^Ñ<^Ó	_ß	‰‹ð ð 	�‰”¤-Ó0ß	‰Œmœ]×-Ñ-´×1FÑ1FÑFÓ	Gß	‰”$—-’-¤× <Ñ <¼m×>SÑ>SÓT×YÑYÓ[Ó	\ß	‰ˆt‹—S‘S“Uð	 ð �x‰xœ‹}×%Ñ%¤d§m¢m´C×4EÑ4EÄsÇÁÔX[×XfÑXfÓ&g×&lÑ&lÓ&nÓo×uÑuÐvzÓ{×Ñó  B€Hà˜-Ø˜Ø˜ØØ¤Ñ%WÉ,Ó%WÔY`ÐadÓYeÓ!fØ¤Ñ$UÉÓ$UÔW^Ð_bÓWcÓ dØœ3ÑK¹lÓKÌWÐUXË\ÓZØœcÑ"QÁLÓ"QÔSZÐ[^ÓS_Ó`ð	
ð 	ñ
 0ô1ñ
 0‰lˆdð	 �$—'‘'Ð+¨T×-@Ñ-@Ø × 0Ñ 0Ð2DÀf×FVÑFVØ ×!9Ñ!9¸;ÈÏÉØ˜Ÿ™¨°D·L±Ló	
ñ
 0ò1ð 	ñ !-ô.ñ !-‰nˆgð �'—*‘*˜m¨U×->Ñ->ÀÈÏÉØ˜5×,Ñ,¨l¸G×<NÑ<NØ˜G×0Ñ0Ð2BÀG×DZÑDZØ˜7×.Ñ.Ø ¤#¤f¨W×-CÑ-CÓ&DÄvÈg×NaÑNaÓGbÕ&bÔdkÐloÓdpÓ"qØ˜g×4Ñ4ó
ñ !-ò.ð 	ñ
 óñ
 ˆcð	 �#—&‘&˜/¨3×+<Ñ+<¸oÈs×O`ÑO`Ø˜3Ÿ?™?¨H°c·j±jÀ-ÐQT×Q`ÑQ`Ø˜S×.Ñ.°À×ARÑARØ˜c×0Ñ0ó	
ñ
 ñð1ð ùò5 Hùò XùóB1ùó.ùòs'   Â&VÃVÃVÏ"A-V ÑB;V&ÔA7V,c               ó$   € V ^8„  d   QhRRRRRR/# )r   r?   r   Úmessager%   r   ÚNoner   )r    s   "r!   r"   r"   ”   s&   € ÷ [ñ [˜Gð [¨cð [°dñ [r#   c                ó¦   €  V P                  4        R#   \         d2   pT P                  4        \        \        P
                  TR 7      ThRp?ii ; i)r5   N)Úcommitr   Úrollbackr	   r
   ÚHTTP_409_CONFLICT)r?   rª   r<   s   && r!   Ú_commit_or_conflictr°   ”   sB   € ð[Ø
�	‰	ŽøÜô [Ø
�‰ŒÜ¬×(@Ñ(@ÈÔQÐWZÐZûð[ús   ‚ ”AŸ,AÁAz/budget-heads)r6   c               ó    € V ^8„  d   QhRRRR/# )r   Úpayloadr   r?   rf   r   )r    s   "r!   r"   r"   �   s   € ÷ 'ñ 'Ð 0ð 'Ð6Yñ 'r#   c                ó¦   € \        R/ V P                  4       B pVP                  V4       \        VR 4       VP	                  V4       \        W4      # )zbA budget head with this code already exists for the selected financial year and expenditure group.r   )r   Ú
model_dumpÚaddr°   Úrefreshrd   )r²   r?   Ú_rl   s   &&& r!   Úcreate_budget_headr¸   œ   sJ   € ä
 Ñ
8 7×#5Ñ#5Ó#7Ñ
8€CØ‡F�Fˆ3„KÜ˜ð  Aô  BØ‡J�Jˆs„OÜ˜bÓ&Ð&r#   z/budget-heads/{head_id}c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úhead_idr8   r²   r   r?   rf   r   )r    s   "r!   r"   r"   ¦   s&   € ÷ 'ñ 'Øð'àð'ð 	,ñ'r#   c                ó6  € VP                  \        V 4      pV'       d   VP                  '       g   \        R RR7      hVP	                  RR7      P                  4        F  w  rV\        WEV4       K  	  \        VR4       VP                  V4       \        W$4      # )é”  úBudget head not found.r5   T©Úexclude_unsetz,A budget head with this code already exists.)
Úgetr   r•   r	   r´   ÚitemsÚsetattrr°   r¶   rd   )rº   r²   r?   r·   rl   Úkeyr&   s   &&&&   r!   Úupdate_budget_headrÄ   ¥   s}   € ð �&‰&Ô'¨Ó
1€Cß�c—m—m�mÜ¨Ð4LÔMÐMØ×(Ñ(°tÐ(Ó<×BÑBÖD‰
ˆÜ�˜%Ö ñ Eä˜ÐJÔKØ‡J�Jˆs„OÜ˜bÓ&Ð&r#   c               ó    € V ^8„  d   QhRRRR/# ©r   rº   r8   r?   rf   r   )r    s   "r!   r"   r"   ·   s   € ÷ 3ñ 3 ð 3Ð)Lñ 3r#   c                óŽ   € VP                  \        V 4      pV'       g   \        R RR7      hRVn        VP	                  4        RR/# )r¼   r½   r5   Frª   zBudget head deactivated.)rÀ   r   r	   r•   r­   ©rº   r?   r·   rl   s   &&& r!   Údelete_budget_headrÉ   ¶   s@   € à
�&‰&Ô'¨Ó
1€CßÜ¨Ð4LÔMÐMØ€C„MØ‡I�I„KØÐ1Ð2Ð2r#   z/expenditure-headsc               ó    € V ^8„  d   QhRRRR/# )r   r²   r   r?   rf   r   )r    s   "r!   r"   r"   Á   s   € ÷ 2ñ 2Ð%:ð 2Ð@cñ 2r#   c                óZ  € VP                  \        V P                  4      pV'       d   VP                  '       g   \	        R RR7      h\        R/ V P                  4       B pVP                  V4       \        VR4       VP                  V4       RVP                  /V P                  4       C# )r¼   r½   r5   úIThis expenditure head code already exists under the selected budget head.rD   r   )rÀ   r   r   r•   r	   r   r´   rµ   r°   r¶   rD   )r²   r?   r·   r¤   rl   s   &&&  r!   Úcreate_expenditure_headrÍ   À   s‰   € à�V‰VÔ*¨G×,BÑ,BÓC€Fß˜×)×)Ð)Ü¨Ð4LÔMÐMÜ
"Ñ
: W×%7Ñ%7Ó%9Ñ
:€CØ‡F�Fˆ3„KÜ˜ÐgÔhØ‡J�Jˆs„OØ�#—&‘&Ð1˜G×.Ñ.Ó0Ð1Ð1r#   z/expenditure-heads/{head_id}c               ó$   € V ^8„  d   QhRRRRRR/# )r   rº   r8   r²   r   r?   rf   r   )r    s   "r!   r"   r"   Í   s&   € ÷ 4ñ 4Øð4à"ð4ð 	,ñ4r#   c                ó®  € VP                  \        V 4      pV'       d   VP                  '       g   \        R RR7      hVP	                  RR7      pVP                  R4      pVe>   VP                  \
        V4      pV'       d   VP                  '       g   \        R RR7      hVP                  4        F  w  r‰\        WHV	4       K  	  \        VR4       RR	/# )
r¼   úExpenditure head not found.r5   Tr¾   r   r½   rÌ   rª   zExpenditure head updated.)	rÀ   r   r•   r	   r´   r   rÁ   rÂ   r°   )
rº   r²   r?   r·   rl   Úvaluesr   r¤   rÃ   r&   s
   &&&&      r!   Úupdate_expenditure_headrÒ   Ì   s¶   € ð �&‰&Ô)¨7Ó
3€Cß�c—m—m�mÜ¨Ð4QÔRÐRØ×Ñ¨dÐÓ3€FØ—Z‘ZÐ 0Ó1€NØÒ!Ø—‘Ô.°Ó?ˆß˜V×-×-Ð-Ü¨CÐ8PÔQÐQØ—l‘l–n‰
ˆÜ�˜%Ö ñ %ä˜ÐgÔhØÐ2Ð3Ð3r#   c               ó    € V ^8„  d   QhRRRR/# rÆ   r   )r    s   "r!   r"   r"   ã   s   € ÷ 8ñ 8 Sð 8Ð.Qñ 8r#   c                óŽ   € VP                  \        V 4      pV'       g   \        R RR7      hRVn        VP	                  4        RR/# )r¼   rÐ   r5   Frª   zExpenditure head deactivated.)rÀ   r   r	   r•   r­   rÈ   s   &&& r!   Údelete_expenditure_headrÕ   â   s@   € à
�&‰&Ô)¨7Ó
3€CßÜ¨Ð4QÔRÐRØ€C„MØ‡I�I„KØÐ6Ð7Ð7r#   )N);Ú
__future__r   Údatetimer   Údecimalr   Útypingr   Úfastapir   r   r	   r
   Ú
sqlalchemyr   Úsqlalchemy.excr   Úsqlalchemy.ormr   Úapp.api.depsr   r   Úapp.db.sessionr   Úapp.models.enumsr   Úapp.models.master_datar   r   Úapp.models.procurementr   r   r   Ú app.schemas.financial_managementr   r   r   r   ÚrouterÚfinanceÚprocurement_officerÚfinancial_writerr'   r1   r=   rd   rÀ   r¨   r°   ÚpostÚHTTP_201_CREATEDr¸   ÚputrÄ   ÚdeleterÉ   rÍ   rÒ   rÕ   r   r#   r!   Ú<module>rì      sª  ðÝ "å Ý Ý ç =Ó =Ý Ý )Ý "ç 8Ý !Ý !ß Sß FÑ F÷ó ñ 
¡Ð)9Ó!:Ð ;Ô	<€Ù  §¡¨t×/GÑ/GÓHÐ õ$õ,õ?õðB ‡�ˆKÓö@ó ð@õF[ð ‡�ˆ_¨&×*AÑ*A€ÓBÙ]dÐeuÓ]vö 'ó Cð'ð ‡�Ð%Ó&ñ
 ÐÓö	'ó 'ð'ð  ‡�Ð(Ó)ÙPWÐXhÓPiö 3ó *ð3ð ‡�Ð!¨v×/FÑ/F€ÓGÙgnÐoó  hAö 2ó Hð2ð ‡�Ð*Ó+ñ
 ÐÓö	4ó ,ð4ð* ‡�Ð-Ó.ÙU\Ð]mÓUnö 8ó /ò8r#   