
    gj$                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dl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mZ dZdZd dZd!dZd"dZddd#dZd"dZd$dZd%dZd&dZedk    r e             dS dS )'    )annotationsN)Path)load_settings)apply_migrationsget_schema_version(480d7a1b72a950e864c4bb021d3f58af8f8c15f9.   pathr   returnc                    |                                  }|t          d          k    st          d          |j        vrt          d|           |S )Nz/tmpz%CI path must be isolated below /tmp: )resolver   parentsRuntimeError)r
   resolveds     #scripts/ci_portfolio_phase3_gate.py_assert_tmp_pathr      sO    ||~~H4<<4<<x7G#G#GM8MMNNNO    sqlite3.Connectionc                P    t          j        |           }t           j        |_        |S )N)sqlite3connectRowrow_factory)r
   
connections     r   _connectr      s!    &&J$[Jr   r   strc                v    t          |                     d                                          d                   S )NzPRAGMA integrity_checkr   )r   executefetchone)r   s    r   
_integrityr    "   s0    z!!":;;DDFFqIJJJr   F)include_performance_metadatar!   boolc          	        i }dD ]}d |                      d| d          D             }||dk    r|sd |D             d                    d D                       }|                      d	| d
| d|                                           }fd|D             ||<   t          j        |ddt
                                                    }t          j        |          	                                S )N)	platformsaccountsc                    g | ]
}|d          S     .0rows     r   
<listcomp>z _seed_digest.<locals>.<listcomp>)   s    YYYc3q6YYYr   PRAGMA table_info("")r%   c                    g | ]
}|d k    |S )performance_includedr)   r+   columns     r   r-   z _seed_digest.<locals>.<listcomp>,   s#    aaa6J`@`@`@`@`@`r   , c              3  "   K   | ]
}d | d V  dS "Nr)   r2   s     r   	<genexpr>z_seed_digest.<locals>.<genexpr>-   s*      JJv]]]]JJJJJJr   SELECT  FROM "" ORDER BY c                .    g | ]fd D             S )c                     g | ]
}|         S r)   r)   r+   r3   r,   s     r   r-   z+_seed_digest.<locals>.<listcomp>.<listcomp>/   s    FFF63v;FFFr   r)   )r+   r,   selected_columnss    @r   r-   z _seed_digest.<locals>.<listcomp>/   s0    WWW3FFFF5EFFFWWWr   T,:ensure_ascii
separatorsdefault
r   joinfetchalljsondumpsr   encodehashlibsha256	hexdigest)	r   r!   payloadtablecolumnsselectedrowsencodedr?   s	           @r   _seed_digestrV   &   s+   -/G* X XYYZ%7%78We8W8W8W%X%XYYY"J'CaaWaaa99JJ9IJJJJJ!!"YH"Y"YU"Y"Yx"Y"YZZcceeWWWWRVWWWjt
TWXXX__aaG>'"",,...r   c           	        i }d |                      d          D             }|D ]}d |                      d| d          D             s(d                    d D                       }|                      d| d	| d
|                                           }fd|D             ||<   t          j        |ddt
                                                    }t          j        |          	                                S )Nc                8    g | ]}t          |d                    S )r   r   r*   s     r   r-   z$_database_digest.<locals>.<listcomp>6   s2        	CF  r   z\SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY namec                8    g | ]}t          |d                    S r'   rY   r*   s     r   r-   z$_database_digest.<locals>.<listcomp>=   s"    ^^^33s1v;;^^^r   r.   r/   r4   c              3  "   K   | ]
}d | d V  dS r6   r)   r2   s     r   r8   z#_database_digest.<locals>.<genexpr>@   s*      AAv]]]]AAAAAAr   r9   r:   r;   c                .    g | ]fd D             S )c                     g | ]
}|         S r)   r)   r>   s     r   r-   z/_database_digest.<locals>.<listcomp>.<listcomp>B   s    ===63v;===r   r)   )r+   r,   rR   s    @r   r-   z$_database_digest.<locals>.<listcomp>B   s/    NNN#====W===NNNr   Tr@   rC   rG   )r   rP   tablesrQ   rS   rT   rU   rR   s          @r   _database_digestr_   4   s=   -/G %%j
 
  F  O O^^**<*<=\SX=\=\=\*]*]^^^ 	99AAAAAAA!!"YH"Y"YU"Y"Yx"Y"YZZcceeNNNNNNNjt
TWXXX__aaG>'"",,...r   repo
export_dirdatabaseNonec                   t          j        ddt          |           dt          g          }|                    d           t          j        t          j        |          d          5 }|	                                D ]`}||j
        z                                  }|                                |j        vr'||                                k    rt          d          a|                    |           d d d            n# 1 swxY w Y   d	}t          j                                        }t          |d
z            |d<   t          j        t&          j        d|t          |          g||d           d S )Ngitz-CarchiveTr   zr:)fileobjmodezUnsafe path in Git archivea  
import sqlite3
import sys
from jarvis_finance.storage.migrations import apply_migrations, get_schema_version

path = sys.argv[1]
conn = sqlite3.connect(path)
conn.row_factory = sqlite3.Row
apply_migrations(conn)
assert get_schema_version(conn) == 40
conn.execute(
    "INSERT INTO platforms(platform_id,name,platform_type,country,default_currency,is_active,notes,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?)",
    ("ci-platform", "Synthetic CI Platform", "bank", "CH", "CHF", 1, "synthetic", "2026-01-01T00:00:00Z", None),
)
conn.execute(
    "INSERT INTO accounts(account_id,platform_id,account_name,account_type,currency,performance_included,is_health_reserve,is_active,notes,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?)",
    ("ci-account", "ci-platform", "Synthetic CI Account", "brokerage", "CHF", 1, 0, 1, "synthetic", "2026-01-01T00:00:00Z", None),
)
conn.commit()
assert conn.execute("PRAGMA integrity_check").fetchone()[0] == "ok"
print("sprint5_fixture_schema=40")
src
PYTHONPATHz-c)cwdenvcheck)
subprocesscheck_outputr   SPRINT5_COMMITmkdirtarfileopenioBytesIO
getmembersnamer   r   r   
extractallosenvironcopyrunsys
executable)	r`   ra   rb   rf   bundlememberdestinationcodeenvironments	            r   _create_sprint5_databaser   G   s   %udCIIy.&YZZGT"""	bj11	=	=	= &'')) 	A 	AF%3<<>>K!!##;+>>>;R\RdRdRfRfCfCf"#?@@@*%%%& & & & & & & & & & & & & & &D, *//##K #J$6 7 7KN	tS]]3	     s   *BDDDrootc                $   dt          |dz            t          |dz            d}t          | |          }|j        |dz                                  k    sJ dddd}	 t          | |           t	          d          # t
          $ r Y d S w xY w)	Ntestzguard-runtimezguard.sqlite3)JARVIS_FINANCE_ENVJARVIS_FINANCE_RUNTIME_DIRJARVIS_FINANCE_DB_PATH)	repo_rootr{   z)/home/agent/jarvis_runtime/finance-systemz>/home/agent/jarvis_runtime/finance-system/data/finance.sqlite3z/Productive paths were not rejected in test mode)r   r   db_pathr   AssertionError
ValueError)r`   r   acceptedsettingsrejecteds        r   _verify_settings_guardr   p   s    $&)$*@&A&A"%d_&<"="= H
 tX>>>H 6??AAAAAA %&Q"b H
Ph7777 NOOO    s   !B 
BBc                 f
   t          t                                                    j        d         } t	          t          t
          j                            dd                              }|                                rt          j
        |           |                    d           t          | |           |dz  }t          |          }t          |           |                                 t!          |          t"          k    sJ t%          |          dk    sJ t'          d |                    d	          D                       }t+          |d
                                       d          dk    sJ |                    d                                          d         dk    sJ dD ]9}|                    d| d                                          d         dk    sJ :|                                 |dz  }t3          | |dz  |           t          |          t!                    dk    sJ t5                    }                    d                                          d         dk    sJ fddD             }t                                                      t!                    t"          k    sJ t%                    dk    sJ t5                    |k    sJ                     d                                          d         dk    sJ                     d                                          }	t7          |	d d                   dk    sJ                     d|	d         f                                          d         dk    sJ fd|D             }
|
|k    sJ dD ]9}                    d| d                                          d         dk    sJ :t9                    }                    d                                          d         }t                                                      t!                    t"          k    sJ t%                    dk    sJ t9                    |k    sJ                     d                                          d         |k    sJ                                  t;          d           t;          d t"           d!           t;          d"t"           d#| d$           t;          d%           d S )&Nr(   JARVIS_FINANCE_CI_ROOTz/tmp/financemanager-phase3-ciTrg   zempty.sqlite3okc              3  2   K   | ]}|d          dk    |V  dS )r(   r1   Nr)   r*   s     r   r8   zmain.<locals>.<genexpr>   s:        QSiIiIiIiIiIiIi r   zPRAGMA table_info("accounts")   z()0zqSELECT COUNT(*) FROM sqlite_master WHERE type='trigger' AND name='accounts_performance_insert_requires_exclusion'r   )portfolio_ingestion_batchesportfolio_ingestion_itemsmarket_data_runsbenchmark_snapshotsportfolio_analysis_snapshots!performance_scope_classificationsperformance_cashflow_coverageSELECT COUNT(*) FROM "r7   zsprint5.sqlite3zsprint5-source(   zGSELECT performance_included FROM accounts WHERE account_id='ci-account'c                t    i | ]4}|                     d | d                                          d         5S r   r7   r   r   r   r+   rQ   sprint5s     r   
<dictcomp>zmain.<locals>.<dictcomp>   sT        	w@@@@AAJJLLQO  r   )r$   r%   transactionsportfolio_valuation_snapshotszSELECT included,classification_role,decision_version,audit_id
           FROM performance_scope_classifications WHERE account_id='ci-account'   )r   #not_in_investment_performance_scopeinvestment_performance_scope_v1zbSELECT COUNT(*) FROM audit_log WHERE audit_id=? AND entity_type='performance_scope_classification'c                t    i | ]4}|                     d | d                                          d         5S r   r   r   s     r   r   zmain.<locals>.<dictcomp>   sT        	w@@@@AAJJLLQO  r   )r   r   r   r   r   z&SELECT COUNT(*) FROM schema_migrationszphase3_migration_gate=PASSzempty_schema=zL integrity=ok ingestion_analysis_scope_rows=0 default_performance_included=0zsprint5_schema=40_to_z integrity=ok business_digest=z< scope_normalized=true audit_bound=true second_run_noop=truez2settings_guard=PASS production_paths_rejected=true)r   __file__r   r   r   rz   r{   getexistsshutilrmtreerr   r   r   r   commitr   EXPECTED_SCHEMAr    nextr   r   stripr   closer   rV   tupler_   print)r`   r   
empty_pathemptyaccount_defaultrQ   sprint5_pathdigest_beforecounts_beforeclassificationcounts_afterfirst_digestfirst_migration_rowsr   s                @r   mainr      s   >>!!##+A.DD0HJi!j!jkkllD{{}} dJJtJ4&&&'JZ  EU	LLNNNe$$7777e$$$$  }}%DEE    O q!""((..#5555=={ hjj    S S
 }}>e>>>??HHJJ1MQRRRRRR	KKMMM++LT4*:#:LIII|$$Gg&&",,,, ))M??Q hjj      _  M WNNg&&/9999g$&&&&  M1111??Q hjj    __	S  hjj  #$$ )    
 ??l		  hjj       "  L =(((( U U @@@@AAJJLLQOSTTTTTT#G,,L"??+STT]]__`abWNNg&&/9999g$&&&&G$$4444??CDDMMOOPQRVjjjjjMMOOO	
&'''	
w/
w
w
wxxx		F 	F 	F} 	F 	F 	F   

>?????r   __main__)r
   r   r   r   )r
   r   r   r   )r   r   r   r   )r   r   r!   r"   r   r   )r`   r   ra   r   rb   r   r   rc   )r`   r   r   r   r   rc   )r   rc   )
__future__r   rM   ru   rJ   rz   r   r   ro   r~   rs   pathlibr   jarvis_finance.config.settingsr   !jarvis_finance.storage.migrationsr   r   rq   r   r   r   r    rV   r_   r   r   r   __name__r)   r   r   <module>r      s   " " " " " "  				  				       



        8 8 8 8 8 8 R R R R R R R R;      K K K K Z_ / / / / / // / / /&& & & &RP P P P,Y@ Y@ Y@ Y@x zDFFFFF r   