Ë
    f€£j;  ã                  ó¬  — U d dl mZ d dlmZ d dlmZ d dlZ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  e	j$                  d	«      Z e	j$                  d
«      ZdZi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“i d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“¥i dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“dhdi“djdk“dldm“dndo“¥i dpdq“drds“dtdu“dvdw“dxdy“dzd{“d|d}“d~d“d€d�“d‚dƒ“d„d…“d†d‡“dˆd‰“dŠd‹“dŒd�“dŽd�“d�d‘“¥i d’d““d”d•“d–d—“d˜d™“dšd›“dœd�“dždŸ“d d¡“d¢d£“d¤d¥“d¦d§“d¨d©“dªd«“d¬d­“d®d¯“d°d±“d²d³“¥i d´dµ“d¶d·“d¸d¹“dºd»“d¼d½“d¾d¿“dÀdÁ“dÂdÃ“dÄdÅ“dÆdÇ“dÈdÉ“dÊdË“dÌdÍ“dÎdÏ“dÐdÑ“dÒdÓ“dÔdÕ“¥dÖd×dØdÙdÚœ¥ZdÛedÜ<    edÝ¬Þ«       G dß„ dà«      «       Zdçdá„Zdèdâ„Zdédêdã„Zdëdä„Zdìdå„Zdídæ„Zy)îé    )Úannotations)Ú	dataclass)ÚdateN)ÚPathé   )ÚSettings)Úread_day_datesz<hIH3Iz<6scIÚ	basic_epsé   Údeducted_epsé   Únet_assets_per_shareé   Úroe_reportedé   Úoperating_cash_flow_per_shareé   Úmoney_fundsé
   Úbills_receivableé   Úaccounts_receivableé   Úprepaymentsé   Úother_receivablesé   Ú	inventoryé   Úcurrent_assetsé   Úlong_term_equity_investmenté   Úfixed_assetsé   Úconstruction_in_progressé!   Úintangible_assetsé"   Údevelopment_expenditureé#   Úgoodwillé(   Útotal_assetsé)   Úshort_term_borrowingsé+   Úbills_payableé,   Úaccounts_payableé4   Únoncurrent_liabilities_due_1yé6   Úcurrent_liabilitiesé7   Úlong_term_borrowingsé8   Úbonds_payableé9   Úlong_term_payablesé;   Ú
provisionsé>   Únoncurrent_liabilitiesé?   Útotal_liabilitiesé@   Úregistered_capitaléE   Úminority_equityéH   Útotal_equityéJ   Úoperating_revenue_ytdéK   Úoperating_cost_ytdéM   Úselling_expense_ytdéN   Úmanagement_expense_ytdéP   Úfinance_expense_ytdéQ   Úimpairment_loss_ytdéR   Úfair_value_change_ytdéS   Úinvestment_income_ytdéV   Úoperating_profit_ytdéW   Úsubsidy_income_ytdéX   Únon_operating_income_ytdéY   Únon_operating_expense_ytdé\   Útotal_profit_ytdé]   Úincome_tax_ytdé_   Únet_profit_ytdé`   Úparent_net_profit_ytdéa   Úminority_profit_ytdéb   Úcash_received_sales_ytdék   Úoperating_cash_flow_ytdér   Úcapital_expenditure_cash_ytdéy   Úborrowings_cash_received_ytdé|   Údebt_repayment_cash_ytdé}   Údividends_interest_cash_ytdé€   Úfinancing_cash_flow_ytdéƒ   Únet_cash_increase_ytdéŸ   Úcurrent_ratio_reportedé    Úquick_ratio_reportedé¢   Úinterest_coverage_reportedé¬   Úreceivables_turnover_reportedé­   Úinventory_turnover_reportedé¯   Úasset_turnover_reportedé·   Úoperating_revenue_yoy_reportedé¸   Únet_profit_yoy_reportedéÅ   Úroe_alt_reportedéÇ   Únet_margin_reportedéÊ   Úgross_margin_reportedéÎ   Údeducted_net_profit_ytdéÏ   Úebit_ytdéÐ   Ú
ebitda_ytdéÒ   Údebt_ratio_reportedéÜ   Úcash_revenue_ratio_reportedéä   Úocf_net_profit_ratio_reportedéæ   Ú operating_revenue_single_quarteréè   Ú parent_net_profit_single_quarteréé   Ú"deducted_net_profit_single_quarteréê   Ú"operating_cash_flow_single_quarteréî   Útotal_shareséï   Úlisted_a_shareséò   Úshareholder_counti
  Úfree_float_sharesi  Úparent_equityi  Únet_profit_recent_yeari  Úweighted_roe_reportedi  Úoperating_revenue_recent_yeari0  Ú research_development_expense_ytdi1  Úinterest_expense_ytdi3  Úoperating_cash_flow_ttmi4  Úparent_net_profit_ttmi5  Údeducted_net_profit_ttmi7  Úbasic_eps_single_quarteri8  Ú&total_operating_revenue_single_quarteri?  Útotal_operating_revenue_ttmi@  Úemployee_countiA  Úfcff_per_shareiB  Úfcfe_per_sharei'  Únotes_and_accounts_payablei(  Únotes_and_accounts_receivablei)  Údeferred_incomei+  Úother_equity_instrumentsÚother_income_ytdÚasset_disposal_income_ytdÚ$continuing_operations_net_profit_ytdÚ&discontinued_operations_net_profit_ytd)i,  i-  i.  i/  zdict[int, str]ÚFINANCIAL_FIELDST)Úfrozenc                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)	ÚFinanceBuildResultÚboolÚrebuiltÚintÚrowsÚstocksr   Úoutput_pathN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú8C:\FundamentalWorkbench\src\fundamental_mvp\financial.pyrÈ   rÈ   B   s   … àƒMØ
ƒIØƒKØÔrÔ   rÈ   c                óÖ   — t        j                  | «      r| dk  ry t        | «      }|dk  r|dz  }t        j                  t        |«      dd¬«      }t        j                  |«      rd S |S )Nr   i@B i -1ú%Y%m%dÚcoerce©ÚformatÚerrors)ÚnpÚisfiniterË   ÚpdÚto_datetimeÚstrÚisna)ÚvalueÚrawÚparseds      rÕ   Ú_parse_announcementrå   J   s\   € Ü�;‰;�uÔ ¨!¢ØÜ
ˆe‹*€CØ
ˆY‚ØˆzÑˆÜ�^‰^œC ›H¨X¸hÔG€FÜ—7‘7˜6”?ˆ4Ð.¨Ð.rÔ   c                óX  — | j                  d¬«      }t        j                  ||d¬«      }t        j                  t	        |«      t        j
                  d«      d¬«      }|t	        |«      k  }|||      ||<   t        j                  t        j                  |«      | j                  ¬«      S )Nzdatetime64[D])ÚdtypeÚright)ÚsideÚNaT©Úindex)
Úto_numpyrÜ   ÚsearchsortedÚfullÚlenÚ
datetime64rÞ   ÚSeriesrß   rì   )ÚannouncementsÚcalendarÚannÚ	positionsÚvaluesÚvalids         rÕ   Ú_next_trade_datesrù   T   s‡   € Ø
×
 Ñ
  Ð
 Ó
7€CÜ—‘ ¨#°GÔ<€IÜ�W‰W”S˜“^¤R§]¡]°5Ó%9ÀÔQ€FØœ˜H›Ñ%€EØ˜Y uÑ-Ñ.€Fˆ5�MÜ�9‰9”R—^‘^ FÓ+°=×3FÑ3FÔGÐGrÔ   c                óš  — | j                   dz  dz  }t        |j                  d«      «      D �cg c]A  }|j                  dd  dk\  r-|j	                  «       j
                  t        j                  kD  r|‘ŒC }}|st        d|› �«      ‚| j                  }t        d„ |D «       «      }| j                  dz  }|j                  «       r¬|j	                  «       j                  |k\  r�|j                  «       r|s}t        j                  |j!                  d	¬
«      «      }|j#                  d«      t$        k(  r@t'        j(                  |dg¬«      }	t+        dt-        |	«      |	d   j/                  «       |«      S g }
g }t        t        t0        «      d«      }|D �]  }|j3                  «       }t        j5                  |«      \  }}}}}}|dz  dk(  r|dz  nd}d}d}d}t7        |«      D �]–  }t8        j5                  |t        j                  |t8        j                  z  z   «      \  }}}|j;                  dd¬«      }|j=                  d«      sŒe||k  s||z   t-        |«      kD  r|dz  }Œ�t?        j@                  |d||¬«      jC                  tD        «      }tG        |d   «      }t'        jH                  tK        |«      dd¬«      }|�t'        jL                  |«      s||k  r|dz  }Œþ|j=                  d«      rdnd|z   |||jN                  dœ}t0        jQ                  «       D ]E  \  }} ||dz
     }!t?        jR                  |!«      rtU        |!«      d k  r|!nt>        jV                  || <   ŒG |
jY                  |«       |dz  }�Œ™ |jY                  |jN                  ||t-        |«      ||||||d!œ
«       �Œ t'        jZ                  |
«      j]                  g d"¢«      }"|"j_                  dd#gd$¬%«      }"|"d#   ja                  |"jc                  d«      d#   je                  «       «      }#|"jf                  |#   ji                  «       }"tk        | j                   dz  dz  d&z  d'z  «      }$tm        |"d(   |$«      |"d)<   |"d#   jn                  jp                  js                  d*d+d,d-d.œ«      |"d/<   |"d#   jn                  jt                  |"d0<   d|"d1<   |"j]                  g d2¢«      jw                  d3¬4«      }"|jx                  j{                  d3d3¬5«       | j                  j{                  d3d3¬5«       |"j}                  |d¬6«       |"j]                  g d7¢«      j_                  dd$¬%«      }%|%j}                  | j~                  d8z  d¬6«       h d9£}&g }'|"j€                  D �]~  }(|(|&v rŒ	t'        j‚                  |"|(   d¬«      })|'jY                  |(t…        |)j‡                  «       j‰                  «       «      tE        |)j‡                  «       j‹                  «       «      |)j‡                  «       j�                  «       r6tE        |)j�                  «       j‘                  d«      j‹                  «       «      nd |)j‡                  «       j�                  «       rtE        |)j“                  «       «      nd |)j‡                  «       j�                  «       rtE        |)j•                  «       «      nd |)j‡                  «       j�                  «       rtE        |)j                  «       «      nd d:œ«       �Œ� t'        jZ                  |'«      j]                  d;d<gdd3g¬=«      }*|*j—                  | j~                  d>z  dd?¬@«       t'        jZ                  |«      j—                  | j~                  dAz  dd?¬@«       t™        |"«      }+t$        t›        jœ                  «       jŸ                  «       t…        t-        |"«      «      t…        |"d   j/                  «       «      |"d#   j“                  «       j›                  «       jŸ                  «       |"d#   j                  «       j›                  «       jŸ                  «       |"d(   j                  «       j›                  «       jŸ                  «       |"d)   j                  «       j›                  «       jŸ                  «       t-        t0        «      ddB|+|*jf                  |*dC   j‘                  d«      d<f   j¡                  «       dDœ},| j                  dz  j£                  t        j¤                  |,ddE¬F«      d	¬
«       t§        | |,|*«       t+        d3t-        |"«      |"d   j/                  «       |«      S c c}w )GNÚvipdocÚcwz	gpcw*.datr   Ú20181231u'   æ²¡æœ‰æ‰¾åˆ°å�¯ç”¨ä¸“ä¸šè´¢åŠ¡æ–‡ä»¶ï¼šc              3  óP   K  — | ]  }|j                  «       j                  –— Œ  y ­w)N)ÚstatÚst_mtime)Ú.0Úpaths     rÕ   Ú	<genexpr>z(extract_financial_pit.<locals>.<genexpr>d   s   è ø€ Ð?¹°˜Ÿ	™	›×,Õ,¹ùs   ‚$&zfinancial_metadata.jsonúutf-8©ÚencodingÚschema_versionÚsource_code)ÚcolumnsFi:  r   ÚasciiÚignore©rÛ   )Ú0Ú3Ú6r   z<f4)rç   ÚcountÚoffseti9  r×   rØ   rÙ   r  ÚshÚsz)r  Úreport_periodÚannouncement_dateÚsource_filegêŒ 9Y>)F)
r  r  Ú	file_typeÚ	file_sizeÚrecord_countÚrecord_sizeÚfield_countÚaccepted_recordsÚinvalid_announcement_recordsÚinvalid_offset_records)r  r  r  r  Úlast)ÚkeepÚldayzsh000001.dayr  Úavailable_trade_dateÚQ1ÚH1ÚQ3ÚFY)é   r   é	   r   Úperiod_typeÚfiscal_yearÚis_vintage_snapshot)r  r"  r  T)Údrop©ÚparentsÚexist_okrë   )r  r  r  zfinancial_latest.parquet>   r*  r)  r  r  r  r  r+  r"  )ÚfieldÚnon_null_countÚnon_null_rateÚzero_rate_among_non_nullÚminÚmedianÚmaxr2  r0  )Ú	ascendingzfinancial_field_quality.csvz	utf-8-sig)rì   r  zfinancial_file_audit.csvuE   æœ¬åœ°æ–‡ä»¶å�ªä¿�ç•™å½“å‰�ä¸‹è½½ç‰ˆæœ¬ï¼ŒåŽ†å�²é‡�è¿°æ— æ³•è¿˜åŽŸã€‚r3  )r  Ú
build_daterÌ   rÍ   Úfirst_report_periodÚlatest_report_periodÚlatest_announcement_dateÚlatest_available_trade_dateÚselected_financial_fieldsÚvintage_snapshotÚrestatement_warningÚ
validationÚall_zero_fieldsr   )Úensure_asciiÚindent)TÚtdx_rootÚsortedÚglobÚstemrÿ   Úst_sizeÚHEADERÚsizeÚRuntimeErrorÚfinancial_pit_pathr6  Ú
report_dirÚexistsr   ÚjsonÚloadsÚ	read_textÚgetÚFINANCIAL_SCHEMA_VERSIONrÞ   Úread_parquetrÈ   rð   ÚnuniquerÅ   Ú
read_bytesÚunpack_fromÚrangeÚINDEX_RECORDÚdecodeÚ
startswithrÜ   Ú
frombufferÚastypeÚfloatrå   rß   rà   rá   ÚnameÚitemsrÝ   ÚabsÚnanÚappendÚ	DataFrameÚsort_valuesÚdrop_duplicatesÚgeÚgroupbyÚcummaxÚlocÚcopyr	   rù   ÚdtÚmonthÚmapÚyearÚreset_indexÚparentÚmkdirÚ
to_parquetÚprocessed_dirr	  Ú
to_numericrË   ÚnotnaÚsumÚmeanÚanyÚdropnaÚeqr4  r5  Úto_csvÚ_validate_financial_relationsr   ÚtodayÚ	isoformatÚtolistÚ
write_textÚdumpsÚ_write_financial_report)-ÚsettingsÚforceÚ
source_dirr  ÚfilesÚtargetÚnewest_sourceÚmetadata_pathÚcached_metadataÚcachedrÌ   Ú
file_auditÚ	max_fieldrã   r  Úreport_period_rawr  Ú_r  r  ÚacceptedÚinvalid_announcementÚinvalid_offsetrì   Úcode_rawr  Úcoder÷   Úannouncementr  ÚrecordÚfield_idÚ
field_namerâ   ÚframeÚ	monotonicrô   ÚlatestÚkey_columnsÚquality_rowsÚcolumnÚseriesÚqualityr@  Úmetadatas-                                                rÕ   Úextract_financial_pitr£  ]   sB  € Ø×"Ñ" XÑ-°Ñ4€JÜ$ Z§_¡_°[Ó%AÔBó SÑB�dØ—	‘	˜!˜"� Ò+°·	±	³×0CÑ0CÄfÇkÁkÒ0Qò ÐB€Eð SáÜÐDÀZÀLÐQÓRÐRØ×(Ñ(€FÜÑ?¹Ó?Ó?€MØ×'Ñ'Ð*CÑC€MØ‡}�}„˜6Ÿ;™;›=×1Ñ1°]ÒBÀ}×G[ÑG[ÔG]ÑfkÜŸ*™* ]×%<Ñ%<ÀgÐ%<Ó%NÓOˆØ×ÑÐ/Ó0Ô4LÒLÜ—_‘_ V°m°_ÔEˆFÜ% e¬S°«[¸&ÀÑ:O×:WÑ:WÓ:YÐ[aÓbÐbà$&€DØ*,€JÜ”CÔ(Ó)¨3Ó/€IÜˆØ�o‰oÓˆÜHN×HZÑHZÐ[^ÓH_ÑEˆ	Ð$ l°A°{ÀAØ*5¸©/¸QÒ*>�k QÒ&ÀAˆØˆØ ÐØˆÜ˜<×(ˆEÜ".×":Ñ":¸3ÄÇÁÈeÔVb×VgÑVgÑNgÑ@gÓ"hÑˆH�a˜Ø—?‘? 7°8�?Ó<ˆDØ—?‘? ?Ô3ØØ˜YÒ&¨&°;Ñ*>ÄÀSÃÒ*IØ !Ñ#�ØÜ—]‘] 3¨e¸;ÈvÔV×]Ñ]Ô^cÓdˆFÜ.¨v°c©{Ó;ˆLÜŸN™N¬3Ð/@Ó+AÈ(Ð[cÔdˆMØÐ#¤r§w¡w¨}Ô'=ÀÐQ^ÒA^Ø$¨Ñ)Ð$Øà(,¯©¸Ô(<¡À$È$ÑNØ!.Ø%1Ø#Ÿy™yñ	)ˆFô )9×(>Ñ(>Ö(@Ñ$�˜*Ø˜x¨!™|Ñ,�Ü.0¯k©k¸%Ô.@ÄSÈÃZÐRVÒEV¡UÔ\^×\bÑ\b��zÒ"ð )Að �K‰K˜ÔØ˜‰MŠHð1 )ð2 	×ÑØŸ9™9Ø.Ø"Ü˜S›Ø(Ø&Ø&Ø (Ø,@Ø&4ñ
ö 	ðA ôZ �L‰L˜Ó×*Ñ*Ò+`Óa€EØ×!Ñ! =°/Ð"BÈÐ!ÓP€EØ�oÑ&×)Ñ)¨%¯-©-¸Ó*FÀÑ*W×*^Ñ*^Ó*`Óa€IØ�I‰I�iÑ ×%Ñ%Ó'€EÜ˜h×/Ñ/°(Ñ:¸TÑAÀFÑJÈ^Ñ[Ó\€HÜ$5°eÐ<OÑ6PÐRZÓ$[€EÐ
 Ñ!Ø  Ñ1×4Ñ4×:Ñ:×>Ñ>À4ÈDÐUYÐ_cÑ?dÓe€Eˆ-ÑØ  Ñ1×4Ñ4×9Ñ9€Eˆ-ÑØ#(€EÐ
Ñ Ø×ÑÒVÓW×cÑcÐimÐcÓn€Eà
‡M�M×Ñ ¨tÐÔ4Ø×Ñ×Ñ d°TÐÔ:Ø	×Ñ�V 5ÐÔ)Ø×ÑÒTÓU×eÑeÐfsð  {AÐeó  B€FØ
×Ñ�h×,Ñ,Ð/IÑIÐQVÐÔWòW€Kà€LØ—-•-ˆØ�[Ñ ØÜ—‘˜u V™}°XÔ>ˆØ×ÑØÜ! &§,¡,£.×"4Ñ"4Ó"6Ó7Ü" 6§<¡<£>×#6Ñ#6Ó#8Ó9ØOUÏ|É|Ë~×OaÑOaÔOc¬¨f¯m©m«o×.@Ñ.@ÀÓ.C×.HÑ.HÓ.JÔ(KÐimØ*0¯,©,«.×*<Ñ*<Ô*>”5˜Ÿ™›Ô&ÀDØ06·±³×0BÑ0BÔ0D”e˜FŸM™M›OÔ,È$Ø*0¯,©,«.×*<Ñ*<Ô*>”5˜Ÿ™›Ô&ÀDñ
ö 	ð	  ô �l‰l˜<Ó(×4Ñ4°oÀwÐ5OÐ\aÐcgÐ[hÐ4Ói€GØ‡N�N�8×)Ñ)Ð,IÑIÐQVÐal€NÔmÜ‡L�L�Ó×#Ñ# H×$:Ñ$:Ð=WÑ$WÐ_dÐozÐ#Ô{ä.¨uÓ5€Jä2Ü—j‘j“l×,Ñ,Ó.Ü”C˜“J“Ü�e˜MÑ*×2Ñ2Ó4Ó5Ø$ _Ñ5×9Ñ9Ó;×@Ñ@ÓB×LÑLÓNØ % oÑ 6× :Ñ :Ó <× AÑ AÓ C× MÑ MÓ OØ$)Ð*=Ñ$>×$BÑ$BÓ$D×$IÑ$IÓ$K×$UÑ$UÓ$WØ',Ð-CÑ'D×'HÑ'HÓ'J×'OÑ'OÓ'Q×'[Ñ'[Ó']Ü%(Ô)9Ó%:Ø!ØfØ Ø"Ÿ;™; wÐ/IÑ'J×'MÑ'MÈaÓ'PÐRYÐ'YÑZ×aÑaÓcñ€Hð ×ÑÐ4Ñ4×@Ñ@Ü�
‰
�8¨%¸Ô:ÀWð Aô ô ˜H h°Ô8Ü˜d¤C¨£J°°mÑ0D×0LÑ0LÓ0NÐPVÓWÐWùòmSs   ¯Aec                óÒ  — t        j                  | |   d¬«      }|j                  «       |j                  «       z  t        j                  |«      z  t        j                  |«      z  }||   ||   z
  j                  «       }t        |j                  «       «      t        |«      rt        |j                  «       «      nd t        |«      rt        |j                  d«      «      dœS d dœS )NrØ   r  gffffffî?)ÚsamplesÚmedian_absolute_errorÚp95_absolute_error)rÞ   ru  rv  rÜ   rÝ   ra  rË   rw  rð   r^  r5  Úquantile)rš  Ú
calculatedÚreportedÚactualÚmaskÚerrors         rÕ   Ú_relation_errorr®  Ø   s½   € Ü�]‰]˜5 ™?°8Ô<€FØ×ÑÓ §¡£Ñ.´·±¸ZÓ1HÑHÌ2Ï;É;ÐW]ÓK^Ñ^€DØ˜Ñ  t¡Ñ,×1Ñ1Ó3€Eä�t—x‘x“z“?Ü:=¸e¼*¤ u§|¡|£~Ô!6È$Ü=@À¼Zœe E§N¡N°4Ó$8Ó9ñð ð NRñð rÔ   c                ój  — | d   j                  dt        j                  «      }| d   j                  dt        j                  «      }| d   j                  dt        j                  «      }| d   |z  dz  }| d   |z  }| d   | d   z
  |z  dz  }t        | |d	«      t        | |d
«      t        | |d«      dœS )Nr.   r   r8   rL   rD   éd   r    rN   rš   r~   r’   )Údebt_ratio_pct_pointsÚcurrent_ratioÚgross_margin_pct_points)ÚreplacerÜ   rb  r®  )rš  Úassetsr8   ÚrevenueÚ
debt_ratior²  Úgross_margins          rÕ   r}  r}  ã   sÏ   € Ø�>Ñ"×*Ñ*¨1¬b¯f©fÓ5€FØÐ 5Ñ6×>Ñ>¸qÄ"Ç&Á&ÓIÐØÐ+Ñ,×4Ñ4°Q¼¿¹Ó?€GØÐ*Ñ+¨fÑ4°sÑ:€JØÐ*Ñ+Ð.AÑA€MØÐ1Ñ2°UÐ;OÑ5PÑPÐT[Ñ[Ð^aÑa€Lä!0°¸
ÐDYÓ!ZÜ(¨°Ð?WÓXÜ#2°5¸,ÐH_Ó#`ñð rÔ   c                ó¶  — |j                  dd«      }dj                  d„ |j                  d¬«      D «       «      }dj                  d„ |d   j                  «       D «       «      }d	|d
   › d|d   › d|d   › d|d   › d|d   › d|d   › d|d   › d|d   › d|› d|› d�}| j                  j                  dd¬«       | j                  dz  j                  |d¬ «       y )!Né   r3  Ú
c           	   3  ó„   K  — | ]8  }d |j                   › d|j                  d›dt        |j                  «      › d�–— Œ: y­w)ú| ú | z.1%ú |N)r0  r3  rË   r1  )r  Úrows     rÕ   r  z*_write_financial_report.<locals>.<genexpr>ó   sG   è ø€ ð á4ˆCð ˆS�Y‰YˆK�s˜3×7Ñ7¸Ð<¸CÄÀC×DVÑDVÓ@WÐ?XÐXZÔ[Ù4ùs   ‚>A Frë   c           
   3  óV   K  — | ]!  \  }}d |› d|d   › d|d   d›d|d   d›d�	–— Œ# y­w)r½  r¾  r¥  r¦  z.6gr§  r¿  NrÓ   )r  r_  Úitems      rÕ   r  z*_write_financial_report.<locals>.<genexpr>÷   sQ   è ø€ ð !á8‰JˆD�$ð ˆTˆF�#�d˜9‘oÐ& c¨$Ð/FÑ*GÈÐ)LÈCÐPTÐUiÑPjÐknÐOoÐoqÔrÙ8ùs   ‚')r@  u.   # M1 è´¢åŠ¡å­—æ®µè´¨é‡�æŠ¥å‘Š

ç”Ÿæˆ�æ—¥æœŸï¼šr8  u     
è®°å½•æ•°ï¼šrÌ   u     
è‚¡ç¥¨æ•°ï¼šrÍ   u     
æŠ¥å‘ŠæœŸï¼šr9  u    è‡³ r:  u     
æœ€æ–°å…¬å‘Šï¼šr;  u     
æœ€æ–°å�¯ç”¨äº¤æ˜“æ—¥ï¼šr<  u     
æŠ½å�–è´¢åŠ¡å­—æ®µï¼šr=  u®   ä¸ª

## 1. é‡�è¦�æ—¶é—´å�£å¾„

- è´¢åŠ¡æ•°æ�®ä»Žå…¬å‘Šæ—¥ä¹‹å�Žçš„é¦–ä¸ªäº¤æ˜“æ—¥å¼€å§‹å�¯ç”¨ã€‚
- `report_period`ã€�`announcement_date` å’Œ `available_trade_date` åˆ†å¼€ä¿�å­˜ã€‚
- æœ¬åœ°ä¸“ä¸šè´¢åŠ¡æ–‡ä»¶ä¸�æ˜¯åŽ†å�²ç‰ˆæœ¬å¿«ç…§ï¼Œæ— æ³•è¿˜åŽŸå�Žç»­é‡�è¿°å‰�çš„åŽŸå§‹å€¼ï¼›`is_vintage_snapshot` å›ºå®šä¸ºå�¦ã€‚

## 2. å…³ç³»å¼�æŠ½æ ·éªŒè¯�

| å…³ç³» | æ ·æœ¬æ•° | ç»�å¯¹è¯¯å·®ä¸­ä½�æ•° | ç»�å¯¹è¯¯å·®P95 |
|---|---:|---:|---:|
uó   

å…³ç³»å¼�è¯¯å·®ç”¨äºŽæ£€æŸ¥å­—æ®µæ˜ å°„å’Œå�•ä½�ï¼Œä¸�è¡¨ç¤ºæŠ¥è¡¨æœ¬èº«å­˜åœ¨é—®é¢˜ã€‚éƒ¨åˆ†é‡‘èž�ä¼�ä¸šå�£å¾„ä¸�å�Œï¼Œå�Žç»­å°†åˆ†è¡Œä¸šå¤�æ ¸ã€‚

## 3. åŽŸå§‹é›¶å€¼çŽ‡æœ€é«˜å­—æ®µ

| å­—æ®µ | é›¶å€¼çŽ‡ | åŽŸå§‹é�žç©ºæ•° |
|---|---:|---:|
ui  

é€šè¾¾ä¿¡ä¸“ä¸šè´¢åŠ¡æ–‡ä»¶ä¸­çš„æ•°å€¼æ§½ä½�é€šå¸¸éƒ½æœ‰å€¼ï¼Œä½†éƒ¨åˆ†æœªæŠ«éœ²é¡¹ç›®ä¹Ÿå�¯èƒ½ç¼–ç �ä¸º 0ã€‚å› æ­¤â€œåŽŸå§‹é�žç©ºçŽ‡ 100%â€�ä¸�ç­‰äºŽå­—æ®µçœŸå®žå®Œæ•´ï¼›å�Žç»­è®¡ç®—æŒ‡æ ‡æ—¶éœ€è¦�æŒ‰å­—æ®µè¯­ä¹‰åŒºåˆ†â€œçœŸå®žé›¶å€¼â€�å’Œâ€œç–‘ä¼¼ç¼ºå¤±â€�ã€‚å…¨é›¶å­—æ®µæš‚ä¸�å�‚ä¸Žè¯„åˆ†ã€‚å®Œæ•´ç»Ÿè®¡è§� `data/processed/financial_field_quality.csv`ã€‚
Tr-  u   M1_è´¢åŠ¡å­—æ®µè´¨é‡�æŠ¥å‘Š.mdr  r  )ÚnlargestÚjoinÚ
itertuplesr`  rM  rr  r�  )r„  r¢  r¡  Ú	high_zeroÚ
zero_linesÚvalidation_linesÚreports          rÕ   rƒ  rƒ  ñ   sN  € Ø× Ñ  Ð%?Ó@€IØ—‘ñ à×'Ñ'¨eÐ'Ô4óó €Jð —y‘yñ !à" <Ñ0×6Ñ6Ô8ó!ó Ððà˜Ñ&Ð'ð (Ø�fÑÐð Ø�hÑÐ ð !ØÐ+Ñ,Ð-¨U°8Ð<RÑ3SÐ2Tð UØÐ3Ñ4Ð5ð 6Ø!Ð"?Ñ@ÐAð BØÐ:Ñ;Ð<ð =ð Ð ð ð €ð ð9€Fð@ ×Ñ×Ñ d°TÐÔ:Ø×ÑÐ;Ñ;×GÑGÈÐY`ÐGÕarÔ   )râ   r^  Úreturnzpd.Timestamp | None)ró   ú	pd.Seriesrô   z
np.ndarrayrÊ  rË  )F)r„  r   r…  rÉ   rÊ  rÈ   )rš  úpd.DataFramer©  rË  rª  rà   rÊ  zdict[str, float | int | None])rš  rÌ  rÊ  údict[str, object])r„  r   r¢  rÍ  r¡  rÌ  rÊ  ÚNone)Ú
__future__r   Údataclassesr   Údatetimer   rO  Úpathlibr   ÚstructÚnumpyrÜ   ÚpandasrÞ   Úconfigr   Útdxr	   ÚStructrI  rY  rS  rÅ   rÒ   rÈ   rå   rù   r£  r®  r}  rƒ  rÓ   rÔ   rÕ   Ú<module>rÙ     sñ  ðÞ "å !Ý Û Ý Û ã Û å Ý ð 
ˆ�‰�xÓ	 €Øˆv�}‰}˜WÓ%€ØÐ ð*$Ø€{ð*$Ø�~ð*$Ø'(Ð*@ð*$ØBCÀ^ð*$àÐ&ð*$à()¨=ð*$à:<Ð>Pð*$ð Ðð*$ð  " =ð*$ð 35Ð6Ið*$ð LNÈ{ð*$ð Ðð	*$ð Ð;ð	*$ð >@Àð	*$ð
 Ð"ð*$ð
 %'Ð(;ð*$ð
 >@ÐAZñ*$ð ˆ
ð*$ð ˜ð*$ð )+Ð,Cð*$ð FHÈð*$ð Ðð*$ð Ð ?ð*$ð BDÐEZð*$ð Ðð*$ð !# Oð*$ð 68Ð9Mð*$ð ˆð*$ð Ð2ð*$ð 57Ð8Kð*$ð Ðð*$ð !Ð"3ð*$ð 68¸ð*$ð Ðò*$ð "$Ð%9ð*$ð <>Ð?Tð*$ð Ð ð*$ð #%Ð&;ð*$ð >@ÐAVð*$ð Ðð*$ð "$Ð%<ð*$ð ?AÐBXð*$ð Ðð*$ð !Ð"<ð*$ð ?AÐB]ð*$ð Ðð*$ð Ð 0ð*$ð 35Ð6Fð*$ð  Ðð!*$ð  "$Ð%:ð!*$ð  =?Ð@Yò!*$ð" Ð	"ð#*$ð" %(Ð)Gð#*$ð$ Ð	'ð%*$ð$ *-Ð.Gð%*$ð& Ð	&ð'*$ð& ),Ð-Fð'*$ð( Ð	 ð)*$ð( #&Ð'?ð)*$ð( BEÐF\ð)*$ð* Ð	%ð+*$ð* (+Ð,Kð+*$ð, Ð	&ð-*$ð, ),Ð-Fð-*$ð. Ð	)ð/*$ð. ,/Ð0Ið/*$ð0 Ð	ð1*$ð0 !Ð"7ò1*$ð0 :=Ð>Uð1*$ð2 Ð	"ð3*$ð2 %(¨ð3*$ð2 69¸,ð3*$ð4 Ð	ð5*$ð4 !$Ð%Bð5*$ð6 Ð	(ð7*$ð6 +.Ð/Qð7*$ð8 Ð	+ð9*$ð8 .1Ð2Vð9*$ð: Ð	-ð;*$ð: 03°Nð;*$ð: EHÐIZð;*$ð< Ð	ð=*$ð< "Ð#6ð=*$ð< 9<¸_ð=*$ð> Ð	!ò?*$ð> $'Ð(?ð?*$ð@ Ð	(ðA*$ð@ +.Ð/QðA*$ðB Ð	ðC*$ðB "%Ð&?ðC*$ðD Ð	 ðE*$ðD #&Ð'@ðE*$ðF Ð	#ðG*$ðF &)Ð*RðG*$ðH Ð	&ðI*$ðH ),Ð-=ðI*$ðJ Ð	ðK*$ðJ Ð 0ðK*$ðL Ð	%ðM*$ðL (+Ð,KðM*$ðN Ð	ðO*$ðN  Ð!;ñO*$ðN CUØ	$Ð+QØ	1òS*$Ð �.ó *ñZ �$Ô÷ð ó ðó/óHôxXóvóô+brÔ   