diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_inst_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_inst_mapper.py index 3802ed62..cbf29145 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_inst_mapper.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_inst_mapper.py @@ -263,6 +263,10 @@ class ComInstMapper(UltmarcTableMapper): def __make_upsert_query(self): # レコードの存在確認(施設) record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter) + + # 「@」による項目クリアを設定 + self.__set_clearing_item() + if record_count[0]['count_num'] == 0: # 存在しない場合はInsert self.queries.append(self.INSERT_INST_QUERY) @@ -344,96 +348,64 @@ class ComInstMapper(UltmarcTableMapper): # 未確認フラグ if len(self.record.uncheck_flag) > 0: set_clauses.append('unconf_flg = :uncheck_flag') - if self.record.uncheck_flag == '@': - self.query_parameter['uncheck_flag'] = None # 削除予定理由コード if len(self.record.hpdel_code) > 0: set_clauses.append('delete_sche_reason_cd = :hpdel_code') - if self.record.hpdel_code == '@': - self.query_parameter['hpdel_code'] = None # 重複時相手先コード if len(self.record.dup_opp_code) > 0: set_clauses.append('dup_opp_cd = :dup_opp_code') - if self.record.duphp_id == '@': - self.query_parameter['dup_opp_code'] = None # 住所不明理由コード if len(self.record.hp_addr_lost_code) > 0: set_clauses.append('addr_unknown_reason_cd = :hp_addr_lost_code') - if self.record.hp_addr_lost_code == '@': - self.query_parameter['hp_addr_lost_code'] = None # 電話番号なしフラグ if len(self.record.tel_nothing_flag) > 0: set_clauses.append('phone_number_non_flg = :tel_nothing_flag') - if self.record.tel_nothing_flag == '@': - self.query_parameter['tel_nothing_flag'] = None # 電話番号 if len(self.record.hp_tel) > 0: set_clauses.append('inst_phone_number = :hp_tel') - if self.record.hp_tel == '@': - self.query_parameter['hp_tel'] = None # 施設代表者コード if len(self.record.inst_repre_code) > 0: set_clauses.append('inst_repre_cd = :inst_repre_code') - if self.record.president_id == '@': - self.query_parameter['inst_repre_code'] = None # 代表者(カナ) if len(self.record.president_kana) > 0: set_clauses.append('inst_repre_kana = :president_kana') - if self.record.president_kana == '@': - self.query_parameter['president_kana'] = None # 代表者(漢字) ※「@」が大文字 if len(self.record.president) > 0: set_clauses.append('inst_repre = :president') - if self.record.president == '@': - self.query_parameter['president'] = None # 開業予定フラグ・開業予定年月 if len(self.record.open_flag + self.record.open_year_month) > 0: set_clauses.append('estab_sche_flg = :open_flag') set_clauses.append('estab_sche_ym = :open_year_month') - if self.record.open_flag == '@': - self.query_parameter['open_flag'] = None - self.query_parameter['open_year_month'] = None # 休院フラグ・休院開始年月 if len(self.record.close_flag + self.record.close_year_month) > 0: set_clauses.append('close_flg = :close_flag') set_clauses.append('close_start_ym = :close_year_month') - if self.record.close_flag == '@': - self.query_parameter['close_flag'] = None - self.query_parameter['close_year_month'] = None # 関連大学親コード if len(self.record.univ_prnt_code) > 0: set_clauses.append('rltd_univ_prnt_cd = :univ_prnt_code') - if self.record.assoc_parrent_id == '@': - self.query_parameter['univ_prnt_code'] = None # 病棟閉鎖フラグ if len(self.record.close_flag2) > 0: set_clauses.append('ward_abolish_flg = :close_flag2') - if self.record.close_flag2 == '@': - self.query_parameter['close_flag2'] = None # 病床数(定員) if self.record.bed_num is not None: set_clauses.append('bed_num = :bed_num') - if self.record.bed_num == '@': - self.query_parameter['bed_num'] = None # 許可病床メンテ日付 if len(self.record.bed_class_maint_date) > 0: set_clauses.append('prmit_bed_maint_ymd = :bed_class_maint_date') - if self.record.bed_class_maint_date == '@': - self.query_parameter['bed_class_maint_date'] = None # 許可ベッド数(合計、精神、結核、感染、その他、一般病床、療養病床) if not self.record.prmit_bed.count(None) == len(self.record.prmit_bed): @@ -444,14 +416,6 @@ class ComInstMapper(UltmarcTableMapper): set_clauses.append('prmit_bed_num_other = :bed_num_gen') set_clauses.append('prmit_bed_num_gen = :bed_num_gen2') set_clauses.append('prmit_bed_num_rcup = :bed_num_rest') - if self.record.bed_num_sum == '@': - self.query_parameter['bed_num_sum'] = None - self.query_parameter['bed_num_psy'] = None - self.query_parameter['bed_num_tub'] = None - self.query_parameter['bed_num_epi'] = None - self.query_parameter['bed_num_gen'] = None - self.query_parameter['bed_num_gen2'] = None - self.query_parameter['bed_num_rest'] = None # 検査項目(微生物、血清、血液、病理、寄生虫、生化、RI) if sum(len(item) for item in self.record.insp_item) > 0: @@ -462,14 +426,6 @@ class ComInstMapper(UltmarcTableMapper): set_clauses.append('insp_item_paras = :inspect_code5') set_clauses.append('insp_item_biochem = :inspect_code6') set_clauses.append('insp_item_ri = :inspect_code7') - if self.record.inspect_code1 == '@': - self.query_parameter['inspect_code1'] = None - self.query_parameter['inspect_code2'] = None - self.query_parameter['inspect_code3'] = None - self.query_parameter['inspect_code4'] = None - self.query_parameter['inspect_code5'] = None - self.query_parameter['inspect_code6'] = None - self.query_parameter['inspect_code7'] = None update_columns = ','.join(set_clauses) # 何も更新項目が無い場合は更新処理は行わない @@ -494,6 +450,7 @@ class ComInstMapper(UltmarcTableMapper): # 削除 self.queries.append(self.PHYSICAL_DELETE_TRT_QUERY) + # 診療科目の1つ目の値がクリアマーク(@)の場合、診療科目を登録しない if self.record.medsbj_code[0] == "@": return @@ -516,10 +473,15 @@ class ComInstMapper(UltmarcTableMapper): record_count = self.db.execute_select(self.RECORD_EXISTS_SPCARE_QUERY, self.query_parameter) # 存在しない場合はInsert if record_count[0]['count_num'] == 0: + # 特養医務室の集合項目の値がクリアマーク(@)の場合、登録しない + if self.record.dcfhp_92id == "@": + return + self.queries.append(self.INSERT_SPCARE_QUERY) return # 存在する場合はUpdate + # 特養医務室の集合項目の値がクリアマーク(@)の場合、DCF親施設コードをクリアし、削除日を設定 if self.record.dcfhp_92id == "@": self.query_parameter['dcf_prnt_inst_code'] = None self.query_parameter['delete_ymd'] = self.query_parameter['execute_date_str_ymd'] @@ -529,3 +491,73 @@ class ComInstMapper(UltmarcTableMapper): self.queries.append(self.UPDATE_SPCARE_QUERY) return + + def __set_clearing_item(self): + + # 未確認フラグ + if self.record.uncheck_flag == '@': + self.query_parameter['uncheck_flag'] = None + # 削除予定理由コード + if self.record.hpdel_code == '@': + self.query_parameter['hpdel_code'] = None + # 重複時相手先コード + if self.record.duphp_id == '@': + self.query_parameter['dup_opp_code'] = None + # 住所不明理由コード + if self.record.hp_addr_lost_code == '@': + self.query_parameter['hp_addr_lost_code'] = None + # 電話番号なしフラグ + if self.record.tel_nothing_flag == '@': + self.query_parameter['tel_nothing_flag'] = None + # 電話番号 + if self.record.hp_tel == '@': + self.query_parameter['hp_tel'] = None + # 施設代表者コード + if self.record.president_id == '@': + self.query_parameter['inst_repre_code'] = None + # 代表者(カナ) + if self.record.president_kana == '@': + self.query_parameter['president_kana'] = None + # 代表者(漢字) ※全角文字のため、クリアマーク「@」が大文字 + if self.record.president == '@': + self.query_parameter['president'] = None + # 開業予定フラグ・開業予定年月 + if self.record.open_flag == '@': + self.query_parameter['open_flag'] = None + self.query_parameter['open_year_month'] = None + # 休院フラグ・休院開始年月 + if self.record.close_flag == '@': + self.query_parameter['close_flag'] = None + self.query_parameter['close_year_month'] = None + # 関連大学親コード + if self.record.assoc_parrent_id == '@': + self.query_parameter['univ_prnt_code'] = None + # 病棟閉鎖フラグ + if self.record.close_flag2 == '@': + self.query_parameter['close_flag2'] = None + # 病床数(定員) + if self.record.bed_num == '@': + self.query_parameter['bed_num'] = None + # 許可病床メンテ日付 + if self.record.bed_class_maint_date == '@': + self.query_parameter['bed_class_maint_date'] = None + # 許可ベッド数(合計、精神、結核、感染、その他、一般病床、療養病床) + if self.record.bed_num_sum == '@': + self.query_parameter['bed_num_sum'] = None + self.query_parameter['bed_num_psy'] = None + self.query_parameter['bed_num_tub'] = None + self.query_parameter['bed_num_epi'] = None + self.query_parameter['bed_num_gen'] = None + self.query_parameter['bed_num_gen2'] = None + self.query_parameter['bed_num_rest'] = None + # 検査項目(微生物、血清、血液、病理、寄生虫、生化、RI) + if self.record.inspect_code1 == '@': + self.query_parameter['inspect_code1'] = None + self.query_parameter['inspect_code2'] = None + self.query_parameter['inspect_code3'] = None + self.query_parameter['inspect_code4'] = None + self.query_parameter['inspect_code5'] = None + self.query_parameter['inspect_code6'] = None + self.query_parameter['inspect_code7'] = None + + return diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_inst/test_com_inst_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_inst/test_com_inst_mapper.py index f408fcca..a3554692 100644 --- a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_inst/test_com_inst_mapper.py +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_inst/test_com_inst_mapper.py @@ -134,6 +134,8 @@ class TestComInstMapper: # 期待値ファイルを読み込む(特養医務室データ) expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_spcare_insert.csv')) + actual_record_count = self.db.execute_select('SELECT COUNT(*) AS count_num FROM src05.com_spcare_med_office_dat')[0]['count_num'] + assert actual_record_count == len(expect_data_list), 'DBのレコード件数が期待値の件数と一致すること' primary_keys = [f"'{primary_key['dcf_chld_inst_cd']}'" for primary_key in expect_data_list] actual_select_sql = f"SELECT * FROM src05.com_spcare_med_office_dat WHERE dcf_chld_inst_cd IN ({','.join(primary_keys)})" actual_data_list = self.db.execute_select(actual_select_sql)