
    c$h@                     d    S r  SSKrSSKJrJrJr  SSKr " S S5      r	S r
\S:X  a  \
" 5         gg)uyT  
疾患コード変換処理

移植時のCSVデータから各疾患ケースごとにコードを変換し、
指定されたフィールド（GENSIKKAN1_L ～ GENSIKKAN5_CMNT）に格納する処理を実装


既存のＪＳＯＮを利用した変換ロジックをもとに
移植時のCSVを参照して各ケースごとにＣＳＶファイルの値を参照して、下記の順番で格納していく処理を実装してほしい。
disease_code_mapping_regular関数などを参考にして

<格納する順番>
GENSIKKAN1_L
GENSIKKAN1_H
GENSIKKAN1_CMNT

GENSIKKAN2_L
GENSIKKAN2_H
GENSIKKAN2_CMNT

GENSIKKAN3_L
GENSIKKAN3_H
GENSIKKAN3_CMNT

GENSIKKAN4_L
GENSIKKAN4_H
GENSIKKAN4_CMNT

GENSIKKAN5_L
GENSIKKAN5_H
GENSIKKAN5_CMNT


【ケース1】


### 胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
C1      0101
BA      0101
C2      0102
PBC     0102
C3      0103
PSC     0103
C4      0104
Alagille        0104
C5      0105
C5'     0106
C8      0107
C6      0108
Caroli  0108
肝内結石    0109
先天性胆道拡張症        0110


上記以外のデータは「0111」に設定する。

<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L



### 胆汁鬱滞性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]

[CSVの値 →　変換する値]
胆汁鬱滞性疾患 01
腫瘍性疾患   02
肝細胞性疾患(肝硬変)     03
急性肝不全   04
代謝性疾患   05
血管性疾患   06
その他の疾患  07
再移植     08
不明      09


<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### 胆汁鬱滞性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]

値をそのままデータベースに格納する。ただし、胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0111」の場合、
胆汁鬱滞性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]と胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]
の文字列を連結させて登録する。


<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【ケース2】


### 腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]

[CSVの値 →　変換する値]
N1      0201
HCC     0201
N5      0202
CCC     0203
N2      0204
肝芽腫     0204
Hemangioma      0205
Epithelioid hemangioendothelioma        0206

上記以外のデータは「0207」に設定する。


<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H

### 腫瘍性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]

[CSVの値 →　変換する値]
N 02

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H

### 腫瘍性疾患-転移性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]

値をそのままデータベースに格納する。ただし、腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0207」の場合、
腫瘍性疾患-転移性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]と腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の文字列を連結させて登録する。

<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【ケース3】
### 肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
0301    H1
0301    HBV
0302    H2
0302    HCV
0303    H4
0303    アルコール性
0304    H3
0304    AIH
0305    H8
0305    NASH
0306    Infantile hepatitis
0307    Neonatal hepatitis
0308    原因不明の肝硬変


上記以外の値は「0309」に変換する

        
<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L


### 肝細胞性疾患（肝硬変）-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]

[CSVの値 →　変換する値]
H 03

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### 肝細胞性疾患（肝硬変）-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


値をそのままデータベースに格納する。ただし、肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0309」の場合、
肝細胞性疾患（肝硬変）-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]と肝細胞性疾患（肝硬変）-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]の文字列を連結させて登録する。


<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【ケース4】
### 急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
HAV     0401
F1      0401
HBV     0402
        0403
AIH     0404
F4      0405
F2      0406
薬剤性     0406
F3      0407
F6      0408
原因不明    0408

上記以外の値は「0409」に変換する

        
<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L


### 急性肝不全-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]

[CSVの値 →　変換する値]
F 04

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### 急性肝不全-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


値をそのままデータベースに格納する。ただし、急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0409」の場合、
急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]と急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の文字列を連結させて登録する。


<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【ケース5】
### 代謝性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]



[CSVの値 →　変換する値]
M1      0501
Willson 0501
M2      0502
FAP     0502
M3      0503
Citrullinemia   0503    
M4      0504
OTC deficiency  0504    
M6      0506
Glycogen Strage Disease 0506
M8      0507
Methylmalonic acidemia  0507
M5      0509
Tyrosinemia     0509
M7      0510
Primary hyperoxaluria   0510
        

上記以外の値は「0511」に変換する

        
<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L


### 代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
M 05

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### 代謝性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


値をそのままデータベースに格納する。ただし、代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0511」の場合、
代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]と代謝性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]の文字列を連結させて登録する。


<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【ケース6】
### 血管性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]



[CSVの値 →　変換する値]
M1      501
Willson 501
M2      502
FAP     502
M3      503
Citrullinemia   503
M4      504
OTC deficiency  504     
M6      506
Glycogen Strage Disease 506
M8      507
Methylmalonic acidemia  507
M5      509
Tyrosinemia     509
M7      510
Primary hyperoxaluria   510

        
上記以外の値は「0511」に変換する

        
<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L


### 血管性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
V 06

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### 血管性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


値をそのままデータベースに格納する。ただし、血管性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]の変換された値が「0511」の場合、
血管性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]と血管性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の文字列を連結させて登録する。


<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【ケース7】


### その他の疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
Congenital hepatic fibrosis     0701
Polycystic liver(&amp;kidney)   0702
慢性肝GVHD:骨髄移植後   0703
その他     0704


<該当フィールド>
GENSIKKAN1_L ～ GENSIKKAN5_L


### その他の疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]


[CSVの値 →　変換する値]
胆汁鬱滞性疾患 01
腫瘍性疾患   02
肝細胞性疾患(肝硬変)     03
急性肝不全   04
代謝性疾患   05
血管性疾患   06
その他の疾患  07
再移植     08
不明      09

<該当フィールド>
GENSIKKAN1_H ～ GENSIKKAN5_H


### その他の疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]

値をそのままデータベースに格納する。

<該当フィールド>
GENSIKKAN1_CMNT ～ GENSIKKAN5_CMNT

胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]　※カンマ区切り
胆汁鬱滞性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はCのみで、値があった、01を設定する
胆汁鬱滞性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]



腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]　※カンマ区切り
腫瘍性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はNのみで、値があった、02を設定する
腫瘍性疾患-転移性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]
腫瘍性疾患-他の原発性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]

肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]　※カンマ区切り
肝細胞性疾患（肝硬変）-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はHのみで、値があった、03を設定する
肝細胞性疾患（肝硬変）-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]



急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]　※カンマ区切り
急性肝不全-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はFのみで、値があった、04を設定する
急性肝不全-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


代謝性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]※カンマ区切り
代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はMのみで、値があった、05を設定する
代謝性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


血管性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]※カンマ区切り
血管性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値はVのみで、値があった、06を設定する
血管性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]

その他の疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]※カンマ区切り
その他の疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]の値のみで、値があった、07を設定する
その他の疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]


        elif conv_type == "old_disease_code_mapping_regular":
            # 通常の疾患コード（管理者以外）の処理
            # すでにresultに存在するGENSIKKAN{n}_Hフィールドを確認し、使用済みインデックスを取得            
            disease_mappings = [
                # パターン①: 胆汁鬱滞性疾患
                {
                    "group_code_field": "胆汁鬱滞性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "01",
                    "l_mappings": {
                        "C1": "101", "BA": "101", "C2": "102", "PBC": "102", "C3": "103", 
                        "PSC": "103", "C4": "104", "Alagille": "104", "C5": "105", "C5'": "106", 
                        "C8": "107", "C6": "108", "Caroli": "108", "肝内結石": "109"
                    },
                    "default_l": "111"
                },
                # パターン②: 腫瘍性疾患
                {
                    "group_code_field": "腫瘍性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "02",
                    "l_mappings": {
                        "N1": "0201", "HCC": "0201", "N5": "0202", "CCC": "0203", "N2": "0204",
                        "肝芽腫": "0204", "Hemangioma": "0205", "Epithelioid hemangioendothelioma": "0206",
                        "N4": "0208", "転移性": "0208"
                    },
                    "default_l": "0207"
                },
                # パターン③: 肝細胞性疾患
                {
                    "group_code_field": "肝細胞性疾患（肝硬変）-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "03",
                    "l_mappings": {
                        "H1": "0301", "HBV": "0301", "H2": "0302", "HCV": "0302", "H4": "0303",
                        "アルコール性": "0303", "H3": "0304", "AIH": "0304", "H8": "0305", "NASH": "0305",
                        "Infantile hepatitis": "0306", "Neonatal hepatitis": "0307", "原因不明の肝硬変": "0308",
                        "H9": "0309", "その他": "0309"
                    },
                    "default_l": "0309"
                },
                # パターン④: 急性肝不全
                {
                    "group_code_field": "急性肝不全-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "04",
                    "l_mappings": {
                        "HAV": "0401", "F1": "0401", "HBV": "0402", "AIH": "0404", "F4": "0405",
                        "F2": "0406", "薬剤性": "0406", "F3": "0407", "F6": "0408", "原因不明": "0408",
                        "F9": "0409", "その他": "0409"
                    },
                    "default_l": "0409"
                },
                # パターン⑤: 代謝性疾患
                {
                    "group_code_field": "代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "代謝性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "05",
                    "l_mappings": {
                        "M1": "501", "Willson": "501", "M2": "502", "FAP": "502", "M3": "503",
                        "Citrullinemia": "503", "M4": "504", "OTC deficiency": "504", "M6": "506",
                        "Glycogen Strage Disease": "506", "M8": "507", "Methylmalonic acidemia": "507",
                        "M5": "509", "Tyrosinemia": "509", "M7": "510", "Primary hyperoxaluria": "510"
                    },
                    "default_l": "511"
                },
                # パターン⑥: 血管性疾患
                {
                    "group_code_field": "血管性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "血管性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "06",
                    "l_mappings": {
                        "V1": "0601", "Budd-Chian症候群": "0601", "V2": "0602", "先天性門脈欠損症": "0602"
                    },
                    "default_l": "0603"
                },
                {
                    "group_code_field": "肝細胞性疾患（肝硬変）-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "disease_code_field": "肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]",
                    "h_value": "03",
                    "l_mappings": {
                        "H1": "0301", "HBV": "0301",
                        "H2": "0302", "HCV": "0302",
                        "H4": "0303", "アルコール性": "0303",
                        "H3": "0304", "AIH": "0304",
                        "H8": "0305", "NASH": "0305",
                        "Infantile hepatitis": "0306",
                        "Neonatal hepatitis": "0307",
                        "原因不明の肝硬変": "0308",
                        "H9": "0309", "その他": "0309"
                    },
                    "default_l": "0309"
                }
            ]
            filed_count = 1
            # 各疾患タイプを1回だけ処理するよう反復処理
            for mapping in disease_mappings:
                group_code_field = mapping["group_code_field"]
                disease_code_field = mapping["disease_code_field"]
                group_code_value = all_row[group_code_field]
                disease_code_value = all_row[disease_code_field]
                ## 群コード/疾患コードが入っていたら、default値を設定
                if group_code_value and disease_code_value:
                    code_list = str(disease_code_value).split(",")  # カンマで分割
                    ## 群コードdefault値を設定                    
                    code_list = [c.strip() for c in code_list if c.strip()]  # 空白除去
                    for code in code_list:
                        if filed_count >= 6:
                            continue    
                        group_code_value = mapping["h_value"]
                        disease_code_value = mapping["l_mappings"].get(code, mapping["default_l"])
                        result.append((f"GENSIKKAN{filed_count}_H", group_code_value, group_code_field))
                        result.append((f"GENSIKKAN{filed_count}_L", disease_code_value, disease_code_field))
                        filed_count = filed_count + 1
                else:
                    ## 群コードが入っていなかったら次のカラムを参照する
                    continue



select 
GENSIKKAN1_L,
GENSIKKAN1_H,
GENSIKKAN1_CMNT,
GENSIKKAN2_L,
GENSIKKAN2_H,
GENSIKKAN2_CMNT,
GENSIKKAN3_L,
GENSIKKAN3_H,
GENSIKKAN3_CMNT,
GENSIKKAN4_L,
GENSIKKAN4_H,
GENSIKKAN4_CMNT,
GENSIKKAN5_L,
GENSIKKAN5_H,
GENSIKKAN5_CMNT
from T_ISHOKU_KIHON_LIVER_LIV where SEITAI_ISYOKU_ID = 40728


疾患コード変換処理

移植時のCSVデータから各疾患ケースごとにコードを変換し、
指定されたフィールド（GENSIKKAN1_L ～ GENSIKKAN5_CMNT）に格納する処理を実装
    N)ListTupleOptionalc                      \ rS rSrS rS\4S jrS\S\\   4S jr	S\
R                  S\\\\\4      4S jrS\
R                  S\\\\\4      4S	 jrS\
R                  S\\\\\4      4S
 jrS\
R                  S\\\\\4      4S jrS\
R                  S\\\\\4      4S jrS\
R                  S\\\\\4      4S jrS\
R                  S\\\\\4      4S jrS\
R(                  S\
R(                  4S jrSrg)DiseaseCodeProcessoriC  c                 \   SSSSSSSSSSSSSS	S
S.U l         SSSSSSSSS.U l        SSSSSSSSSSSSSS.U l        SSSSSS S S!S"S"S#.
U l        0 S$S%_S&S%_S'S(_S)S(_S*S+_S,S+_S-S._S/S._S0S1_S2S1_S3S4_S5S4_S6S7_S8S7_S9S:_S;S:_U l        S<S<S=S=S>.U l        S?S@SASBSC.U l        SDSESFSGSHSISJSK.U l        gL)Mu)   
疾患コード変換処理の初期化
0101010201030104010501060107010801090110)C1BAC2PBCC3PSCC4AlagilleC5zC5'C8C6Caroliu   肝内結石u   先天性胆道拡張症020102020203020402050206)N1HCCN5CCCN2u	   肝芽腫
Hemangiomaz Epithelioid hemangioendothelioma03010302030303040305030603070308)H1HBVH2HCVH4u   アルコール性H3AIHH8NASHzInfantile hepatitiszNeonatal hepatitisu   原因不明の肝硬変0401040204040405040604070408)
HAVF1r4   r9   F4F2u	   薬剤性F3F6u   原因不明M10501WillsonM20502FAPM30503CitrullinemiaM40504zOTC deficiencyM60506zGlycogen Strage DiseaseM80507zMethylmalonic acidemiaM50509TyrosinemiaM70510zPrimary hyperoxaluria06010602)V1u   Budd-Chian症候群V2u   先天性門脈欠損症0701070207030704)zCongenital hepatic fibrosiszPolycystic liver(&amp;kidney)u   慢性肝GVHD:骨髄移植後	   その他01020304050607)CNHFMVre   Ncase1_disease_code_mapcase2_disease_code_mapcase3_disease_code_mapcase4_disease_code_mapcase5_disease_code_mapcase6_disease_code_mapcase7_disease_code_mapgroup_code_map)selfs    /app/disease_code_processor.py__init__DiseaseCodeProcessor.__init__D  s    ff(.	'
# v 06'
# &#)"((.	'
# v"'
#	'
&	'
#V	'
&	'
	'
 &	'
 *6	'
 &		'
 +F		'

 &	'

 4V	'
 &	'
 3F	'
 &	'
 (	'
 &	'
 26	'
# f'
# ,2-3-3	'
# 
    returnc                 v    Uc  g[        U5      R                  5       nU(       a  UR                  5       S;   a  gg)u   
値が有効かどうかをチェック

Args:
    value: チェック対象の値
    
Returns:
    bool: 有効な値の場合True
F)nannonenullT)strstriplower)r|   value	str_values      r}   has_valid_value$DiseaseCodeProcessor.has_valid_value  s8     =J$$&	 IOO-1HHr   r   c                     U R                  U5      (       d  / $ [        U5      R                  S5       Vs/ s H  o"R                  5       PM     nnU Vs/ s H  o"(       d  M  UPM     sn$ s  snf s  snf )u   
カンマ区切りの値を分割

Args:
    value: カンマ区切りの文字列
    
Returns:
    List[str]: 分割された値のリスト
,)r   r   splitr   )r|   r   vvaluess       r}   split_comma_separated_values1DiseaseCodeProcessor.split_comma_separated_values  sd     ##E**I &)Z%5%5c%:;%:'')%:;!'6aQ6'' <'s   A+
A0"A0rowc                 H   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HM  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U SU 3OUn
OUn
UR                  XU
45        MO     U$ )u   
ケース1: 胆汁鬱滞性疾患の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
f   胆汁鬱滞性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）] c   胆汁鬱滞性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rf   r   胆汁鬱滞性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0111   ：)getr   r   r{   r   r   rt   appendr|   r   resultsdisease_code_valuedisease_codesgroup_code_value
group_codetext_commentdisease_code_origdisease_codecomments              r}   !process_case1_cholestatic_disease6DiseaseCodeProcessor.process_case1_cholestatic_disease  sN     !WW  &N  PR  S99:LMN 77  $I  KM  N
 011,,005E1F1L1L1NPTUJ ww   T  VX  Y484H4H4V4Vs<(..0\^ "/66::;LfUL Gv%EQ./s<.AWh 'NNLg>? "/ r   c                 "   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU Hw  n	U R                  R                  U	S5      n
SnU
S:X  a&  U SU 3R                  5       nU(       a  U	 S	U 3OU	nOU SU 3R                  5       nUnUR                  XU45        My     U$ )
u   
ケース2: 腫瘍性疾患の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
`   腫瘍性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   ]   腫瘍性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rg   l   腫瘍性疾患-転移性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]r   腫瘍性疾患-他の原発性（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0207 r   )r   r   r   r{   r   r   ru   r   )r|   r   r   r   r   r   r   metastatic_commentother_primary_commentr   r   r   combined_comments                r}   process_case2_tumor_disease0DiseaseCodeProcessor.process_case2_tumor_disease  s     !WW  &H  JL  M99:LMN 77  $C  EG  H
 011,,005E1F1L1L1NPTUJ !WW  &T  VX  Y@D@T@TUg@h@hS!34::<np #  )]  _a  !bFJFZFZ[pFqFq$9 : @ @ Bwy "/66::;LfUL Gv%&8%9;P:Q#R#X#X#Z IY./s3C2DE_p '9%9;P:Q#R#X#X#Z *NNLg>? "/  r   c                 H   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HM  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U SU 3OUn
OUn
UR                  XU
45        MO     U$ )u   
ケース3: 肝細胞性疾患（肝硬変）の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
r   肝細胞性疾患（肝硬変）-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   o   肝細胞性疾患（肝硬変）-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rh   u~   肝細胞性疾患（肝硬変）-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0309r   )r   r   r   r{   r   r   rv   r   r   s              r}   $process_case3_hepatocellular_disease9DiseaseCodeProcessor.process_case3_hepatocellular_disease  sN     !WW  &Z  \^  _99:LMN 77  $U  WY  Z
 011,,005E1F1L1L1NPTUJ ww   `  bd  e484H4H4V4Vs<(..0\^ "/66::;LfUL Gv%EQ./s<.AWh 'NNLg>? "/ r   c                 H   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HM  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U SU 3OUn
OUn
UR                  XU
45        MO     U$ )u   
ケース4: 急性肝不全の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
`   急性肝不全-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   ]   急性肝不全-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]ri   ul   急性肝不全-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0409r   )r   r   r   r{   r   r   rw   r   r   s              r}   !process_case4_acute_liver_failure6DiseaseCodeProcessor.process_case4_acute_liver_failureE  N     !WW  &H  JL  M99:LMN 77  $C  EG  H
 011,,005E1F1L1L1NPTUJ ww   N  PR  S484H4H4V4Vs<(..0\^ "/66::;LfUL Gv%EQ./s<.AWh 'NNLg>? "/ r   c                 H   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HM  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U SU 3OUn
OUn
UR                  XU
45        MO     U$ )u   
ケース5: 代謝性疾患の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
`   代謝性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   ]   代謝性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rj   ul   代謝性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0511r   )r   r   r   r{   r   r   rx   r   r   s              r}   process_case5_metabolic_disease4DiseaseCodeProcessor.process_case5_metabolic_diseasep  r   r   c                 H   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HM  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U SU 3OUn
OUn
UR                  XU
45        MO     U$ )u   
ケース6: 血管性疾患の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
`   血管性疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   ]   血管性疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rk   ul   血管性疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0603r   )r   r   r   r{   r   r   ry   r   r   s              r}   process_case6_vascular_disease3DiseaseCodeProcessor.process_case6_vascular_disease  r   r   c                 F   / nUR                  SS5      nU R                  U5      nU(       d  U$ UR                  SS5      nSnU R                  U5      (       a3  U R                  R                  [	        U5      R                  5       S5      nUR                  SS5      nU R                  U5      (       a  [	        U5      R                  5       OSnU HL  nU R                  R                  US5      n	Sn
U	S:X  a  U(       a  U U 3OUn
OUn
UR                  XU
45        MN     U$ )u   
ケース7: その他の疾患の処理（カンマ区切り対応）

Returns:
    List[Tuple[str, str, str]]: (疾患コード, 群コード, コメント)のリスト
c   その他の疾患-疾患コード(R)[初回調査用紙（レシピエント／ドナー情報）]r   `   その他の疾患-群コード(R)[初回調査用紙（レシピエント／ドナー情報）]rl   uo   その他の疾患-その他（テキスト）(R)[初回調査用紙（レシピエント／ドナー情報）]0705)r   r   r   r{   r   r   rz   r   r   s              r}   process_case7_other_disease0DiseaseCodeProcessor.process_case7_other_disease  sL     !WW  &K  MO  P99:LMN 77  $F  HJ  K
 011,,005E1F1L1L1NPTUJ ww   Q  SU  V484H4H4V4Vs<(..0\^ "/66::;LfUL Gv%BN./~>Te 'NNLg>? "/ r   dfc           	      >   [        SS5       H  nSUSU S3'   SUSU S3'   SUSU S3'   M      UR                  5        H  u  p4SnU R                  U R                  U R                  U R
                  U R                  U R                  U R                  /nU H~  nU" U5      nU Hd  u  pnUS:  a    OZU	(       a  XR                  USU S34'   U
(       a  XR                  USU S34'   U(       a  XR                  USU S34'   US-  nMf     US:  d  M}    M     M     U$ )	u   
全ての疾患コードを処理してGENSIKKAN1_L～GENSIKKAN5_CMNTに格納

Args:
    df: 処理対象のDataFrame
    
Returns:
    pd.DataFrame: 処理後のDataFrame
      r   	GENSIKKAN_L_H_CMNT   )
rangeiterrowsr   r   r   r   r   r   r   at)r|   r   iidxr   
slot_indexcase_functions	case_funccase_resultsr   r   r   s               r}   process_disease_codes*DiseaseCodeProcessor.process_disease_codes  sS    q!A$&B1#R !$&B1#R !')B1#U#$  HCJ 66009966443300N ,	(~9E5Lg!A~ $AMcYzl"#==>!AKcYzl"#==>DKcYzl%#@@A!OJ :F  >) , &H 	r   rs   N)__name__
__module____qualname____firstlineno__r~   boolr   r   r   r   pdSeriesr   r   r   r   r   r   r   r   	DataFramer   __static_attributes__ r   r}   r   r   C  sm   R
h *(# ($s) ($)RYY )4cSVX[mH\C] )V.ryy .T%SRUBV=W .`)		 )d5QTVY[^Q^K_F` )V)RYY )4cSVX[mH\C] )V)299 )eCQTVYMFZA[ )V)")) )U3PSUX=EY@Z )V)ryy )T%SRUBV=W )V5 5 5r   r   c                  b   [        5       n 0 S/ SQ_S/ SQ_S/ SQ_S/ SQ_S	/ S
Q_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_n[        R                  " U5      n[        S5        [        S5        [        S5        [        S5        U R	                  U5      n[        S5        [        [        U5      5       H  n[        SUS -    S!35        S"n[        S S#5       H  nUR                  U   R                  S$U S%3S&5      nUR                  U   R                  S$U S'3S&5      nUR                  U   R                  S$U S(3S&5      n	U(       d  U(       d	  U	(       d  M  [        S)U S*U S+U S,U	 35        S-nM     U(       a  M  [        S.5        M     U$ )/u&   
カンマ区切り対応のテスト
r   )zC1,PBC,unknown_coder   r   r   )rm   r   r   r   )u   胆汁コメントr   r   r   )r   zHCC,N2,unknown_tumorr   r   )r   rn   r   r   )r   u   転移情報r   r   )r   u   他の原発情報r   r   )r   r   r   r   r   r   r   r   r   r   r   r   u)   === カンマ区切り対応テスト ===u1   行1: 胆汁鬱滞性疾患（3つのコード）u+   行2: 腫瘍性疾患（3つのコード）u   行3: データなしu   
=== 変換結果 ===u   
行r   u
   の結果:Fr   r   r   r   r   r   z  GENSIKKANz: L=z, H=z, CMNT=Tu     (該当データなし))	DiseaseCodeProcessorUpdatedr   r   printr   r   lenilocr   )
	processor	test_datar   	result_dfr   has_dataslotl_valh_valcmnt_vals
             r}   test_updated_processorr   )  sY    ,-Ip  sR 	no| 	}  ]	 	k  mM 	hiv 	w  yQ 	}  ] 	}  K 	z  |H 	klx  	hiu!" 	klx#$ 	hiu%& 	klx'( 	hiu)* 	no{+, 	klx-I2 
i	 B	
56	
=>	
78	
!" //3I	
"#3y>"acU*%&!QKDNN1%))IdV2*>CENN1%))IdV2*>CE ~~a(,,ye-DbIHD6eWDwxjQR   x-. # r   __main__)__doc__pandasr   typingr   r   r   numpynpr   r   r   r   r   r}   <module>r     sG   sl  ( ( c cL:z z r   