
    YajI                        d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZmZ d d	lmZ d d
lmZ d Z ddZ!ddZ"ddZ#ddZ$ddZ%dS )    )annotations)confirm_create_budget_account)confirm_create_categoryupdate_category)confirm_transaction_candidatelist_transaction_candidatespreview_transaction_candidate)seed_transaction_candidates_from_csv_text%seed_transaction_candidates_from_rows)get_budget_status_by_categoryget_income_status)confirm_budget_plan_item)convert_unclean_rangeignore_seed_candidatelist_seed_candidatesreopen_seed_candidate seed_budget_candidates_from_rows)confirm_budget_transactionlist_budget_transactionsupdate_budget_transaction)connect_memory)apply_migrationsc                 @    t                      } t          |            | S )N)r   r   )conns    *tests/unit/test_budget_phase14_workview.pydbr      s     DTK    returnNonec                    t                      } t          | dddd          d         }|                     d                                          d         }d}t	          | |d	
          }|d         dk    sJ |                     d                                          d         |k    sJ t          |           d         }|d         sJ t          | |d         |dd          }|d         d         |k    sJ d S )NBudget KontocashCHFnameaccount_typecurrency	entity_id(SELECT COUNT(*) FROM budget_transactionsr   zFDatum;Filiale;Artikel;Umsatz
13.05.2026;M Windisch;Test Einkauf;12.30
zmigros_test.csvsource_file_labelcandidate_count   proposed_category_nametransaction_candidate_idexpense)
account_idtransaction_typepayloadr1   )r   r   executefetchoner
   r   r	   )r   accountbeforecsv_textstats	candidatepreviews          r   Otest_phase14_transaction_candidate_schema_and_csv_dry_run_no_productive_bookingr<      s0   44D+D>[aot2u2uvv  xC  DG\\DEENNPPQRSFYH5dHXijjjE"#q((((<<BCCLLNNqQU[[[[[+D11!4I-....+D)<V2Who  FO  ZP  ZP  Q  QG9l+w666666r   c                    t                      } t          | dddd          d         }t          | ddd          d         }t          | d	d
ddgd           t	          |           d         }t          | |d         ||dd          }|d         dk    sJ |                     d                                          d         dk    sJ |                     d                                          d         dk    sJ d S )Nr!   r"   r#   r$   r(   Essenr0   r%   category_typez
13.05.2026zMigros Einkaufz12.30)DatumArtikelUmsatzz
migros.csvr*   r   r/   )r1   category_idr2   status	confirmedr)   r-   zOSELECT COUNT(*) FROM audit_log WHERE entity_type='budget_transaction_candidate')r   r   r   r   r   r   r4   r5   )r   r6   catr:   results        r   Gtest_phase14_confirm_transaction_candidate_writes_transaction_and_auditrI   "   sN   44D+D>[aot2u2uvv  xC  DG
!$9(U(U
V
VWb
cC)$<Tdpw1x1x0y  NZ  [  [  [  [+D11!4I*4;U1Vgn  @C  Yb  Yc  Yc  d  dF({****<<BCCLLNNqQUVVVVV<<ijjssuuvwx|}}}}}}}r   c                    t                      } t          | dddd          d         }t          | ddd          d         t          | d	d
d          d         t          | dddddd           t          | dddddd           t	          | |dddddd           t	          | |d
ddddd           t          | d          }t          fd|D                       }t          fd|D                       }|d         dk    sJ |d         dk    sJ |d          d!v sJ |d         dk    sJ |d         dk    sJ |d          d"v sJ t          | d          }|d#         sJ d S )$Nr!   r"   r#   r$   r(   Haushaltr0   r?   Lohnincomez2026-01zHaushalt Planz100.00monthlymanual)
plan_monthrD   r%   monthly_amount_chfcadencesource_typez	Lohn Planz1200.00annual)rP   rD   r%   annual_amount_chfrR   rS   
2026-01-10zHaushalt Istz95.00r1   r2   transaction_datedescriptionamount_originalcurrency_originalrD   zLohn Ist2026)yearc              3  4   K   | ]}|d          k    |V  dS rD   N ).0rexpense_cats     r   	<genexpr>zktest_phase14_budget_status_month_year_forecast_and_traffic_lights_for_expense_and_income.<locals>.<genexpr>8   s2      FFa&6+&E&E1&E&E&E&EFFr   c              3  4   K   | ]}|d          k    |V  dS r_   r`   )ra   rb   
income_cats     r   rd   zktest_phase14_budget_status_month_year_forecast_and_traffic_lights_for_expense_and_income.<locals>.<genexpr>9   s2      DDQ}%5%C%C!%C%C%C%CDDr   budget_monthbudget_yearrE   >   RotGelbKritisch   Grün>   ri   rj   rl   
categories)r   r   r   r   r   r   nextr   )r   r6   rowsr0   rM   summaryrc   rf   s         @@r   Xtest_phase14_budget_status_month_year_forecast_and_traffic_lights_for_expense_and_incomerq   .   s   44D+D>[aot2u2uvv  xC  DG)$V_0`0`aabmnK(QY/Z/Z[[\ghJT)Kap  IQ  ^g  x@  $A  $A  B  B  BT)J`k  CL  Ya  rz  ${  ${  |  |  |tGQZp|  N\  qx  OT  ep  &q  &q  r  r  rtGQYo{  MW  lt  KP  ak  &l  &l  m  m  m(F;;;DFFFFdFFFFFGDDDDTDDDDDF>"h....=!Y....8 DDDDD.!X----- I----(777776222G<      r   c                 (   t                      } t          | dddd          d         }t          | ddd          d         }t          | d	dd          d         }t          | |dd
ddd|d          d         }t	          | |          sJ t          | ||ddgdd          }|d         dk    sJ t	          | |          rJ t	          | |d          sJ |                     d                                          d         dk    sJ 	 t          | |ddi           t          d          # t          $ rY}dt          |                                          v s%dt          |                                          v sJ Y d }~d S Y d }~d S d }~ww xY w)Nr!   r"   r#   r$   r(   Altr0   r?   NeurV   z
Merchant Az20.00rW   )rD   z
Merchant BReviewtest)rD   rY   	tag_nameschange_noterE   updatedMerchant)rD   merchantzYSELECT COUNT(*) FROM audit_log WHERE entity_type='budget_transaction' AND action='update'r   r-   rZ   z99.00z!amount overwrite must be rejected
adjustmentreversal)r   r   r   r   r   r   r4   r5   AssertionError	Exceptionstrlower)r   r6   cat1cat2txrH   excs          r   Wtest_phase14_row_click_backing_filters_and_transaction_update_audit_no_amount_overwriter   D   sR   44D+D>[aot2u2uvv  xC  DG"4%))T)TUUVabD"4%))T)TUUVabD	#DV_  vB  S_  t{  RW  hl  +m  +m  
n  
n  oz  
{B#Dd;;;;;;&tRVbrzq{  MS  2T  2T  U  UF(y(((('$??????#DdZPPPPPP<<stt}}  AB  C  GH  H  H  H  HB!$->,HIII @AAA  R R Rs3xx~~////:SAQAQ3Q3Q3QQ//////3Q3Q3Q3Q3Q3QRs   D. .
F8AFFc            	     
   t                      } t          | ddd          d         }t          | |dddd          }|d	         d
k    sJ |                     d|f                                          d         dk    sJ dg dg dgi}t          | |d           t          d t          |           D                       }t          | |d         dddd          }t          | |d         ddddd          }|d	         dk    sJ |d         dk    sJ t          | |d                   }|d	         dk    sJ t          | |d         d            |                     d!                                          d         d"k    sJ d S )#NOriginalr0   r?   r(   	Umbenanntneutral   )r%   r@   
sort_orderrE   ry   zESELECT name, category_type FROM budget_categories WHERE category_id=?r   r\   )	KategoriePositionJanJahr) Unklarr   r   zunclean.xlsxr*   c              3  2   K   | ]}|d          dk    |V  dS )candidate_typeunclean_rangeNr`   )ra   cs     r   rd   zjtest_phase14_category_update_and_unclean_conversion_to_income_and_transaction_candidate.<locals>.<genexpr>`   s3      ccA>N<OSb<b<b1<b<b<b<bccr   seed_candidate_idrM   zSonstige Einnahmenz10.00)proposed_nameproposed_amount_texttransaction_candidateMigrosz
2026-01-01)rY   amountrX   createdr,   r-   pendingdonezHSELECT COUNT(*) FROM audit_log WHERE entity_type='budget_seed_candidate'   )r   r   r   r4   r5   r   rn   r   r   r   r   )r   rG   rH   workbookuncleanrM   txcandreopeneds           r   Wtest_phase14_category_update_and_unclean_conversion_to_income_and_transaction_candidater   X   s   44D
!$i(X(X
Y
YZe
fCT3yhi(j(jkkF(y((((<<_beaghhqqsstuv  {F  F  F  F  FAAACYCYCYZ[H$T8~VVVVcc2488cccccG"41D)Excw  RY  RZ  RZ  [  [F"41D)EG^px  EL  bn  ao  ao  p  pF(y((((#$))))$T73F+GHHHH****$(; <fEEE<<bccllnnopquvvvvvvvr   N)r   r   )&
__future__r   'jarvis_finance.services.budget_accountsr   )jarvis_finance.services.budget_categoriesr   r   &jarvis_finance.services.budget_importsr   r   r	   r
   r   'jarvis_finance.services.budget_overviewr   r   $jarvis_finance.services.budget_plansr   *jarvis_finance.services.budget_seed_reviewr   r   r   r   r   +jarvis_finance.services.budget_transactionsr   r   r   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r<   rI   rq   r   r   r`   r   r   <module>r      s   " " " " " " Q Q Q Q Q Q ^ ^ ^ ^ ^ ^ ^ ^ _  _  _  _  _  _  _  _  _  _  _  _  _  _ d d d d d d d d I I I I I I s  s  s  s  s  s  s  s  s  s  s  s  s  s H  H  H  H  H  H  H  H  H  H : : : : : : > > > > > >  7 7 7 7	~ 	~ 	~ 	~! ! ! !,B B B B(w w w w w wr   