
    *fj                        d Z ddlmZ ddlZddlZddlmZmZ ddlZddl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 d
Zg dZddZdddZd dZd!dZd"dZedk    r e e                      dS )#zJSprint-9 PostFinance mapping/baseline activation with deterministic gates.    )annotationsN)UTCdatetime)Path)Any)confirm_ingestion'confirm_postfinance_instrument_mappingspreview_ingestion)connect)apply_migrationsz
2026-05-14))ADBEz
Adobe Inc.US00724F1012stockUSDr   NASDAQ)ANETzArista Networks Inc.US0404132054r   r   r   NYSE)APCz
Apple Inc.US0378331005r   EURzAPC.FFSX)APPzAppLovin Corp.US03831W1080r   r   r   r   )AVGOzBroadcom Inc.US11135F1012r   r   r   r   )BABAzAlibaba Group Holding ADRUS01609W1027r   r   r   r   )CRWDzCrowdStrike Holdings Inc.US22788C1053r   r   r   r   )GOOGzAlphabet Inc.US02079K1079r   r   r!   r   )MCDzMcDonald's Corp.US5801351017r   r   r#   r   )MSFTzMicrosoft Corp.US5949181045r   r   r%   r   )MUzMicron Technology Inc.US5951121038r   r   r'   r   )NOWzServiceNow Inc.US81762P1021r   r   r)   r   )NVDAzNVIDIA Corp.US67066G1040r   r   r+   r   )OPKzOPKO Health Inc.US68375N1037r   r   r-   r   )PANWzPalo Alto Networks Inc.US6974351057r   r   r/   r   )TPLzTexas Pacific Land Corp.US88262P1021r   r   r1   r   )TSLAz
Tesla Inc.US88160R1014r   r   r3   r   )UNHzUnitedHealth Group Inc.US91324P1021r   r   r5   r   )ARKGzARK Genomic Revolution ETFUS00214Q3020etfr   r7   CBOE)BCHEz.Invesco CoinShares Global Blockchain UCITS ETFIE00BGBN6P67r9   r   zBCHN.LLSE)IUITz7iShares S&P 500 Information Technology Sector UCITS ETFIE00B3WJKG14r9   r   zIUIT.Lr=   )WTAIz4WisdomTree Artificial Intelligence UCITS ETF USD AccIE00BDVPNG13r9   r   zWTAI.Lr=   returnlist[dict[str, str]]c                 $    d t           D             S )Nc                8    g | ]\  }}}}}}}|||||d d|||d
S )unknownfmp)
source_symbolinstrument_nameisinasset_classsource_currencysource_venueprovidervaluation_symbolvaluation_venuevaluation_currency ).0rH   namerJ   rK   currencyrO   rP   s           )scripts/sprint9_postfinance_activation.py
<listcomp>zdecisions.<locals>.<listcomp>0   s`        `M4{H>NP_ +#&'% 0."*	
 	
      )MAPPINGSrR   rX   rV   	decisionsrZ   /   s'      dl   rX   rawbytesowner_resolutionslist[dict[str, str]] | Nonedict[str, object]c                    ddd t           t           t          j        t                                                    dt          j        |                               d          t                      d|pg dS )Npostfinance_etrading	portfolioz%postfinance-portfolio-2026-05-14.docxasciiT)
source_key
scope_kind
account_idperiod_from	period_todata_cutoff	file_namecontent_base64instrument_mappings"allow_manual_baseline_supersession.owner_confirmed_manual_placeholder_resolutions)	AS_OFr   nowr   	isoformatbase64	b64encodedecoderZ   )r[   r]   s     rV   requestru   A   sj    ,!|C((2244< *3//66w??({{.2:K:Qr  rX   previewdict[str, Any]Nonec                p   | d         }| d         }| d         }|d         s|d         rt          d|           |d         dk    s|d	         dk    rt          d
| d|           |d         dk    s|d         dk    rt          d|           |d         |d         k    rt          d|           d S )Ncountsexpected_changescash_reconciliationblocked	ambiguouszBaseline preview blocked: new/   recordsz*Expected exactly 47 new baseline records: , 	positions   manual_supersessions   z-Expected 22 positions and two supersessions: source_total_identity_chfreported_document_total_chfz,Source aggregates do not reconcile exactly: )RuntimeError)rv   rz   expectedreconciliations       rV   preview_gatesr   Q   s    XF)*H23Ni BF;/ B@@@AAAe}hy1R77\\\RZ\\]]]""h/E&F!&K&KU8UUVVV12nEb6cccZ.ZZ[[[ dcrX   c                \    | d         | d         | d         | d         | d         | d         dS )N
preview_idsource_revisionrz   r{   r|   quality_impact)r   r   rz   r{   r|   r   rR   )rv   s    rV   summaryr   _   sE    l+"#45(##$67&'<=!"23  rX   intc                    t          j                    } |                     dd           |                     dd           |                     ddd           |                     dd	
           |                                 }t	          |j                                                  }t          |j                  }t          |           |j
        r8t          j        t	          |j
                                                            ng }t          |t                    st!          d          t#          ||          }|j        dk    r;t'          ||          }|d         dk    s|d         dk    rt)          d|           n|                    d                    d                    d t0          D                                 t3          d t0          D                                                                 d         }|dk    rt)          d|           t7          ||          |j        dk    r6t9          t          j        dt=                    ddd                     dS t?                     |j        dk    r3t9          t          j        t=                    dd                     dS i |fddD             ddi}tA          ||          }tA          ||          }	|	!                    d          r,|	!                    d          |!                    d          k    rt)          d | d!|	           t=                    ||	d"}
t9          t          j        |
dd                     dS )#Nz--dbT)requiredz
--documentz--mode)mappingsrv   confirm)choicesr   z--owner-resolutionzQPath outside the repository to an owner-confirmed candidate resolution JSON array)helpz%Owner resolution must be a JSON arrayr   mapping_countr   instrument_countzMapping gate failed: zSELECT COUNT(DISTINCT i.isin)
               FROM instrument_price_mappings m
               JOIN instruments i ON i.instrument_id=m.instrument_id
               WHERE m.provider='fmp' AND m.mapping_status='mapped'
                 AND i.isin IN ({}),c              3     K   | ]}d V  dS )?NrR   )rS   _s     rV   	<genexpr>zmain.<locals>.<genexpr>   s"      6M6Mqs6M6M6M6M6M6MrX   c              3  &   K   | ]}|d          V  dS )r   NrR   )rS   values     rV   r   zmain.<locals>.<genexpr>   s&      11u%(111111rX   r   z=Expected 22 approved mappings before baseline preview, found )r   rv   r   )indent	sort_keysrv   c                "    i | ]}||         S rR   rR   )rS   keyrv   s     rV   
<dictcomp>zmain.<locals>.<dictcomp>   s+       3   rX   )r   confirmation_idpreview_created_atr   input_fingerprintpayload_hashr   
idempotentbatch_idz2Immediate confirmation replay was not idempotent: r   )rv   r   confirm_replay)"argparseArgumentParseradd_argument
parse_argsr   document
read_bytesr   dbr   owner_resolutionjsonloads	read_text
isinstancelist
ValueErrorru   moder	   r   executeformatjoinrY   tuplefetchoner
   printdumpsr   r   r   get)parserargsr[   connr]   payloadresultmappedconfirmationreplayoutputrv   s              @rV   mainr   j   s   $&&F
...
t444
*LW[\\\
`     D
t}


(
(
*
*C47DTOSOdl
4(=#>#>#H#H#J#JKKKjl'.. B@AAAc,--GyJ8wGG/"b((F3E,F",L,L?v??@@@ -M ' (.vchh6M6MH6M6M6M.M.M'N'N1111111
 
 (**Q R<<g_egghhhg..GyJdjbWW5E5EFFq\`aaabbbq'yIdj))!tDDDEEEq
    )
    	4 L t\22Ft\22F::l## dvzz*'='=JAWAW'W'WbPVbbZ`bbccc ))fPVWWF	$*VA
6
6
67771rX   __main__)rB   rC   )N)r[   r\   r]   r^   rB   r_   )rv   rw   rB   rx   )rv   rw   rB   r_   )rB   r   )__doc__
__future__r   r   rr   r   r   r   pathlibr   typingr   &jarvis_finance.services.portfolio_datar   r	   r
   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   ro   rY   rZ   ru   r   r   r   __name__
SystemExitrR   rX   rV   <module>r      s{   P P " " " " " "   " " " " " " " "                      
 4 3 3 3 3 3 > > > > > >  4   $     \ \ \ \   6 6 6 6r z
*TTVV

 rX   