
    mj                        d dl mZ d dlmZ d dl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 d dlmZ d dlmZ d d	lmZ d
 Zd ZddZddZddZdS )    )annotations)Decimal)confirm_create_budget_account)confirm_create_category)confirm_migros_receipts_2026list_transaction_candidatespreview_migros_receipts_2026%seed_credit_card_candidates_from_rows seed_migros_candidates_from_rows)get_budget_status_by_categoryget_category_month_detail)confirm_budget_plan_item)connect_memory)apply_migrationsc                 @    t                      } t          |            | S )N)r   r   )conns    ;tests/unit/test_budget_phase111_migros_monthly_analytics.pydbr      s     DTK    c                    t          | dddd          d         }t          | dddd	          d         }t          | d
ddd	          d         }|||fS )NBudgetkontocashCHF)nameaccount_typecurrency	entity_idzEssen & Haushaltexpense
   )r   category_type
sort_orderzSonstiges / AdministrationZ   )r   r   )r   accountfoodothers       r   baser&      s    +D=Z`ns2t2tuu  wB  CG"42DW`pr)s)stt  vA  BD#D3Obk{}*~*~  AL  MED%r   returnNonec            
     t   t                      } t          |           \  }}}dddddddddddddd	d
dddddddddg}t          | |d|d          }|d         dk    sJ t          | dd          }t	          |          dk    sJ d |D             |hk    sJ d |D             dhk    sJ t          d |D                       sJ t          d |D                       sJ t          |           }|d         dk    sJ |d         dk    sJ |d         d k    sJ |d!         d"k    sJ d#|vsJ t          | |$          }|d%         dk    sJ |d&         d"k    sJ |d'         sJ |                     d(          	                                }	t	          |	          dk    sJ d) |	D             |hk    sJ t          d* |	D                       sJ |                     d+          
                                d"         d k    sJ |                     d,          
                                d"         d-k    sJ d S ).Nz
03.01.202610:00Migros Test1ABrotz30.00DatumZeitFilialeKasseTransaktionArtikelUmsatzHaushaltz31.00z
04.01.2026z11:002BMilchz12.00
migros.csvz50.00)source_file_labelauto_category_idthreshold_chfreceipt_candidate_count   migros_receiptT)source_typeinclude_referencec                    h | ]
}|d          S )proposed_category_id .0cs     r   	<setcomp>z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<setcomp>,   s    :::!A$%:::r   c                    h | ]
}|d          S )statusrF   rG   s     r   rJ   z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<setcomp>-   s    ,,,AAhK,,,r   auto_categorizedc              3  *   K   | ]}|d          du V  dS )requires_reviewFNrF   rG   s     r   	<genexpr>z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<genexpr>.   s-      AAq"#u,AAAAAAr   c              3  .   K   | ]}|d          dk    V  dS )classificationmigros_receipt_food_householdNrF   rG   s     r   rP   z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<genexpr>/   s.      ZZ!q!"&EEZZZZZZr   open_receipt_countline_item_count   covered_by_migros_countr   amount
account_idconfirmed_countline_item_transaction_countaudit_idzFSELECT * FROM budget_transactions WHERE source_type='import_candidate'c                    h | ]
}|d          S )category_idrF   rH   rows     r   rJ   z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<setcomp>>   s    2223C222r   c              3  >   K   | ]}d |d         vo	d|d         vV  dS )r.   descriptionr:   NrF   r`   s     r   rP   z~test_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactions.<locals>.<genexpr>?   s<      iiZ]vS//UG3}CU4Uiiiiiir   z-SELECT COUNT(*) FROM budget_import_line_itemszgSELECT COUNT(*) FROM audit_log WHERE action IN ('migros_receipts_2026_confirmed','candidate_confirmed')   )r   r&   r   r   lenallr	   r   executefetchallfetchone)
r   r#   r$   _otherrowsseed
candidatespreview	confirmedtx_rowss
             r   ktest_migros_receipts_are_always_food_household_and_can_be_confirmed_with_audit_without_article_transactionsrq   !   sf   44Dd&$MTWhkx~  KR  	S  	SMTWhk  yC  OV  	W  	WMTWhkx  LS  	T  	TD
 ,D$,im  ~E  F  F  FD)*a////,T?OcghhhJz??a::z:::tfDDDD,,,,,1C0DDDDDAAjAAAAAAAAZZzZZZZZZZZ*400G,-2222'(A----$%****,-22227"""",TgFFFI&'1,,,,23q8888Z    llcddmmooGw<<122'222tf<<<<iiahiiiiiiii<<GHHQQSSTUVZ[[[[[<<  B  C  C  L  L  N  N  OP  Q  UV  V  V  V  V  V  Vr   c                    t                      } t          |           \  }}}t          | ddddddddgd	|
           t          | ddddgdd           t	          |           }|d         dk    sJ t          | |           |                     d                                          d         dk    sJ t          | dd          }t          |          dk    sJ |d         d         dk    sJ d S )Nz
05.01.2026r*   r+   r,   r-   Bonz44.00r/   r;   r<   r=   z
MIGROS MMM)r0   BeschreibungBetragzcard.csvT)r<   migros_coveredrW   rd   rY   zNSELECT COUNT(*) FROM budget_transactions WHERE description LIKE '%MIGROS MMM%'r   covered_by_migros)rL   rC   rL   )
r   r&   r   r
   r	   r   rg   ri   r   re   )r   r#   r$   rj   rn   covereds         r   Otest_credit_card_migros_stays_covered_and_is_not_confirmed_as_duplicate_expenserz   D   sj   44Dd&$$TlG`mx{  MP  ]b  nu  -v  -v  ,w  KW  jn  o  o  o  o)$<Yeqx1y1y0z  OY  jn  o  o  o  o*400G,-2222 '::::<<hiirrttuvw{|||||)$7J^bcccGw<<11:h#6666666r   c                    t                      } t          |           \  }}t          | ddddd           t          | dddd	d
ddddddd	ddddgd           t	          | |           t          | d          }t          fd|D                       }t          d |d         D                       }t          d |d         D                       }|d         dk    sJ |d         dk    sJ |d         dk    sJ |d         d k    sJ |d         dk    sJ |d         d!k    sJ |d         d"k    sJ t          | d#          }|d$         k    sJ |d%         dk    sJ |d&         dk    sJ |d         dk    sJ |d'         d(k    sJ t          |d)                   t          d(          k    sJ |d         dk    sJ |d*         sJ |d+         d,v sJ t          |d-                   d.k    sJ |d-         d/         d$         k    sJ |d-         d/         d0         d.k    sJ d1|v sJ |d1         
                    d2          sJ d3|d1         v sJ d4 |d1         v sJ d5|d1         v sJ d S )6N2026-01z	Food planz100.00monthly)
plan_monthr_   r   monthly_amount_chfcadencez
10.01.2026r*   zMigros Ar,   r-   rs   z120.00r/   z
11.02.2026zMigros Br9   z40.00r;   rt   rY   2026)yearc              3  4   K   | ]}|d          k    |V  dS )r_   NrF   )rH   rr$   s     r   rP   zQtest_budgetstatus_monthly_analytics_and_month_detail_groupings.<locals>.<genexpr>\   s2      @@!q'74'?'?A'?'?'?'?@@r   c              3  2   K   | ]}|d          dk    |V  dS )monthr|   NrF   rH   ms     r   rP   zQtest_budgetstatus_monthly_analytics_and_month_detail_groupings.<locals>.<genexpr>]   0      RRQ!G*	:Q:Qq:Q:Q:Q:QRRr   monthly_analysisc              3  2   K   | ]}|d          dk    |V  dS )r   z2026-02NrF   r   s     r   rP   zQtest_budgetstatus_monthly_analytics_and_month_detail_groupings.<locals>.<genexpr>^   r   r   
actual_chf
budget_chfrL   Rot	bar_colorredu   Grüngreen)r_   r   r_   r   budget_monthdifference_chfz20.00difference_percent	breakdownbreakdown_mode>   sourcemerchanttransactionsrd   r   rU   expense_filter_urlz/household/transactions?zperiod=2026-01zcategory_id=zfinancial_effect=expense)r   r&   r   r   r   r   nextr   r   re   
startswith)	r   r#   r%   rk   food_rowjanfebdetailr$   s	           @r   >test_budgetstatus_monthly_analytics_and_month_detail_groupingsr   R   s   44DT

%$T)DZe  ~F  S\  $]  $]  ^  ^  ^$TJQTehuz  GO  	P  	PJQTehuz  GN  	O  	O, &> > > > !'::::(F;;;D@@@@t@@@@@H
RR(#56RRR
R
RC
RR(#56RRR
R
RC|((((|((((x=E!!!!{u$$$$|''''x=G####{w&&&&&tYOOOF- D(((('?i''''.!X----,8++++"#w....6./00GG4D4DDDDD(u$$$$+"#'=====vn%&&!++++.!!$]3t;;;;.!!$%671<<<<6))))&'223MNNNNNv&:;;;;; $  F+?$@@@@@%0D)EEEEEEEr   N)r'   r(   )
__future__r   decimalr   'jarvis_finance.services.budget_accountsr   )jarvis_finance.services.budget_categoriesr   &jarvis_finance.services.budget_importsr   r   r	   r
   r   'jarvis_finance.services.budget_overviewr   r   $jarvis_finance.services.budget_plansr   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r&   rq   rz   r   rF   r   r   <module>r      sS   " " " " " "       Q Q Q Q Q Q M M M M M M              m l l l l l l l I I I I I I : : : : : : > > > > > >        V  V  V  VF7 7 7 7&F &F &F &F &F &Fr   