
    mj                        d dl mZ d dlZd dlmc mZ d dlZd dl	Z
d dlZd dlmZ d dlZd dlmZ d dlmZ d Zdd	Zdd
ZddZdS )    )annotationsN)Path)connect)apply_migrationsc                 @   t          t                    j        d         dz  dz  } t          j                            d|           }g }|}|r	|j        }|}|sdddt          j                    v st          j
        |          rt          j        |          ndiz  }|                    |           |rlddt          j                    v st          j
        |          rt          j        |          ndt          j        |          d	z  }|                    |           t          j        |d
          i z  }dd|iz  }t          t          j        |                    d x}x}}t          j                            |          }	|j                            |	           |	S )N   scriptsz sprint16_household_onboarding.pysprint16_household_onboardingz%(py2)spy2specz#%(py6)s
{%(py6)s = %(py4)s.loader
})py4py6r   zassert %(py9)spy9)r   __file__parents	importlibutilspec_from_file_locationloader@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specexec_module)
pathr   @py_assert1@py_assert0@py_assert5@py_format3@py_format7@py_format8@py_format10modules
             Y/home/agent/.hermes/repos/FinanceManager/tests/unit/test_sprint16_household_onboarding.py_moduler+      s   >>!!$y03UUD>112QSWXXD44DKK444DDK^,,T22FKF###M    returnstrc                 4   dg} t          d          D ]n}|dk    }|                     d                    |rdndd|rdnd	| |rd
nd|dz    d|rdnddg                     |dk     r|                     d|            od                    |           dz   S )Nz;IBAN;Booked At;Text;Credit/Debit Amount;Balance;Valuta DateE   D   ;zSYN-REF-B-2222zSYN-REF-A-1111z
2026-07-28Interestz
Synthetic 1.25-   z.0020.001000.009   z;;Continuation 
ranger   join)linesindexis_interests      r*   _raiffeisen_csvrA      s    JKEr 4 4rkHH(3I$$9I "-GJJ3G3G3G)AFF/A519/A/A/A*9GG	 	 		
 	
 	
 2::LL252233399Ud""r,   c                     dg} t          d          D ](}|dk     rdnd}|                     d| d| d           )d	                    |           d	z   S )
Nz@TransactionId,CardId,Date,Amount,Currency,MerchantName,StateType   
   zSYN-CARD T,z%,2026-07-01,1.00,CHF,Synthetic,bookedr:   r;   )r>   r?   	references      r*   	_visa_csvrI   ,   sr    OPEr S S"'"**JJ"	QQQQQQRRRR99Ud""r,   tmp_pathr   Nonec                   t                      }|                    dd           | dz  }t          |          }t          |           |                    d           dD ]}|                    d||f           |                                 |                                 | dz  }| dz  }|                    t                                 |                    t                                 | d	z  }|                    t          j        d
dddddddddddddddd	ddddd                     |                    d           ||||ddd|j        d }	|                    t          j        dni |	d dd!          }
|                    t          j        dni |	| d"z  dd!          }t          |          }|                    d#                                          d$         }|                                 |                    t          j        dni |	| d%z  dd!          }t          |          }|                    d#                                          d$         }|                    d&                                          d$         }|                    d'                                          d$         }|                    d(                                          }|                                 |
d)         }d}||u }|slt'          j        d*|fd+||f          t'          j        |          t'          j        |          d,z  }d-d.|iz  }t-          t'          j        |                    d x}x}}|
d/         }dd0ddgd1}||k    }|slt'          j        d2|fd3||f          t'          j        |          t'          j        |          d,z  }d-d.|iz  }t-          t'          j        |                    d x}x}}|d4         d5         }d6}||k    }|slt'          j        d2|fd3||f          t'          j        |          t'          j        |          d,z  }d-d.|iz  }t-          t'          j        |                    d x}x}}|d4         d7         }d}||u }|slt'          j        d*|fd+||f          t'          j        |          t'          j        |          d,z  }d-d.|iz  }t-          t'          j        |                    d x}x}}d"}| |z  }|j        } |            }|j        }d8}||z  }d}||k    }|st'          j        d2|fd9||f          d:t5          j                    v st'          j        |           rt'          j        |           nd:t'          j        |          t'          j        |          t'          j        |          t'          j        |          t'          j        |          t'          j        |          d;z  }d<d=|iz  } t-          t'          j        |                     d x}x}x}x}x}x}x}x}}g }|d4         d5         }d>}!||!k    }|}|r|d4         d?         }d}||u }|}|st'          j        d2|fd@||!f          t'          j        |          t'          j        |!          dAz  }dBdC|iz  }"|                    |"           |r`t'          j        d*|fdD||f          t'          j        |          t'          j        |          dEz  }#dFdG|#iz  }$|                    |$           t'          j        |d$          i z  } dHdI| iz  }%t-          t'          j        |%                    d x}x}x}x}x}!x}x}}g }||k    }|}|rdJ}||k    }&|&}|&r
dK}'||'k    }(|(}|st'          j        d2|fdL||f          dMt5          j                    v st'          j        |          rt'          j        |          ndMdNt5          j                    v st'          j        |          rt'          j        |          ndNdOz  }dPd.|iz  }|                    |           |rt'          j        d2|&fdQ||f          dRt5          j                    v st'          j        |          rt'          j        |          ndRt'          j        |          dSz  })dTdU|)iz  }*|                    |*           |&rt'          j        d2|(fdV||'f          dWt5          j                    v st'          j        |          rt'          j        |          ndWt'          j        |'          dXz  }+dYdZ|+iz  },|                    |,           t'          j        |d$          i z  }-d[d\|-iz  }.t-          t'          j        |.                    d x}x}x}x}&x}x}(}'d] |D             }d^d_g}||k    }|slt'          j        d2|fd3||f          t'          j        |          t'          j        |          d,z  }d-d.|iz  }t-          t'          j        |                    d x}x}}t          |          }|                    d`           |                                 t?          j         tB          dab          5  |"                    |dcdddedfdfdgh           d d d            n# 1 swxY w Y   |                    di           |                    dj           |                                 t?          j         tB          dab          5  |#                    |dkdcdedlm           d d d            n# 1 swxY w Y   |                                 d S )oNJARVIS_FINANCE_FINGERPRINT_KEYzsynthetic-onboarding-keyzfinance.sqlite3zmINSERT INTO platforms(platform_id,name,platform_type,created_at) VALUES ('p','Synthetic','bank','2026-01-01'))acct_raiffeisenacct_akbzINSERT INTO accounts(
                 account_id,platform_id,account_name,account_type,currency,performance_included,
                 portfolio_bucket,created_at)
               VALUES (?, 'p', ?, 'cash', 'CHF', 0, 'cash', '2026-01-01')zraiffeisen.csvzvisa.csvzauthorization.jsonzs16-source-truth-v1   r1   r6   11112222r8   r7   r4   TF)both_base_blocksboth_reference_aboth_transitions_correctremoval_breaks_chain!identical_provider_transaction_idpending_booked_pair)	physical_lines_including_headerreference_a_bookingsreference_b_bookingsreference_a_suffixreference_b_suffix reference_a_provider_balance_chf reference_b_provider_balance_chfreference_b_interest_chfchain_auditrC   rD   r   )transactionsprovider_reference_rowsfallback_role_rows)contract
raiffeisenvisai  rN   rO   zSYN-AKB)dbauthorization_manifestraiffeisen_csvvisa_csvraiffeisen_account_idakb_account_idakb_source_referenceauthorization)backupconfirm_onboardingzbefore-first.sqlite3zSELECT COUNT(*) FROM audit_logr   zbefore-retry.sqlite3z6SELECT COUNT(*) FROM household_account_source_mappingszPRAGMA integrity_checkzSELECT account_type,currency,performance_included,portfolio_bucket
           FROM accounts WHERE account_id IN ('acct_s16_raiffeisen_extra','acct_s16_visa_liability')
           ORDER BY account_iddatabase_unchanged)is)z%(py1)s is %(py4)s)py1r   zassert %(py6)sr   rf   r0   )rY   logical_bookingsreference_distribution)==)z%(py1)s == %(py4)sresultstatus	confirmedbackup_restore_verifiedi  )zz(%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).stat
}()
}.st_mode
} & %(py11)s) == %(py15)srJ   )py0r   py5py7r   py11py15zassert %(py17)spy17	unchanged
idempotent)z%(py3)s == %(py6)s)py3r   z%(py8)spy8)z%(py11)s is %(py14)s)r   py14z%(py16)spy16zassert %(py19)spy19   ok)z%(py2)s == %(py4)saudits_afteraudits_before)r   r   z%(py6)s)z%(py8)s == %(py11)smapping_count)r   r   z%(py13)spy13)z%(py15)s == %(py18)s	integrity)r   py18z%(py20)spy20zassert %(py23)spy23c                ,    g | ]}t          |          S  )tuple).0rows     r*   
<listcomp>zitest_onboarding_is_copy_first_integrity_checked_private_manifest_bound_and_idempotent.<locals>.<listcomp>   s    (((3E#JJ(((r,   )cashCHFr   r   )credit_card_liabilityr   r   	liabilityzTUPDATE accounts SET is_health_reserve=1 WHERE account_id='acct_s16_raiffeisen_extra'zincompatible semantics)matchacct_s16_raiffeisen_extrapu1   Raiffeisen Mitglieder-Sparkonto •••• 2222r   	Synthetic)
account_idplatform_idnameaccount_typebucketnoteszTUPDATE accounts SET is_health_reserve=0 WHERE account_id='acct_s16_raiffeisen_extra'zVUPDATE budget_accounts SET is_active=0 WHERE budget_account_id='bacc_s16_raiffeisen_b'bacc_s16_raiffeisen_bchecking)	budget_idr   r   r   r   )$r+   setenvr   r   executecommitclose
write_textrA   rI   jsondumpschmodAUTHORIZATIONrunargparse	Namespacefetchonefetchallr   _call_reprcomparer   r   r   statst_moder   r   r   r   r   pytestraisesRuntimeError_ensure_account_ensure_budget_account)/rJ   monkeypatchr)   databaseconnr   rf   rg   manifestcommondryfirstr   retryr   r   r   rolesr#   @py_assert3@py_assert2@py_format5r&   r"   @py_assert4@py_assert6@py_assert8@py_assert10@py_assert12@py_assert14@py_assert13@py_format16@py_format18r$   @py_format9@py_format15@py_format17@py_format20@py_assert9@py_assert17@py_assert16@py_format12@py_format14@py_format19@py_format21@py_format22@py_format24s/                                                  r*   Utest_onboarding_is_copy_first_integrity_checked_private_manifest_bound_and_idempotentr   4   sJ    YYF79STTT++H8DTLLw   6 
 

M $	
 	
 	
 	
 	KKMMMJJLLL,,Jj D/++,,,OOIKK   ..H
17:,.,-*0*08A8?06,0,04804=B/4$ $ $ *,bcdd) 	
 	
  4 NN5"*$!2$ )-	 	F **X'XX&XRWXXXX
Y
YCJJggVgH7M,Mbfgggg E 8DLL!ABBKKMMaPMJJLLLJJggVgH7M,Mbfgggg E 8D<< @AAJJLLQOLLL!YZZcceefghM566??AA!DILL	"  hjj	 

 	JJLLL#$,,$,,,,,,,,,,$,,,,,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,| +.#%q'! !  !     	    !    	    	!              	           
 ?8$33$3333333333$33333$3333333333333333333333333333333?45==5==========5=====5===============================-NH--N-3N3355N5=NN=ENNENNNNNNNNNNENNNNNNNNNNNNHNNNNNHNNNNNN-NNNN3NNNN5NNNN=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN]]5?8$]]$3]]]]]h8U]Y]]8UY]8]]]]]]]]]]]]$]]]]]$]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]8UY]]]]]]8U]]]]Y]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]UU<=(UUUUUaU]a-?UUUUUQUUIQUDUUUUUUUUUUUU<=UUUUUUUUUUUU<UUUUU<UUUUUUUUUUUUU=UUUUU=UUUUUUUUUUUUUUUUUUUUUUUUUUUUU]aUUUUUUUUUUUU]UUUUU]UUUUUUaUUUUUUUUUUUUUUUUUUUUUUUUUUUIQUUUUUUUUUUUUUIUUUUUIUUUUUUQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU((%((( "8- ( -        ( -     )   -                         
 8DLLghhhKKMMM	|+C	D	D	D 	
 	
2D 	 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	LLghhhLLijjjKKMMM	|+C	D	D	D 
 
%%-2D# 	& 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	JJLLLLLs$   8k!!k%(k%m,,m03m0)r-   r.   )rJ   r   r-   rK   )
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   importlib.utilr   r   pathlibr   r   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r+   rA   rI   r   r   r,   r*   <module>r      s    " " " " " "                           3 3 3 3 3 3 > > > > > >  # # # #*# # # #} } } } } }r,   