
    Yaj                        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
 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 d dl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S )    )annotations)Decimal)Path)create_crypto_asset)calculate_crypto_holdingscreate_initial_holding_snapshot)create_wallet)import_cash_balances_csv)import_crypto_holdings_csv)import_crypto_transactions_csv)import_crypto_wallets_csv)import_watchlist_csv)connect_memory)apply_migrationsc                     t                      } t          |            |                     d           |                     d           |                                  | S )NzINSERT INTO platforms(platform_id,name,platform_type,default_currency,created_at) VALUES('p1','Synthetic Broker','Bank/Broker','CHF','now')zINSERT INTO accounts(account_id,platform_id,account_name,account_type,currency,created_at) VALUES('a1','p1','Synthetic Cash','cash','CHF','now'))r   r   executecommit)cs    )tests/unit/test_csv_importers_extended.py
setup_connr      sj    A(+++II  \  ]  ]  ]II  a  b  b  bHHJJJq    tmp_pathr   namestrtextreturnc                >    | |z  }|                     |d           |S )Nzutf-8)encoding)
write_text)r   r   r   ps       r   	write_csvr!      s$    4AdW===axr   Nonec                ,   t                      }t          | dd          }t          ||d          j        dk    sJ t          ||d          }|j        dk    sJ t          ||d          j        dk    sJ t          | dd	          }t          ||d          }|j        dk    sJ t          |          }|                    d
          	                                d         }|                    d          	                                d         }|j
        ||f         j        t          d          k    sJ |                    d          	                                }|d         dk    r|d         dk    sJ |d         dk    r|d         dk    sJ d S )Nzwallets.csvzGwallet_name,wallet_type,notes
Synthetic Cold,Hardware Wallet,synthetic
Fr   
dry_run_okT   zholdings.csvzwallet_name,coin_name,symbol,coingecko_id,quantity,verification_status,last_verified_at,legacy_snapshot_value_chf
Synthetic Cold,Synthetic Bitcoin,BTC,bitcoin,0.00000001,verified,2026-01-01T00:00:00Z,999.99
z5SELECT asset_id FROM crypto_assets WHERE symbol='BTC'asset_idzGSELECT wallet_id FROM crypto_wallets WHERE wallet_name='Synthetic Cold'	wallet_id
0.00000001ztSELECT quantity, typeof(quantity), legacy_snapshot_value_chf, typeof(legacy_snapshot_value_chf) FROM crypto_holdingsquantityztypeof(quantity)r   legacy_snapshot_value_chfz999.99z!typeof(legacy_snapshot_value_chf))r   r!   r   statusrows_newrows_existingr   r   r   fetchonewallet_holdingsr*   r   )	r   r   walletsresholdingshaidwidrows	            r   Ktest_crypto_wallet_and_holding_import_dry_run_commit_existing_and_precisionr8      s   llAh}-xyyG$Qwe<<<C|SSSS!!G4888CQRARARARAR$Qwd;;;IQNNNNx  0C  D  DH"1XT:::C3<STCTCTCTCT""A			IJJSSUUV`aC			[\\eegghstCc#Y'0GL4I4IIIII			  I  	J  	J  	S  	S  	U  	UCz?l**s3E/F&/P/P/PP*+x77C@c<dhn<n<n<nn<n<nr   c                   t                      }t          |dd          }t          |dd          }t          |ddd	          }t          |||t	          d
          dd           t          | dd          }t          ||d          }|j        dk    sJ t          |          }|j	        ||f         j
        t	          d          k    sJ |j	        ||f         j
        t	          d
          k    sJ |                    d                                          d         dk    sJ |                    d                                          d         dk    sJ d S )NzSynthetic AzHardware Wallet)wallet_namewallet_typezSynthetic BzSoftware WalletzSynthetic BitcoinBTCbitcoin)	coin_namesymbolcoingecko_idz
0.00000003verified	synthetic)r'   r(   r*   verification_statusnotezcrypto_tx.csva\  transaction_type,asset_symbol,quantity,from_wallet_name,to_wallet_name,account_name,gross_amount_original,currency_original,fee_quantity,fee_original,fee_currency,fx_rate_to_chf,notes
transfer,BTC,0.00000001,Synthetic A,Synthetic B,,,,0.00000001,,,,synthetic transfer
buy,BTC,0.00000002,,Synthetic B,Synthetic Cash,10,CHF,,0.50,CHF,1,synthetic buy
Tr$   	committedr)   zASELECT COUNT(*) AS c FROM transactions WHERE source_type='crypto'r      zTSELECT COUNT(*) AS c FROM audit_log WHERE action IN ('crypto_transfer','crypto_buy'))r   r	   r   r   r   r!   r   r,   r   r0   r*   r   r/   )r   r   w1w2r5   csvr2   r4   s           r   Stest_crypto_transactions_import_transfer_and_buy_create_audit_and_no_float_roundingrJ   -   s   llA}Q=M^___Bdqrs  AN  [l  em  em  emac  sF  GH  Sf  ns  AJ  sK  sK  sK  or#AsRQ]I^I^s}  DO  P  P  P  P(?  ,M  	N  	NC&qD999C:$$$$""AbX&/7<3H3HHHHHbX&/7<3H3HHHHH99XYYbbddehimnnnnn99klluuwwx{|  AB  B  B  B  B  B  Br   c                   t                      }t          | dd          }t          ||d          j        dk    sJ |                    dd                                          d         d	k    sJ t          | d
d          }t          ||d          j        dk    sJ |                    d                                          }|d         dk    sJ t          |d                   t          d          k    sJ d S )Nz	watch.csvzname,asset_class,reason,status,target_entry_price,target_entry_currency,investment_case,bear_case
Synthetic Idea,Crypto,synthetic reason,active,123.45,CHF,case,bear
Tr$   r&   z)SELECT reason FROM watchlist WHERE name=?)zSynthetic Ideareasonzsynthetic reasonzcash.csvzaccount_name,balance_date,currency,amount_original,fx_rate_to_chf,notes
Synthetic Cash,2026-01-01,CHF,1000,1,synthetic cash snapshot
zmSELECT transaction_type, net_amount_original FROM transactions WHERE transaction_type='initial_cash_snapshot'transaction_typeinitial_cash_snapshotnet_amount_original1000)r   r!   r   r-   r   r/   r
   r   )r   r   watchcashr7   s        r   )test_watchlist_and_cash_balance_importersrS   :   sA   llA
H[  *S  T  TE%t444=BBBB99@ATUU^^``aij  oA  A  A  A  A	8J  (q  
r  
rD#Ad$777@AEEEE			  B  	C  	C  	L  	L  	N  	NC!"&=====3,-..'&//AAAAAAr   N)r   r   r   r   r   r   r   r   )r   r   r   r"   ) 
__future__r   decimalr   pathlibr   jarvis_finance.crypto.assetsr   jarvis_finance.crypto.holdingsr   r   jarvis_finance.crypto.walletsr	   -jarvis_finance.imports.cash_balances_importerr
   /jarvis_finance.imports.crypto_holdings_importerr   3jarvis_finance.imports.crypto_transactions_importerr   .jarvis_finance.imports.crypto_wallets_importerr   )jarvis_finance.imports.watchlist_importerr   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r!   r8   rJ   rS    r   r   <module>rb      sp   " " " " " "             < < < < < < e e e e e e e e 7 7 7 7 7 7 R R R R R R V V V V V V ^ ^ ^ ^ ^ ^ T T T T T T J J J J J J : : : : : : > > > > > >  H H H Ho o o o"
B 
B 
B 
B	B 	B 	B 	B 	B 	Br   