
    |xjf                       d dl mZ d dlZd dlZd dl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mZmZ d dlmZmZ d d	lmZmZ d d
lmZmZ d dlmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZBmCZCmDZD ddZEdddZFeGdk    r eH eF                      dS )     )annotationsN)asdict)Decimal)Path)ensure_runtime_dirsload_settings)FrankfurterFxProviderMockFxProviderTwelveDataFxProvider)recheck_transaction_fx_statusupdate_fx_rates)qwen_resolve_staged_candidatesstage_docx_candidates)CoinGeckoClientrefresh_crypto_prices))backfill_crypto_points_from_crypto_prices)backfill_equity_points_from_market_prices)CompositePublicLookupProviderEmptyLookupProvider%dedupe_missing_provider_symbol_alertsexport_mapping_decision_packexport_mapping_review_templategenerate_mapping_candidatesrecalculate_candidate_rankings) prepare_catalog_from_instruments)MockEquityPriceProviderequity_price_provider_by_namerefresh_market_prices)check_crypto_data_quality)assert_safe	scan_path)backup_runtime_dbrestore_runtime_dbverify_backup)MAX_PROVIDER_AGE_SECONDSactivate_crypto_market_sourcebuild_crypto_market_dry_runrun_crypto_market_one_shot)run_activated_daily_sourcerun_isolated_daily_sourcesrun_truewealth_market_one_shot)connectconnect_read_only)MIGRATION_VERSIONapply_migrationsget_schema_versionreturnintc                J    h dt          fd| D                       rdndS )N>   failedblockedpartialunavailableblocked_uncertainc              3  *   K   | ]}|j         v V  d S N)status).0itemblocking_statusess     V/home/agent/.hermes/worktrees/FinanceManager-sprint20g1/src/jarvis_finance/cli/main.py	<genexpr>z*_daily_source_exit_code.<locals>.<genexpr>?   s+      IIDK#44IIIIII       r   )any)resultsr>   s    @r?   _daily_source_exit_coderE   ;   sC       IIIIIIIIIP11qPrA   argvlist[str] | Nonec           "     N  >?@ t          j        d          }|                    dd          }|                    d           |                    d           |                    d          }|                    d	d
d           |                    d          }|                    dd           |                    dt
          d           |                    dt          d           |                    dt
          d           |                    dt          d           |                    dt          d           |                    dd           |                    dd           |                    d            |                    d!t
          "           |                    d#d           |                    d$          }|                    d%d&gd&'           |                    d(d           |                    d#d           |                    dd           |                    dt
          d)           |                    d*          }|                    d+d,-           |                    d.d           |                    d/d           |                    d#d           |                    dd0d12           |                    d3g d4d5'           |                    d6d0g d78           |                    d9d           |                    d:           |                    d;          }|                    d<g d=d>           |                    dd           |                    dd           |                    d?           |                    d!t
          "           |                    d#d           |                    d+d@-           |                    dAd0g dB8           |                    dC          }|                    d<g dDdE'           |                    dd           |                    dd           |                    d?           |                    d!t
          "           |                    d#d           |                    d+d@-           |                    d3g dFdG'           |                    dHddIJ           |                    dAd0g dB8           |                    dK          }	|	                    d3g dFdG'           |	                    d!t
          dL           |	                    d#d           |	                    dAd0g dB8           |                    dM          }
|
                    d3dNdOgdO'           |
                    d!t
          dP           |
                    d#d           |                    dQ          }|                    d<dRd&gd>           |                    dSdT           |                    dUdV           |                    d#d           |                    dW          }|                    dXdY           |                    d!t
          "           |                    dZ          }|                    dXdY           |                    d!t
          "           |                    d#d           |                    d[d           |                    d\d           |                    d]           |                    d^d           |                    d_          }|                    d`d           |                    da           |                    dbt
          dc           |                    dd          }|                    dedfdgh           |                    did           |                    d#d           |                    djd           |                    dk          }|                    dldm           |                    dndo           |                    d!t
          "           |                    d#d           |                    dpt
          dq           |                    dr           |                    ds          }|                    d+dt-           |                    dud5dvgd5'           |                    dw          }|                    dxt
          t                     |                    dy          }|                    d+dt-           |                    dzd           |                    d{          }|                    d|d}           |                    dzd           |                    d~          }|                    ddd           |                    dd           |                    d          }|                    dd}           |                    |           >>j	        dwk    rt                      ?t          ?j        d          }	 t          |t                      >j                  }t!          t#          j        |d                     |d         dk    rdnd	 |                                 S # |                                 w xY w>j	        dyk    r >j        st!          d           dS t                      ?t+          ?j                  }	 t-          |          t.          k    rt1          d          t3          |t                      >j        ?j        j        dz            }t!          t#          j        t;          |          d                     |j        dk    rdnd	 |                                 S # |                                 w xY w>j	        d{k    rˉ>j        st!          d           dS t                      ?t+          ?j                  }	 t-          |          t.          k    rt1          d          t?          |>j                   }t!          t#          j        |d                     	 |                                 dS # |                                 w xY w>j	        dv rat                      ?tC          ?           t+          ?j                  }tE          |           t!          dt-          |                      dS >j	        dk    rztG          tI          >j%                            }|r%|D ] }t!          |j%         d|j&                    !dS tO          tI          >j%                             t!          d           dS >j	        dsk    r>tP          j)        *                    d          dk    rt!          d           dS t                      ?tC          ?           t+          ?j                  }	 t-          |          }|t.          k    rt1          dt.           d|           |                                 ?fd@tW          d&>?@fdfd>@fdfg          }d,                    d |D                       }t!          d|            t[          |          |                                 S # |                                 w xY w>j	        dk    rXt                      ?tC          ?           t+          ?j                  }	 tE          |           t]          |t          >j/        >j0        >j1                  >j2        >j3        >j4        >j5        >j6        >j7        >j8        >j9        
  
        }t!          d|j2         d|j:         d|j;         d|j<         d|j=         d|j>         d|j?         d|j@         d|jA         dt          |j8                  C                                            |j@        rdnd	 |                                 S # |                                 w xY w>j	        d*k    rt                      ?tC          ?           t+          ?j                  }	 tE          |           >jD        rt          |>jF        >j8                  }t!          d|jG         d|jH         d|jI         d|jJ         d|jK         d|jL         d|jM         d|jN         dt          |j8                  C                                            	 |                                 dS >jO        s>jP        s|Q                    d           i }>jR        D ]I}|S                    dd          \  } }!t          |!          || U                                d>jO        pdf<   J>jV        p=t          d |X                    d          Y                                D                       }">jR        s>jZ        dk    rt          |          }#n(>jZ        dvk    rt                      }#nt                      }#t          ||#|">jO        pd>jP        >j_        >j8                  }t!          d|j;         d|j<         d|j=         d|j?         d|j@         d|jM         dt          |j8                  C                                            |j@        rdnd	 |                                 S # |                                 w xY w>j	        dKk    rt                      ?tC          ?           t+          ?j                  }	 tE          |           i }>j`        D ]?}|S                    dd          \  }$}%t          |%          ||$U                                <   @|s>jZ        dk    rt          |          nt          >jZ                  }#d}&dD ]}'t          ||#|'>j7        >j8                  }t!          d|jd         d|je         d|j;         d|j<         d|j=         d|j>         d|j?         d|j@         dt          |j8                  C                                            t          |&|j@        rdnd          }&|&|                                 S # |                                 w xY w>j	        dMk    rt                      ?tC          ?           t+          ?j                  }	 tE          |           >jZ        dOk    rddlgmh}( ddlimj}) |X                    dƉ>j7        f          Y                                }*dx}+x},}-|*D ]J}. |)||.d          |(dO>j8        Ȧ                    }/|/jk        dk    r|+dz  }+6|/jk        dv r|-dz  }-E|,dz  },Kt!          dt          |*           d|+ d|, d|- dt          >j8                  C                                 
           |-rdnd	 |                                 S t]          |t                      d̉>j7        >j8        ͦ          }t!          d|j:         d|j;         d|j?         d|j@         dt          |j8                  C                                 
           |j@        rdnd	 |                                 S # |                                 w xY w>j	        dQk    ret                      ?tC          ?           t+          ?j                  }	 tE          |           d}0>j8        sO>jd        dRk    rD|X                    dϦ          Y                                D ]}1|0t          ||1d                   z  }0nK>j8        sD|X                    dѦ          Y                                D ]}1|0t          ||1d         d          z  }0t!          d҉>jd         d|0 dԉ>jo         dՉ>jp         dt          >j8                  C                                 
           	 |                                 dS # |                                 w xY w>j	        dv r?t                      ?tC          ?           t+          ?j                  }	 tE          |           i }>j`        D ]?}|S                    dd          \  }$}%t          |%          ||$U                                <   @>j	        d;k    s|s>jZ        dk    rt          |          }#n<>jZ        dk    r>jq        s|Q                    dئ           nt          >jZ                  }#>j	        dCk    r>jd        dEk    rddgn>jd        dRk    rdn>jd        g}2g }3d}&|2D ]}'t          ||#|'>jr        >j4        >j5        >js        >j7        >j8        ۦ	  	        }|3t                    |           t          |&|j@        rdnd          }&t!          >j	        dCk    rdndd|jd         d|je         d|j;         d|j<         d|j=         d|j>         d|j?         d|j@         dt          |j8                  C                                 z              |&|                                 S # |                                 w xY w>j	        dWk    rt                      ?tC          ?           t+          ?j                  }	 tE          |           |X                    dߦ          Y                                }4d |4D             }5>j7        |5d >j7                 }5t          ||5>jv                  }t!          d|d          d|d          d|d          d|d          d|d          d|d          d|d                     	 |                                 dS # |                                 w xY w>j	        dZk    rt                      ?tC          ?           t+          ?j                  }	 tE          |           >jw        rt          |          }6nd}6>jy        rt                      nt                      }#t          ||#>jv        >j7        >j8                  }d }7>j}        r5>j~        pt          ?j        j        dz            }8t          ||8          }7t!          d|j         d|j         d|j         d|j         d|j         d|j         d|j         d|j         d|j         d|j         d|6 dt          t          |7                    C                                 d|7r|7d         nd d|7r	|7d          nd dt          |j8                  C                                            	 |                                 dS # |                                 w xY w>j	        d_k    rt                      ?tC          ?           t+          ?j                  }	 tE          |           t          |          }d }9>j        r=>j        pt          ?j        j        dz            }:t          ||:>j                  }9t!          d|d          d|d          d|d          d	|d
          d|d          d|d          d|d          d|d          d|d          dt          t          |9                    C                                 d|9r|9d         nd d|9r	|9d          nd dt          t          |9o|9d                             C                                            	 |                                 dS # |                                 w xY w>j	        ddk    rt                      ?tC          ?           tI          j                                                    };d >j        D             }<>j        sB|<D ]?}=	 |=                    |;           |Q                    d           /# t,          $ r Y <w xY wt+          ?j                  }	 tE          |           t/          ||<>j        >j8                  }t!          d,                    g d|j         d|j         d|j         d|j         d |j         d!|j         d"|j         d#|j         d$|j         d%|j         d&|j         d't          >j                  C                                 d(t          |j                  C                                 d)t          |j                  C                                 d*|j         d+|j         d|j         d|j         dt          |j8                  C                                                      |j        rdnd	 |                                 S # |                                 w xY w>j	        dkk    rt                      ?tC          ?           t+          ?j                  }	 tE          |           tU          |>j        >j        >j7        >j8        >j        ,          }t!          d,                    g d-t          |j                  C                                 d(t          |j                  C                                 d.|j         d/|j         d0|j         d1|j         d2|j         d3|j         d4|j         d5|j         d6|j         d7|j         d8|j         d|j         d|j         dt          |j8                  C                                                      |j        rdnd	 |                                 S # |                                 w xY w>j	        d$k    rt                      ?tC          ?           t+          ?j                  }	 tE          |           to          |>j2        >j3        >j        >j8        9          }t!          d:|j         d;|j         d<|j         d=|j         d>|j         d|jM         d|j         d|j         dt          |j8                  C                                            |j        rdnd	 |                                 S # |                                 w xY w>j	        drk    rt                      ?tC          ?           t}          ?j        ?j        j        tI          j                    ?          }t!          d@|j         dA|j         dB|j         dC|j                    dS >j	        dk    rt          tI          >j                  tI          j                    D          }t!          dE|j         dA|j         dFt          |j                  C                                 dGt          |j                  C                                 dB|j         
           |j        r	|j        rdndS >j	        d~k    rt                      ?tC          ?           t          tI          >j                  ?j        tI          j                    >j        H          }t!          dI|j         dJ|j         dKt          |j                  C                                            dS d S (L  Nfinance)progcommandT)destrequiredinit-dbmigratezgit-safety-scanpath?.)nargsdefaultzupdate-crypto-pricesz
--currencyCHF)rT   z--max-age-secondsi  )typerT   z--sleep-secondsg        z--max-retries   z--initial-backoffg      ?z--max-backoffg       @z--only-missing
store_true)actionz--only-stalez--only-symbolz--limit)rV   z	--dry-runzcheck-data-qualityz--scopecrypto)choicesrT   z--resolve-fixediQ zupdate-fx-ratesz--date	rate_date)rL   z--latestz--missing-onlyappend
currencies)rY   rL   z
--provider)frankfurter
twelvedatamockr_   z--mock-ratez!Test-only BASE=RATE, e.g. USD=0.9)rY   rT   helpz--recheck-transactionsz--source-typeupdate-market-pricesz--asset-class)etfequitystock)r[   rM   z--only-isin
price_datez--mock-pricezTest-only SYMBOL=PRICEupdate-equity-prices)rd   re   rf   allri   )autofmpr`   finnhubmassiveeodhdra   rj   z--allow-low-volumez1Allow explicit low-volume providers such as EODHD)rY   rb   zupdate-equity-quotes
   zupdate-crypto-live-stats	coingeckobinance   zupdate-market-chartsre   z--range1dz
--interval5mzprepare-instrument-catalogz--sourcetrue_wealthzgenerate-mapping-candidatesz--public-lookupz--export-templatez--template-pathz --dedupe-missing-provider-alertszrank-mapping-candidatesz--export-decision-packz--decision-pack-pathz--top-n   zstage-instrument-candidatesfiles+z"Broker DOCX files outside git repo)rS   rb   z--qwenz--allow-repo-filesz"qwen-resolve-instrument-candidatesz
--endpointzhttp://100.101.173.25:11435/v1z--modelzqwen-3.6-agentz	--timeout-   zbackup-runtime-dbzrun-daily-market-valuationas_ofz--fx-providerr`   zcrypto-market-dry-runz--max-provider-age-secondszrun-crypto-market-one-shotz	--confirmzactivate-crypto-market-sourcez--confirmation-id)rM   zrestore-runtime-dbz--frombackup_filez--yeszverify-backupz--fileF)	immutable)providermax_provider_age_seconds)	sort_keysr;   completer   rB   z<CRYPTO_MARKET_ONE_SHOT status=confirmation_required writes=0z&crypto market one-shot schema mismatchdaily-crypto-market.lock)r}   rz   	lock_pathzECRYPTO_MARKET_SOURCE_ACTIVATION status=confirmation_required writes=0z/crypto market source activation schema mismatch)confirmation_id>   rO   rN   zSCHEMA_VERSION=z: GIT_SAFETY_OK&JARVIS_FINANCE_DAILY_VALUATION_ENABLED1znDAILY_MARKET_VALUATION status=activation_required writes=0 reason=explicit_daily_valuation_activation_requiredz daily valuation requires schema z; found c                @   t          j                  }	 t          |          t          k    rt	          d           | |          |                                 S # t          $ r |j        r|                                  w xY w# |                                 w xY w)Nz0daily valuation source connection schema changed)	r,   db_pathr0   r.   RuntimeErrorclose	Exceptionin_transactionrollback)workersource_connsettingss     r?   with_source_connectionz$main.<locals>.with_source_connection  s    %h&677	()+66:KKK*+]^^^!6+..  %%'''' !   "1 /#,,...
  %%''''s   1A 'BB Bc                 "      fd          S )Nc                h    t          | j        t                      j        j        dz  d          S )Nr   T)rz   r}   r   require_activation)r(   rz   r   runtime_pathsbase_dir)r   argsr   s    r?   <lambda>z(main.<locals>.<lambda>.<locals>.<lambda>  s:    0J +&*j)8):):*2*@*ILf*f371 1 1 rA    )r   r   r   s   r?   r   zmain.<locals>.<lambda>  s.     6 6    ! ! rA   
truewealthc                        fd          S )Nc                0     t           d fd          S )Nr   c                     t           j        t          d           j        dk    rt	                      nt                                S )Nyfinancer`   )rz   price_providerfx_provider)r+   rz   r   r   r   r	   )r   r   s   r?   r   z:main.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>-  sR    (F$/*.*3PQ[3\3\ ,0+;|+K+K )=(>(>(>-B-D-D	)" 	)" 	)" rA   )r)   )r   r   s   `r?   r   z(main.<locals>.<lambda>.<locals>.<lambda>*  s2    0J + ,	!" 	!" 	!" 	!" 	!"1 1 rA   r   )r   r   s   r?   r   zmain.<locals>.<lambda>)  s)     6 6   ! ! rA    c              3  8   K   | ]}|j          d |j         V  dS )z_status=N)sourcer;   )r<   r=   s     r?   r@   zmain.<locals>.<genexpr><  sH         ;5555     rA   z%DAILY_MARKET_VALUATION isolated=true )max_retriesinitial_backoff_secondsmax_backoff_seconds)	r}   currencymax_age_secondsonly_missing
only_staleonly_symbollimitdry_runsleep_secondszCRYPTO_PRICE_UPDATE currency=z total_assets=z	 updated=z cached=z	 skipped=z stale=z
 warnings=z errors=z" assets_still_missing_local_price=z	 dry_run=)source_typer   zFX_RECHECK transactions=z chf_positions=z foreign_currency_positions=z justified_missing_fx_alerts=z" false_positive_missing_fx_alerts=z corrected_transactions=z resolved_alerts=z audit_events=zQupdate-fx-rates requires --date or --latest unless --recheck-transactions is used=latestc                    h | ]
}|d          S )currency_originalr   r<   rs     r?   	<setcomp>zmain.<locals>.<setcomp>~  s0      4H  4H  4HqA6I4J  4H  4H  4HrA   zWSELECT DISTINCT currency_original FROM transactions WHERE currency_original IS NOT NULLra   )r}   r^   r\   r   missing_onlyr   zFX_RATE_UPDATE updated=)rf   rd   )r}   asset_classr   r   z EQUITY_QUOTE_UPDATE asset_class=z total_mappings=)QuoteRefreshRequest)refresh_crypto_quotezSELECT asset_id FROM crypto_assets WHERE is_active=1 AND binance_symbol IS NOT NULL AND binance_symbol!='' ORDER BY symbol LIMIT ?asset_id)r}   r   fresh>   rate_limitedprovider_errorz7CRYPTO_LIVE_STATS_UPDATE provider=binance total_assets=USD)r}   r   r   r   z9CRYPTO_LIVE_STATS_UPDATE provider=coingecko total_assets=z0SELECT DISTINCT instrument_id FROM market_pricesinstrument_idz+SELECT DISTINCT asset_id FROM crypto_pricesz MARKET_CHART_UPDATE asset_class=z points_cached=z range=z
 interval=>   rh   rc   rn   zHEODHD is low-volume; pass --provider eodhd --allow-low-volume explicitlyrf   rd   )r}   r   rg   r   r   	only_isinr   r   zEQUITY_PRICE_UPDATE zMARKET_PRICE_UPDATE zasset_class=a  
                SELECT DISTINCT t.instrument_id
                FROM transactions t JOIN instruments i ON i.instrument_id=t.instrument_id
                WHERE t.transaction_type='initial_position_snapshot'
                  AND t.source_type='broker_import_reviewed_snapshot'
                  AND COALESCE(t.is_voided,0)=0
                  AND t.instrument_id IS NOT NULL
                ORDER BY i.isin, i.name
                c                    g | ]
}|d          S )r   r   r   s     r?   
<listcomp>zmain.<locals>.<listcomp>  s    444!1_%444rA   )instrument_idsr   z*INSTRUMENT_CATALOG_PREP instruments_total=instruments_totalz catalog_entries_created=catalog_entries_createdz multiple_listings=multiple_listingsz manual_review_required=manual_review_requiredz hedge_unknown=hedge_unknownz instrument_status_unknown=instrument_status_unknownz valuation_ready=valuation_ready)r}   r   r   r   z'true_wealth_mapping_review_template.csv)output_pathz%MAPPING_CANDIDATES instruments_total=z candidates_found=z high=z medium=z low=z instruments_without_candidate=z provider_lookup_unavailable=z ambiguous=z! deduped_missing_provider_alerts=z template_updated=z template_instruments=instrument_countz template_candidates=candidate_rowsz"mapping_candidate_decision_pack.md)r   top_nz+MAPPING_CANDIDATE_RANKING candidates_total=candidates_totalz rank_high=	rank_highz rank_medium=rank_mediumz
 rank_low=rank_lowz multiple_listings_same_isin=multiple_listings_same_isinz currency_mismatch=currency_mismatchz hedge_status_unknown=hedge_status_unknownz candidate_review_required=candidate_review_requiredz decision_pack_created=z decision_pack_instruments=z decision_pack_candidates=z top_candidates_present=top_candidates_presentc                t    g | ]5}t          |                                                                          6S r   )r   
expanduserresolve)r<   fs     r?   r   zmain.<locals>.<listcomp>X  s6    DDDAa##%%--//DDDrA   zRBroker files must stay outside git repo; pass runtime import paths, not repo files)use_qwenr    z.INSTRUMENT_CANDIDATE_STAGING candidates_total=z with_isin=z without_isin=z with_ticker=z with_currency=z exact_isin_match=z
 probable=z needs_manual_review=z confirmed=z importable_confirmed=z	 blocked=z qwen_requested=z qwen_used=z qwen_available=z parser_qwen_agree=z parser_qwen_disagree=)endpointmodelr   r   timeoutz'QWEN_INSTRUMENT_RESOLVE qwen_available=z model=z candidates_total=z exact_before=z exact_after=z probable_before=z probable_after=z needs_review_before=z needs_review_after=z confirmed_after=z
 improved=z manual_review_remaining=)r   r   resolve_fixedr   zDATA_QUALITY_CHECK scope=z active_crypto_assets=z fresh_price_assets=z" active_stale_price_alerts_before=z! active_stale_price_alerts_after=)r   backups_dir	repo_rootzRUNTIME_DB_BACKUP backup_file=z checksum_file=z sha256=z size_bytes=)r{   r   zBACKUP_VERIFY backup_file=z exists=z checksum_ok=)r{   r   r   yeszRUNTIME_DB_RESTORE source_file=z restored_to=z
 verified=)argparseArgumentParseradd_subparsers
add_parseradd_argumentr2   floatr%   
parse_argsrK   r   r-   r   r'   r   r~   printjsondumpsr   confirmr,   r0   r.   r   r(   rz   r   r   r   r;   r&   r   r   r/   r!   r   rP   reasonr    osenvirongetr*   joinrE   r   r   initial_backoffmax_backoffr   r   r   r   r   r   r   r   total_assetsupdated_countcached_countskipped_countstale_countwarning_counterror_countmissing_local_price_countstrlowerrecheck_transactionsr   r   transaction_countchf_positionsforeign_currency_positionsjustified_missing_fx_alerts false_positive_missing_fx_alertscorrected_transactionsresolved_alertsaudit_eventsr\   r   error	mock_ratesplitr   upperr^   sortedexecutefetchallr}   r
   r   r	   r   r   
mock_pricer   r   r   r   total_mappingsmax!jarvis_finance.api.schemas.marketr   &jarvis_finance.services.market_servicer   quality_statuslenr   r   rangeintervalallow_low_volumerg   r   r]   r   r   dedupe_missing_provider_alertsr   public_lookupr   r   r   export_templatetemplate_pathexports_dirr   r   candidates_foundhigh_confidencemedium_confidencelow_confidenceinstruments_without_candidateinstruments_with_hedge_unknowninstruments_with_status_unknownprovider_lookup_unavailableambiguous_provider_mappingboolr   export_decision_packdecision_pack_pathr   r   cwdr   rw   allow_repo_filesrelative_to
ValueErrorr   qwenr   	with_isinwithout_isinwith_tickerwith_currencyexact_isin_matchprobableneeds_manual_review	confirmedimportable_confirmedr5   	qwen_usedqwen_availableparser_qwen_agreeparser_qwen_disagreewarningserrorsr   r   r   r   exact_beforeexact_afterprobable_beforeprobable_afterneeds_review_beforeneeds_review_afterconfirmed_afterimprovedmanual_review_remainingr   r   scopeactive_crypto_assetsfresh_price_assets active_stale_price_alerts_beforeactive_stale_price_alerts_afterr"   r   r{   checksum_filesha256
size_bytesr$   fileexistschecksum_okr#   r   source_filerestored_toverified)ArF   parsersubscanpricesdqfxmarket_pricesequity_pricesequity_quotescrypto_livechartscatalog
candidatesrank_candidatesqqrdaily_marketcrypto_dry_runcrypto_one_shotcrypto_activationrestoreverifyconnresultfindingsfindingschema_versionrD   summary
mock_ratesr=   baserater^   r}   symbolprice	exit_coder   _QReqr   assetsupdatedr?  r@  assetresponsewrittenrowasset_classestotalsrowsidsresolvedtemplater  decisiondecision_pathr   rw   r   r   r   r   sA                                                                 @@@r?   mainr  B   sO1   $)444F


Y

>
>CNN9NN9>>+,,DfC555^^233F
e444
+#tDDD
)sCCC
c1===
+%EEE
eSAAA
(>>>
|<<<
(((
	,,,
L999	,	-	-BOOIz8ODDDOO%lO;;;OOKO555OOL%O000OO'c6OBBB	)	*	*BOOH;O///OOJ|O444OO$\O:::OOKO555OOLOEEEOOL*O*O*OYfOgggOOM(BEhOiiiOO,\OBBBOOO$$$NN#9::M8R8R8R]abbb/EEE~lCCC}---ys333{<@@@xl;;;~hQijjjNN#9::M8Y8Y8Ychiii/EEE~lCCC}---ys333{<@@@xl;;;|5y5y5y  DJ  K  K  K3L  PC  D  D  D~hQijjjNN#9::M|5y5y5y  DJ  K  K  KysB???{<@@@~hQijjj..!;<<K\K3KU^___YS"===[>>>^^233F
(H1EPTUUU
	4000
d333
L999nn9::G];;;--- =>>JJ>>>IC000K===-lCCC/EEE-...>|TTTnn%>??O  !9, OOO  !7888  a @@@455ANN7#,PNQQQNN8LN111NN;|N444NN'N===	<	=	=BOOL*JOKKKOOI'7O888OOICO(((OOKO555OOKc2O666NN&'''>>">??LhW555o|7T^klll^^$;<<N$38P      nn%ABBO   888  \ BBB'FGG""#6"FFF"";|"DDDnn122GEEE666^^O,,F
4000T""D|... ?? !1UCCC		0(**)-)F  F
 $*Vt444555x(J6611A=JJLLLLDJJLLLL|333| 	PQQQ1 ??x'((	!$''+<<<"#KLLL/(**j"09<VV	  F $*VF^^t<<<===3311:JJLLLLDJJLLLL|666| 	YZZZ1 ??x'((
	!$''+<<<"#TUUU2 $ 4  F $*Vt444555JJLLLLLDJJLLLL|--- ??H%%%x'((: 24 8 8::;;;q|(((T$)__-- 	# ; ;9999::::1DOO$$$oq|333:>>BCCsJJO   1 ??H%%%x'((?	/55N!222"b7HbbR`bb   JJLLL( ( ( ( ( 1 !      %     " "GF hh  #    G C'CCDDD*733JJLLLLDJJLLLL|--- ??H%%%x'((	T"""*( $ 0,0,@(,(8  
  $ 4!.? ,j"0  F  9"O9 9;A;N9 9!/9 99?9L9 9 "/9 9 9?8J9 9 #0	9 9 ;A:L	9 9
 5;4T9 9 v~..44669 9   *1111JJLLLLDJJLLLL|((( ??H%%%x'(($	T"""( 6tIYcgcoppp`$*$<` `MSMa` `282S` ` 4:3U` ` 9?8_	` `
 /5.K` `
 _e^t` ` %+$7` ` CFfnBUBUB[B[B]B]` `   . JJLLLLL- > r$+ rpqqqEGJ ^ ^!ZZQ//
dPWX\P]P]
DJJLL%1K8LMM  IF  4H  4HTXT`T`  b{  U|  U|  UE  UE  UG  UG  4H  4H  4H  -I  -IJ~ 3&!8!8)*55,../11022$TH_c_m_yqy  CG  CN  ]a  ]n  x|  xD  E  E  EF9!/9 99?9L9 9W]Wk9 9"09 9:@:L9 9_e_u9 9 v~..44669 9   *1111JJLLLLDJJLLLL|--- ??H%%%x'((	T"""F 8 8 $

3 2 2)0v||~~&&:@  NDMU[D[D[.v666a~  @D  @M  bN  bNHI/ K K.thT_gkgq{  |H  I  I  Iy#)#5y yGMG\y ygmg{y y$1y y<B<Py yY_Yky y !' 4y y ?E>Py y \__e_m[n[n[t[t[v[vy y    	0B+I11JJ		JJLLLLDJJLLLL|111 ??H%%%x'((	T"""}	))ZZZZZZWWWWWW  'k  nr  nx  mz  {  {  D  D  F  F.///(V# & &E33D%
:KUU\eoso{M|M|M|}}H.'991!04VVV! A  xPSTZP[P[  x  xfm  x  x  zB  x  x  LR  x  x  ]`  ae  am  ]n  ]n  ]t  ]t  ]v  ]v  x  x  y  y  y")qq)
 JJLLLL	 +4/:K:KV[cgcmw{  xD  E  E  EF  efNa  e  elr  mA  e  e  MS  Ma  e  e  kq  k}  e  e  HK  LR  LZ  H[  H[  Ha  Ha  Hc  Hc  e  e  f  f  f*1111JJLLLLDJJLLLL|--- ??H%%%x'((	T"""G< gD$4$@$@<<(Z[[ddff e eCHsSbOcdddGGe\ g<<(UVV__aa g gCHsS]`efffGG  pT5E  p  pV]  p  pfjfp  p  p  }A  }J  p  p  UX  Y]  Ye  Uf  Uf  Ul  Ul  Un  Un  p  p  q  q  qJJLLLLLDJJLLLL|GGG ??H%%%x'((%	T"""F 8 8 $

3 2 2)0v||~~&&|55554=TZCZCZ26::'))$2G)ghhhh8GG04@V0V0V[_[kot[t[tWe,,  GK  GW  [c  Gc  Gc  |C  |C  im  iy  {zMFI,  .% +#!%!2#"n* L
 
 
 f%%%	0B+I11JJ	/3|?U/U/U++[qyV%7 y yI^ y yioi} y y$1y y<B<Py yY_Yky y & 4y y>D>Py y[^_e_m[n[n[t[t[v[vy yy    JJLLLLDJJLLLL|333 ??H%%%x'((	T"""<<
 
 hjj  54t444Cz%+4:+&6tCX\XcdddG@%,-@%A@ @\cd}\~@ @%,-@%A@ @[bc{[|@ @ ")!9@ @ W^^yVz@ @ $++<#=	@ @   JJLLLLLDJJLLLL|444 ??H%%%x'((	T"""2 @FF:>:Lg4666ReRgRgH0QUQ\dhdnx|  yE  F  F  FFH# [ $ 2  !Jc(:P:\  `I  ;I  7J  7J9$MZZZ9%+%=9 9QWQh9 9.9 98>8P9 9W]Wl9 9 281U9 9 "(!F	9 9 dj  dJ	9 9
 06/Q9 9
 _e^9 9 4<9 9 %(X$7$7$=$=$?$?9 9 x@  XGW_`rWsWs  FG9 9 |D  ^K  ^f  gw  ^x  ^x  JK9 9 v~..44669 9
 
 
 JJLLLLLDJJLLLL|000 ??H%%%x'((	T"""4T::GH( k $ 7  !J3x?U?a  eI  @I  <J  <J7-_c_ijjj
o$+,>$?
o 
oLST_L`
o 
o&}5
o 
oAHAT
o 
o 077T/U
o 
o &--@%A	
o 
o ZaawYx	
o 
o
 .55P-Q
o 
o .55P-Q
o 
o *-T(^^)<)<)B)B)D)D
o 
o NV-\X6H-I-I[\
o 
o KS,YH5E,F,FXY
o 
o +.d83bIa@b.c.c*d*d*j*j*l*l
o 
o   JJLLLLLDJJLLLL|444 ??H%%%HJJ&&((	DDDDD$ 	  MM),,,LL!uvvvv!   Dx'((	T"""*4TXT`aaaFk k k k k k$*$;k k k kHNHXk k k khnh{k k k k%1k k k kBHBVk k k k %+$;k k k k HNk k k k nt  nHk k k k $-	k k k k FLE`	k k k k lrky	k k k k
 #&di.."6"6"8"8k k k k
 FIIYEZEZE`E`EbEbk k k k
 uxx~  yN  uO  uO  uU  uU  uW  uWk k k k &,%=k k k k V\Upk k k k #Ok k k k 6<]k k k k NQQWQ_M`M`MfMfMhMhk k k k	 	 	 ,111,JJLLLLDJJLLLL|;;; ??H%%%x'((	T"""3D4=X\Xbjnjt  C  K  UY  Ua  b  b  bF9 9 9 9 9 9"%f&;"<"<"B"B"D"D9 9 9 9QTU[UeQfQfQlQlQnQn9 9 9 9w}  xD9 9 9 9$*$;9 9 9 9 !' 39 9 9 9 CIBT9 9 9 9 $*#9	9 9 9 9 LRK`	9 9 9 9
 (.'A9 9 9 9
 X^Wp9 9 9 9 $*#99 9 9 9 FL_9 9 9 9 ,2+I9 9 9 9 V\Ud9 9 9 9 oun{9 9 9 9 v~..44669 9 9 9
 
 
 ,111,JJLLLLDJJLLLL|+++ ??H%%%x'((	T""". $ 4"0  F 99 9=C=X9 9&,&?9 9 5;4[9 9 4:3Y	9 9
 $*#99 9 #O9 9 6<]9 9 v~..44669 9	 	 	 ,111,JJLLLLDJJLLLL|*** ??H%%%"$ .:hjj
 
 

 	E!-E E>D>RE EmE E171BE E	
 	
 	

 q|&&4	??dhjjQQQ&!-& &>D>R& &&-((..00& &?B6CU?V?V?\?\?^?^& & m& &	
 	
 	
 M?f&8?qqa?|+++ ??H%%%#T-..$hjj	
 
 
 	7!-7 7<B<N7 7FO,,22447 7	
 	
 	

 q ,+s)  Ak= =lBp	 	p(A s s5B*| |./C7AA< A<ABCB(AM	 FF!AM	 M	AMN D=AS2 S2ATU	C;A[: YB
A[: [:A\]DAa+ a+Abc GAj4 j4Ak
lB=Ao oAo5p6F Aw wAw#x$EA~ ~A~.@+BA	A	BAABAA/F%BH* H*BI JE6BP PBP#Q$B>BT8 T8BU__main__)r1   r2   r:   )rF   rG   r1   r2   )I
__future__r   r   r   r   dataclassesr   decimalr   pathlibr   jarvis_finance.config.settingsr   r   jarvis_finance.fx.providersr	   r
   r   jarvis_finance.fx.ratesr   r   ,jarvis_finance.imports.instrument_candidatesr   r   jarvis_finance.market.providersr   r    jarvis_finance.market_data.cacher   r   %jarvis_finance.market_data.candidatesr   r   r   r   r   r   r   "jarvis_finance.market_data.catalogr   !jarvis_finance.market_data.pricesr   r   r   #jarvis_finance.quality.data_qualityr   !jarvis_finance.quality.git_safetyr    r!   jarvis_finance.runtime.backupr"   r#   r$   .jarvis_finance.services.crypto_market_recoveryr%   r&   r'   r(   ,jarvis_finance.services.truewealth_valuationr)   r*   r+   jarvis_finance.storage.databaser,   r-   !jarvis_finance.storage.migrationsr.   r/   r0   rE   r  __name__
SystemExitr   rA   r?   <module>r     s*   " " " " " "   				                   M M M M M M M M c c c c c c c c c c R R R R R R R R        S R R R R R R R                         P O O O O O         
 J I I I I I D D D D D D D D ^ ^ ^ ^ ^ ^ ^ ^ ^ ^                    
 G F F F F F F F         Q Q Q QC
 C
 C
 C
 C
L z
*TTVV

 rA   