
    mj                        d dl mZ d dlZd dlmc mZ d dlm	Z	 d dl
mZmZ d dlZd dlmZ ddZdd	ZdddZd Zd Zd ZdS )    )annotationsN)BytesIO)ZipFileZipInfo)postfinance_documentsreturnstrc                 J   g d} t          d          D ]}|                     d|dz   dd            |                     ddg           t          dd	          D ]}|                     d|dz   dd            |                     d
           d                    |           S )N)z$Portfolio  Stand 27/07/2026 09:14:30u   Offene Aufträge 0z$EUR  1.0000  100.00  x  x  100.00  xz$USD  1.0000  100.00  x  x  100.00  xz&Gesamt CHF  200.00  2'200.00  2'400.00zUProdukt  Anzahl  Einstandskurs  Einstandswert  Differenz  Kurs  x  Wert CHF  Anteil %Aktien   zSynthetic Asset    02dz%  1  50  50  -  100 CHF  x  100  4.17z+Zwischensumme Aktien in CHF  0  0  1'100.00ETFs   z)Zwischensumme ETFs in CHF  0  0  1'100.00
)rangeappendextendjoin)linesindexs     Q/home/agent/.hermes/repos/FinanceManager/tests/unit/test_postfinance_documents.pyoverview_textr      s      E r ^ ^\	\\\\]]]]	LL?HIIIr2 ^ ^\	\\\\]]]]	LL<===99U    c                     dS )Nu   Transaktionsbeleg
Börsentransaktion: Kauf
Unsere Referenz: 100
Kontonummer: 123456
Ausführungsdatum: 01.07.2026
Valutadatum: 03.07.2026
Synthetic Asset 01 ISIN: CH0000000000
Anzahl  Preis  Betrag
1  50  CHF  50
Total CHF 50
 r   r   r   
trade_textr      s    
 
r   !20260701_Borsenabrechnung_100.pdf
   %PDF-tradenamerawbytesc                    t                      }t          |d          5 }|                    | |           d d d            n# 1 swxY w Y   |                                S )Nw)r   r   writestrgetvalue)r    r!   outputarchives       r   	zip_bytesr)   ,   s    YYF			 $s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $??s   AA	Ac                   |                      t          dd            t          j        t                      d          }|j        }t          |          }d}||k    }|st          j        d|fd||f          dt          j	                    v st          j
        t
                    rt          j        t
                    nddt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          d	z  }d
d|iz  }t          t          j        |                    d x}x}x}}g }|j        }t          |          }d}	||	k    }
|
}|
r|j        d         }|j        }d}||k    }|}|st          j        d|
fd||	f          dt          j	                    v st          j
        t
                    rt          j        t
                    nddt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          t          j        |	          dz  }dd|iz  }|                    |           |
rst          j        d|fd||f          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }|                    |           t          j        |d          i z  }dd|iz  }t          t          j        |                    d x}x}x}x}x}
x}	x}x}x}}g }|j        }|j        }t          |          }
d}|
|k    }|}|r'|j        }|j        }t          |          }d}||k    }|}|s[t          j        d|fd|
|f          dt          j	                    v st          j
        t
                    rt          j        t
                    nddt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          t          j        |
          t          j        |          dz  }dd|iz  }|                    |           |rt          j        d|fd||f          dt          j	                    v st          j
        t
                    rt          j        t
                    nddt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }d d!|iz  }|                    |           t          j        |d          i z  }d"d#|iz  }t          t          j        |                    d x}x}x}x}x}
x}x}x}x}x}x}}|j        }|j        } |j        }|j        }	|j        }!|!j        }|	|z   }| |k    }"|"srt          j        d|"fd$| |f          dt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |           dt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |	          dt          j	                    v st          j
        |          rt          j        |          ndt          j        |!          t          j        |          d%	z  }#d&d'|#iz  }$t          t          j        |$                    d x}x} x}"x}x}	x}!x}}|j        }|j        } d}| |k    }"|"st          j        d|"fd(| |f          dt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |           t          j        |          d)z  }%d*d+|%iz  }&t          t          j        |&                    d x}x} x}"}d S ),N	_pdf_textc                N    | dk    rt                      dfnt                      dfS )Nr   r      )r   r   r!   s    r   <lambda>zHtest_synthetic_zip_pdf_bundle_is_parsed_and_reconciled.<locals>.<lambda>4   s,    cUbNbNb*,,9J9Jivixixz{h| r      %PDF-overviewr   )==)zO%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.documents
})
} == %(py8)slenresult)py0py1py3py5py8zassert %(py10)spy10r   buy)zM%(py7)s
{%(py7)s = %(py2)s(%(py5)s
{%(py5)s = %(py3)s.events
})
} == %(py10)s)py2r6   r7   py7r9   z%(py12)spy12)z6%(py17)s
{%(py17)s = %(py15)s.event_type
} == %(py20)s)py15py17py20z%(py22)spy22zassert %(py25)spy25r      )zn%(py9)s
{%(py9)s = %(py2)s(%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.snapshot
}.positions
})
} == %(py12)s)r;   r6   r7   r<   py9r=   z%(py14)spy14)zq%(py23)s
{%(py23)s = %(py16)s(%(py21)s
{%(py21)s = %(py19)s
{%(py19)s = %(py17)s.snapshot
}.cash
})
} == %(py26)s)py16r?   py19py21py23py26z%(py28)spy28zassert %(py31)spy31)z%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.snapshot
}.total_value_chf
} == (%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s.snapshot
}.securities_total_chf
} + %(py15)s
{%(py15)s = %(py13)s
{%(py13)s = %(py11)s.snapshot
}.cash_total_chf
}))	r4   r;   py4py6r8   r9   py11py13r>   zassert %(py18)spy18)zQ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.snapshot
}.open_orders
} == %(py7)s)r4   r;   rM   r<   zassert %(py9)srD   )setattrparserparse_postfinance_bundler)   	documentsr2   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationevents
event_typer   _format_boolopsnapshot	positionscashtotal_value_chfsecurities_total_chfcash_total_chfopen_orders)'monkeypatchr3   @py_assert2@py_assert4@py_assert7@py_assert6@py_format9@py_format11@py_assert1@py_assert9@py_assert8@py_assert0@py_assert14@py_assert16@py_assert19@py_assert18@py_format13@py_format21@py_format23@py_format24@py_format26@py_assert11@py_assert10@py_assert20@py_assert22@py_assert25@py_assert24@py_format15@py_format27@py_format29@py_format30@py_format32@py_assert3@py_assert12@py_assert5@py_format17@py_format19@py_format8@py_format10s'                                          r   6test_synthetic_zip_pdf_bundle_is_parsed_and_reconciledr   3   s	   -|-|}}},Y[[:JKKF%3  %A% A%%%%%%%%%% A%%%%%%%%%%%%3%%%%%3%%%%%%%%%%%%%v%%%%%v%%%%%%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%KKv}K3}KK"KKKKKv}Q'7K'7'BKeK'Be'KKKKKKKKKKKKKKKKKKKKKKKK3KKKKK3KKKKKKKKKKKKKvKKKKKvKKKKKK}KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK'BeKKKKK'7KKKK'BKKKKeKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKRRvR(R3())RRR)R/RRRRRR8LRC8L4M4MRQRR4MQR4RRRRRRRRRRRR)RRRRRRRRRRRRR3RRRRR3RRRRRRRRRRRRRvRRRRRvRRRRRRRRRR(RRRR)RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR4MQRRRRRRRRRRRRRCRRRRRCRRRRRRRRRRRRRRRRRRRRRRRRRRRR8LRRRR4MRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR?s?*sfoso.RsU[UdsUdUss.RUs.ss*.sssssssssss*.sssssssssssss6sssss6ssssss?ssss*sssssssssssfsssssfssssssossss.RsssssssssssU[sssssU[ssssssUdssssUssssssssssssssssssssssssssssssssssssss?+?&+!+&!++++++++++&!++++++++++++6+++++6++++++?++++&++++!+++++++++++++++++++++++++++++++r   c                d   |                      t          dd            t          j        t          d          5  t          j        t          d          d           d d d            n# 1 swxY w Y   t                      }t          |d          5 }t          d          }d	|_
        |                    |d
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |                                d           d d d            d S # 1 swxY w Y   d S )Nr+   c                "    t                      dfS )Nr   r   _raws    r   r/   zBtest_zip_path_traversal_and_symlink_are_rejected.<locals>.<lambda>>       =??A:N r   unsafematchz../escape.pdfr0   r$   zlink.pdfl     C s	   %PDF-link)rR   rS   pytestraises
ValueErrorrT   r)   r   r   r   external_attrr%   r&   )rh   r'   r(   infos       r   0test_zip_path_traversal_and_symlink_are_rejectedr   =   s   -N-NOOO	z	2	2	2 V V'	/(B(BDTUUUV V V V V V V V V V V V V V VYYF			 -z"",|,,,- - - - - - - - - - - - - - - 
z	2	2	2 M M'(9(9;KLLLM M M M M M M M M M M M M M M M M Ms5   #A((A,/A,-C

CC0(D%%D),D)c                   |                      t          dd            t          j        t          d          5  t          j        t          d          d           d d d            n# 1 swxY w Y   |                      t          dd            t          j        t          d          5  t          j        t                      d           d d d            d S # 1 swxY w Y   d S )	Nr+   c                "    t                      dfS )Nr-   r   r   s    r   r/   zKtest_preview_parser_rejects_incomplete_or_non_pdf_sources.<locals>.<lambda>K   r   r   zunsupported entryr   znote.txtr0   c                2    | dk    rt                      dfndS )Nr   r   )z 27/07/2026 09:14:30
no positionsr   )r   r.   s    r   r/   zKtest_preview_parser_rejects_incomplete_or_non_pdf_sources.<locals>.<lambda>N   s$    cUbNbNb*,,9J9J  iQ r   zcomplete snapshot)rR   rS   r   r   r   rT   r)   )rh   s    r   9test_preview_parser_rejects_incomplete_or_non_pdf_sourcesr   J   s   -N-NOOO	z)<	=	=	= Q Q'	*(=(=?OPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q  .Q  .Q  R  R  R	z)<	=	=	= G G'	5EFFFG G G G G G G G G G G G G G G G G Gs#   #A((A,/A,+"CC!C)r   r	   )r   r   )r    r	   r!   r"   r   r"   )
__future__r   builtinsrX   _pytest.assertion.rewrite	assertionrewriterV   ior   zipfiler   r   r   jarvis_finance.importsr   rS   r   r   r)   r   r   r   r   r   r   <module>r      s    " " " " " "                     $ $ $ $ $ $ $ $  B B B B B B   &       , , ,
M 
M 
MG G G G Gr   