
    pjm                        d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d Zd ZdddZddZddZddZdS )    )annotations)confirm_create_category)%apply_user_budget_rules_to_candidatescreate_candidate_splitlist_transaction_candidates%seed_credit_card_candidates_from_rows seed_migros_candidates_from_rows%update_transaction_candidate_category)connect_memory)apply_migrationsget_schema_versionc                 @    t                      } t          |            | S )N)r   r   )conns    ,tests/unit/test_budget_phase16_user_rules.pydbr      s     DTK    c                v    g d}i }t          |          D ]"\  }}t          | |d|d          d         ||<   #|S )N)Essen & Haushalt   Hausrat / Möbel & Garten   Freizeit / Ausflüge / AbosGesundheit / MedizinAuto / Transportz Shopping / Kleidung & Elektronik	HaustiereSonstiges / Administrationexpense)namecategory_type
sort_order	entity_id)	enumerater   )r   namesidsidxr   s        r   add_categoriesr$      sc    	 	 	E Cu%% ~ ~	T+D4R[kn2o2oppq|}D		Jr   12.00
2026-02-03descriptionstramountdatereturndict[str, str]c                    || |dS )N)DatumBeschreibungBetrag )r'   r)   r*   s      r   rowr2   '   s    ;&IIIr   c                T    |                      d|f                                          S )Nz`SELECT * FROM budget_transaction_candidates WHERE description=? ORDER BY created_at DESC LIMIT 1)executefetchone)r   r'   s     r   	candidater6   +   s+    <<j	  hjjr   Nonec                    t                      } t          |           dk    sJ t          |           }t          | t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d	          t	          d
          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          t	          d          gd|d                    t          | d          }|d         dk    sJ |d         dk    sJ dD ]R}t          | |          d          dk    sJ t          | |          d!         d"k    sJ t          | |          d#         sJ St          | d          d!         d$k    sJ t          | d          d%         d&k    sJ d'D ]}t          | |          d          d(k    sJ d)D ]}t          | |          d          d*k    sJ d+D ]}t          | |          d          d,k    sJ d-D ]}t          | |          d          d.k    sJ d/D ]}t          | |          d          d0k    sJ t          | d          d          d1k    sJ t          t          | d23                    dk    sJ t          t          | d43                    d5k    sJ t          t          | d63                    d7k    sJ t          t          | d83                    d7k    sJ d S )9N1   	Apple.comGoogleAmazon PrimeNetflixDisney PluszDigitec Galaxus AGKantonsspital BadenApotheke Suessbach AGAgrola TankstelleEasyParkSBB CFF FFSIKEAJUMBOLandiQUALIPET	FressnapfKleintierpraxis TimDropboxGemeinde Windischz
McDonald'sphase16_card.csvr   )source_file_labelsubscription_category_id2026yearproductive_confirmed_countr   subscription_count   )r:   r;   r<   r=   r>   proposed_category_namestatusauto_categorized	rule_nameneeds_reviewreview_reasonu3   Galaxus/Digitec bitte manuell prüfen oder splitten)r?   r@   r   )rA   rB   rC   r   )rD   rE   rF   r   )rG   rH   rI   r   )rJ   rK   r   r   subscriptionstabhealth   auto_transport   pets)	r   r   r$   r   r2   r   r6   lenr   )r   catsresultdescs       r   Btest_phase16_schema_adds_rule_name_and_applies_card_category_rulesrg   2   s   44Dd##r))))$D)MM	NN$%%%&&'((#$$
OOKKLLLL
OO%&&	NN#$$)	
, -!%&C!D3   8 34fEEEF./14444&'1,,,,Q 2 2t$$%=>B_____t$$X.2DDDDDt$$[11111T/00:nLLLLT/00AEzzzzz@ Y Yt$$%=>BXXXXXX@ U Ut$$%=>BTTTTTT* ^ ^t$$%=>B]]]]]]@ N Nt$$%=>+MMMMM0 _ _t$$%=>B^^^^^^T<(()ABFXXXXX*4_EEEFF!KKKK*4X>>>??1DDDD*45EFFFGG1LLLL*4V<<<==BBBBBBr   c                 f   t                      } t          |           }t          | t          d          gd           t	          | ddddddd	d
dddddddd
gd|d                    t          | d          }|d         dk    sJ |d         dk    sJ |d         dk    sJ t          | d          }t          |          dk    sJ |d         d         dk    sJ t          t          | d                    dk    sJ t          t          | d                    dk    sJ t          | d          d         }t          | |d         |d          d!"           t          | |d         |d         d#d$d%g           | 
                    d&                                          d'         dk    sJ d S )(Nz
Migros MMMrL   )rM   r&   z10:00zMigros Baden1Az10.00)r.   ZeitFilialeKasseTransaktionArtikelUmsatzz
2026-02-04z11:00Bz60.00zphase16_migros.csvr   )rM   auto_category_idrO   rP   covered_by_migros_count   migros_under_50_countr_   migros_over_50_countr   covered_by_migrosr\   rV   migros_over_50autotransaction_candidate_idr   ztest override)notez5.00part)category_idamount_originalnotesz*SELECT COUNT(*) c FROM budget_transactionsc)r   r$   r   r2   r	   r   r   rc   r
   r   r4   r5   )r   rd   re   coveredry   s        r   Ftest_phase16_migros_and_review_filters_keep_confirm_boundary_and_editsr   m   so   44D$D)$\1B1B0CWijjjj$"GY\mp  ~A  MT  U  U"GY\mp  ~A  MT  U  U	
 /01    34fEEEF+,1111)*a////()Q....)$4GHHHGw<<11:h#66666*45EFFFGG1LLLL*4V<<<==BBBB&t888;D)$5O0PRVWrRs  {J  K  K  K  K4&@!ATXYkTl  BH  SY  EZ  EZ  D[  \  \  \<<DEENNPPQTUYZZZZZZZr   N)r%   r&   )r'   r(   r)   r(   r*   r(   r+   r,   )r'   r(   )r+   r7   )
__future__r   )jarvis_finance.services.budget_categoriesr   &jarvis_finance.services.budget_importsr   r   r   r   r	   r
   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r   r$   r2   r6   rg   r   r1   r   r   <module>r      s2   " " " " " " M M M M M M                ; : : : : : R R R R R R R R    "J J J J J   8C 8C 8C 8Cv[ [ [ [ [ [r   