
    ^fh2                        S SK r S SKrS SKrS SKrS SKJr  S SKrS rS r	S r
S rS rS rS	S
SSSS.rS0 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/_S0S1_0S2S3S4S5S6.S2S SS7.S8.rS9rS:rS;S<S=S>S?\R$                  R&                  S@.r/ SAQr/ SBQr/ SCQr/ SDQ/ SEQSF.rSG\SH\4SI jrSJS2S3S4S5S6.0rS	SKSLSM.S
SNSOSM.SSNSOSM.SSNSOSM.SP.rSQSRSS.rSWST jr " SU SV5      rg)X    N)Pathc                      [         R                  " S5      S:X  a  [        R                  O[        R                  n [        R
                  " U SS9  [        R                  " [        5      nU$ )u6   ロギング設定を初期化し、ロガーを返すDEBUG1z)%(asctime)s - %(levelname)s - %(message)s)levelformat)osgetenvloggingr   INFObasicConfig	getLogger__name__)	log_levelloggers     /app/config.pysetup_loggingr   	   sG    !#7!3s!:Ii0[\x(FM    c                  8   [         R                  " [        5      n U R                  S5        U R                  S[         35        U R                  S[
        S    S[
        S    35        U R                  S[        [        5       35        U R                  S5        g	)
u   設定情報を表示するu   === 設定情報 ===u   CSVパス設定: u   データベース: databasez @ hostu   対象テーブル数: z===============N)r   r   r   info	CSV_PATHS	DB_CONFIGlenTARGET_TABLES)r   s    r   print_config_infor      s    x(F
KK&'
KK#I;/0
KK&y'<&=S6AR@STU
KK)#m*<)=>?
KK!"r   c                  Z   [         (       a  [        [         5      R                  5       OS[        (       a  [        [        5      R                  5       OSS.n [        R
                  " [        5      nU R                  5        H'  u  p#U(       a  SOSnUR                  SU SU 35        M)     U $ )u*   オプションファイルの存在確認F)code_mapping_excelcode_type_excelu   ✅ 存在しますu   ❌ 存在しませんu   オプションファイル z: )	CODE_MAPPING_EXCELr   existsCODE_TYPE_EXCELr   r   r   itemsdebug)resultsr   file_keyr"   statuss        r   check_optional_filesr)      s     DVCUd#56==?[`=L_40779RWG x(F#MMO*0&6N3H:RxHI , Nr   c                     [         R                  " [        5      n U R                  S5        [        S   [        S   [        S   [        S   [        S   /n/ nU HH  n[        U5      R                  5       (       a  M#  UR                  U5        U R                  SU 35        MJ     U(       a;  U R                  S[        U5       S	35        [        SS
R                  U5       35      eU R                  S5        g)u'   必須入力ファイルの存在確認u'   入力ファイルの検証を開始...institutiondonor_followupsrecipient_followupstransplantsmapping_tableu,   必須ファイルが見つかりません: u   必須ファイル u:   件 が見つかりません。処理を中止します。z, uO   ✅ 必須ファイル検証完了 - すべてのファイルが存在しますT)r   r   r   r   r   r   r"   appenderrorr   FileNotFoundErrorjoin)r   required_filesmissing_files	file_paths       r   validate_input_filesr7   %   s    x(F
KK9: 	- #$'(- /"N M#	I%%''  +LLG	{ST $
 *3}+=*>>xyz"NtyyYfOgNh ijj
KKabr   c                 .    [         R                  U / 5      $ )u'   テーブルのカラム一覧を取得)TABLE_COLUMNSget)
table_names    r   get_table_columnsr<   @   s    Z,,r   c                  2   [         R                  " [        5      n  [        R                  " [
        S   SSS9nU R                  S[        U5       S35        U$ ! [         a3  nU R                  SU 35        [        R                  " 5       s SnA$ SnAff = f)	u-   データマッピング情報を読み込むr/   u   腎臓　生体   )
sheet_nameheaderu2   マッピングデータを読み込みました: u   行u2   マッピングデータの読み込みに失敗: N)r   r   r   pd
read_excelr   r   r   	Exceptionr1   	DataFrame)r   dfes      r   load_data_mappingsrG   D   s    x(F]]9_5BS\]^HR	QTUV	 I!MN||~s   <A 
B#(BBBz/csv/liver/shisetsu.csvz/csv/kan/d-followups.csvz/csv/kan/r-followups.csvz/csv/kan/transplants.csvu&   /csv/kan/移行データ対応表.xlsx)r+   r,   r-   r.   r/   DONOR_FIELD_MAPPINGu   ドナー:術後観察期間DONOR_KANSATU_DATEu   ドナー:喫煙状況DONOR_KITUEN_FLGu   ドナー:身長DONOR_HEIGHTu   ドナー:体重DONOR_WEIGHTu   ドナー:収縮期血圧DONOR_SHUUSYUKU_KETSUATSUu   ドナー:拡張期血圧DONOR_KAKUTYOU_KETSUATSUu"   ドナー:総コレステロールDONOR_TOTAL_CHOLESTEROLu"   ドナー:HDLコレステロールDONOR_HDL_CHOLESTEROLu"   ドナー:LDLコレステロールDONOR_LDL_CHOLESTEROLu   ドナー:中性脂肪DONOR_NEUTRAL_FATu   ドナー:空腹時血糖DONOR_KUFUKU_KETTOUCHIu   ドナー:HbA1cDONOR_HBA1Cu   ドナー:尿蛋白定性DONOR_NYO_TANPAKU_TEISEIu   ドナー:尿蛋白定量DONOR_NYO_TANPAKU_TEIRYOu"   ドナー:血清クレアチニンDONOR_KESSHOU_CREATININEu   ドナー:eGFR
DONOR_EGFRu   ドナー:尿潜血DONOR_NYO_SENKETUr>            )u   良好u   変化なしu   不良   不明)u   はいu	   いいえr]   )fieldsstatus_mappingboolean_mappinguK   /csv/kan/移行データ_コード変換表アルトマーク→TRACER.xlsxu#   /csv/kan/00_コードタイプ.xlsxdbroot123456dev_tracer_db2utf8mb4)r   userpasswordr   charsetcursorclass)T_NYURYOKUJOKYO_LIVT_IJI_MENEKI_YOKUSEI_R_LIVT_GAPPEI_R_LIVT_KANSEN_R_LIVT_KENSA_R_LIVT_KENSA_D_LIVT_LIVING_D_LIVT_DONOR_KIDNEY_LIVT_DONOR_LIVT_ISHOKU_KIHON_KIDNEY_LIVT_TRACER_IKOT_ISHOKU_KIHON_LIV)ru   rt   rs   rr   rq   rl   rk   rm   rp   ro   rn   ))u[   合併症等:感染症の有無(調査期間中):サイトメガロウイルス抗原血症ug   合併症等:感染症の有無(調査期間中):サイトメガロウイルス抗原血症の診断日)uX   合併症等:感染症の有無(調査期間中):サイトメガロウイルス感染症ud   合併症等:感染症の有無(調査期間中):サイトメガロウイルス感染症の診断日)uS   合併症等:感染症の有無(調査期間中):その他のウイルス感染症1u_   合併症等:感染症の有無(調査期間中):その他のウイルス感染症1の診断日)uS   合併症等:感染症の有無(調査期間中):その他のウイルス感染症2u_   合併症等:感染症の有無(調査期間中):その他のウイルス感染症2の診断日)uS   合併症等:感染症の有無(調査期間中):その他のウイルス感染症3u_   合併症等:感染症の有無(調査期間中):その他のウイルス感染症3の診断日)u@   合併症等:感染症の有無(調査期間中):細菌性肺炎uL   合併症等:感染症の有無(調査期間中):細菌性肺炎の診断日)uI   合併症等:感染症の有無(調査期間中):細菌性尿路感染症uU   合併症等:感染症の有無(調査期間中):細菌性尿路感染症の診断日)uP   合併症等:感染症の有無(調査期間中):その他の細菌性感染症1u\   合併症等:感染症の有無(調査期間中):その他の細菌性感染症1の診断日)uP   合併症等:感染症の有無(調査期間中):その他の細菌性感染症2u\   合併症等:感染症の有無(調査期間中):その他の細菌性感染症2の診断日)uP   合併症等:感染症の有無(調査期間中):その他の細菌性感染症3u\   合併症等:感染症の有無(調査期間中):その他の細菌性感染症3の診断日)u9   合併症等:感染症の有無(調査期間中):PC肺炎uE   合併症等:感染症の有無(調査期間中):PC肺炎の診断日)uP   合併症等:感染症の有無(調査期間中):その他の真菌性感染症1u\   合併症等:感染症の有無(調査期間中):その他の真菌性感染症1の診断日)uP   合併症等:感染症の有無(調査期間中):その他の真菌性感染症2u\   合併症等:感染症の有無(調査期間中):その他の真菌性感染症2の診断日)SEITAI_ISYOKU_IDISYOKU_ISYOKUSISETU_CD	ZOKI_CODEDEL_FLGINS_USER_IDINS_PROGRAM_ID)DONOR_IDrv   DONOR_BIRTH_DATE	DONOR_SEXry   rz   r{   )ru   rr   tsuisekireturnc                     U R                  5       n U S:X  a  gSU ;   a1   [        U R                  SS5      R                  5       5      nUS-   S $ g!    g= f)uW   
'3ヶ月後' → 99, '1年後' → '01', '2年後' → '02', ..., '50年後' → '50'
u
   3ヶ月後99u   年後 r>   02)stripintreplace)r   years     r   to_cycle_strr      se     ~~H<	X		x''"5;;=>DQhr]# 	s   /A APRESSURE_STATUS_MAPzutf-8	)pathencodingsepcp932,)r+   r,   r-   r.      z./logs)sample_rowslog_directoryc                    Uc1   [         R                  " [        S   S[        S9R	                  S5      nXS   U :H     nUR                  (       d  UR                  S	   S
   $ XS   R                  R                  U SS9   nUR                  (       d  UR                  S	   S
   $ g! [
         a8  n[        R                  " [        5      nUR                  SU 35         SnAgSnAff = f)u'   施設名から施設コードを取得Nr+   r   )r   dtyper   u)   施設データの読み込みに失敗: 700000u   名称r   u	   コードF)na)rA   read_csvr   strfillnarC   r   r   r   r1   emptyiloccontains)facility_nameinstitution_dfrF   r   match_exact
match_likes         r   get_sisetu_cdr     s    	[[=)AtSVW^^_abN !!9]!JKK";//  x 8 < < E EmX] E ^_Jq!+.. !  	&&x0FLLDQCHI	s   0B% %
C'/.C""C'c                   *    \ rS rSrSS jrS rS rSrg)ConversionProcessori  Nc                     Xl         0 U l        U(       a7  [        R                  R	                  U5      (       a  U R                  U5        g g g N)rulescode_mappingr	   r   r"   _load_code_mapping)selfr   code_mapping_files      r   __init__ConversionProcessor.__init__   s=    
0A!B!B##$56 "Cr   c                     [         R                  " U5      nUR                  S5      R                  S5      U l        g ! [
         a8  n[        R                  " [        5      nUR                  SU 35         S nAg S nAff = f)Nu   ソースコードindexu2   コードマッピングの読み込みに失敗: )
rA   rB   	set_indexto_dictr   rC   r   r   r   r1   )r   r6   rE   rF   r   s        r   r   &ConversionProcessor._load_code_mapping&  sl    	Sy)B "-A B J J7 SD 	S&&x0FLLMaSQRR	Ss   ;> 
B .A;;B c                     U$ r    )r   source_valuerule_keys      r   convertConversionProcessor.convert.  s    r   )r   r   r   )r   
__module____qualname____firstlineno__r   r   r   __static_attributes__r   r   r   r   r     s    7Sr   r   r   ) r   r	   pymysqljsonpathlibr   pandasrA   r   r   r)   r7   r<   rG   r   DONOR_KIDNEY_RULESr!   r#   cursors
DictCursorr   ORDERED_TABLESr   KANSEN_COLUMNSr9   r   r   CONVERSION_RULESFILE_SETTINGSDEBUG_SETTINGSr   r   r   r   r   <module>r      sL    	    #
6-
$ -15-=	 	  
*,@ 
$&8 
  
 	 

 ()D 
 ()C 
 12K 
 12I 
 12I 
 %&9 
 ()A 
 } 
 ()C 
 ()C 
 12L 
  l! 
" "#6# 
, 	 9! F c 7  ??--	 $
3 3 & 	
  * + + +!2 0 r   