fix: COM_施設 項目クリアの考慮漏れ コードの修正。テストもパス。

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2023-11-29 11:57:24 +09:00
parent 5d882ccbc5
commit dcbe8d70a6
2 changed files with 82 additions and 48 deletions

View File

@ -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

View File

@ -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)