优化自动审核判断

This commit is contained in:
2024-10-11 10:03:20 +08:00
parent a11cefb999
commit f3930cc7bd
2 changed files with 81 additions and 65 deletions

View File

@@ -42,3 +42,17 @@ jieba.suggest_freq(('骨', '伤'), True)
jieba.suggest_freq(('感染', ''), True) jieba.suggest_freq(('感染', ''), True)
jieba.suggest_freq(('', ''), True) jieba.suggest_freq(('', ''), True)
jieba.suggest_freq(('', ''), True) jieba.suggest_freq(('', ''), True)
'''
出院记录缺页判断关键词配置
'''
DISCHARGE_KEY = {
'入院诊断': ['入院诊断'],
'入院情况': ['入院情况', '入院时情况', '入院时主要症状'],
'入院日期': ['入院日期', '入院时间'],
'诊疗经过': ['诊疗经过', '住院经过', '治疗经过'],
'出院诊断': ['出院诊断'],
'出院情况': ['出院情况', '出院时情况'],
'出院日期': ['出院日期', '出院时间'],
'出院医嘱': ['出院医嘱']
}

View File

@@ -16,7 +16,7 @@ from db import MysqlSession
from db.mysql import BdYljg, BdYlks, ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxPhrec, ZxIeReview, ZxIeResult from db.mysql import BdYljg, BdYlks, ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxPhrec, ZxIeReview, ZxIeResult
from log import HOSTNAME from log import HOSTNAME
from photo_review import PHHD_BATCH_SIZE, SLEEP_MINUTES, HOSPITAL_ALIAS, HOSPITAL_FILTER, DEPARTMENT_ALIAS, \ from photo_review import PHHD_BATCH_SIZE, SLEEP_MINUTES, HOSPITAL_ALIAS, HOSPITAL_FILTER, DEPARTMENT_ALIAS, \
DEPARTMENT_FILTER DEPARTMENT_FILTER, DISCHARGE_KEY
from services.paddle_services import IE_KEY from services.paddle_services import IE_KEY
from ucloud import ufile from ucloud import ufile
from util import image_util, common_util, html_util, model_util from util import image_util, common_util, html_util, model_util
@@ -446,43 +446,37 @@ def photo_review(pk_phhd, name):
discharge_data = discharge_task(pk_phhd, discharge_result) discharge_data = discharge_task(pk_phhd, discharge_result)
cost_data = cost_task(pk_phhd, cost_result) cost_data = cost_task(pk_phhd, cost_result)
review_result = {
'pk_phhd': pk_phhd,
}
# 三项资料完整性判断 # 三项资料完整性判断
# 三项资料缺项判断 # 三项资料缺项判断
if (bool(settlement_data) and settlement_data['personal_account_payment'] review_result = {
and settlement_data['personal_cash_payment'] and settlement_data['medical_expenses'] 'pk_phhd': pk_phhd,
and settlement_data['personal_account_payment'] + settlement_data['personal_cash_payment'] 'has_settlement': bool(settlement_result),
< settlement_data['medical_expenses']): 'has_discharge': bool(discharge_result),
review_result['has_settlement'] = True 'has_cost': bool(cost_result),
review_result['has_discharge'] = bool(discharge_result) }
review_result['has_cost'] = bool(cost_result) if (review_result['has_settlement'] and settlement_data.get('personal_account_payment')
and settlement_data.get('personal_cash_payment') and settlement_data.get('medical_expenses')):
review_result['has_settlement'] &= (
float(settlement_data['personal_account_payment']) + float(settlement_data['personal_cash_payment'])
< float(settlement_data['medical_expenses'])
)
# 三项资料缺页判断 # 三项资料缺页判断
page_description = [] page_description = []
discharge_key = { if review_result['has_discharge']:
'入院诊断': ['入院诊断'], for discharge_item in DISCHARGE_KEY:
'入院情况': ['入院情况', '入院时情况', '入院时主要症状'], if not all(key in discharge_text for key in DISCHARGE_KEY[discharge_item]):
'入院日期': ['入院日期', '入院时间'], page_description.append(f"《出院记录》缺页")
'诊疗经过': ['诊疗经过', '住院经过', '治疗经过'], break
'出院诊断': ['出院诊断'],
'出院情况': ['出院情况', '出院时情况'],
'出院日期': ['出院日期', '出院时间'],
'出院医嘱': ['出院医嘱']
}
for discharge_item in discharge_key:
if not all(key in discharge_text for key in discharge_key[discharge_item]):
page_description.append(f"《出院记录》缺{discharge_item}")
break
cost_missing_page = {} if review_result['has_cost']:
if cost_data['page_nums']: cost_missing_page = {}
page_nums = cost_data['page_nums'].split(',') if cost_data.get('page_nums'):
required_set = set(range(1, cost_data['page_count'] + 1)) page_nums = cost_data['page_nums'].split(',')
page_set = set(page_nums) required_set = set(range(1, cost_data['page_count'] + 1))
cost_missing_page = required_set - page_set page_set = set(page_nums)
if cost_missing_page: cost_missing_page = required_set - page_set
page_description.append(f"《住院费用清单》,缺第{','.join(cost_missing_page)}") if cost_missing_page:
page_description.append(f"《住院费用清单》,缺第{','.join(cost_missing_page)}")
if page_description: if page_description:
review_result['full_page'] = False review_result['full_page'] = False
@@ -490,52 +484,60 @@ def photo_review(pk_phhd, name):
else: else:
review_result['full_page'] = True review_result['full_page'] = True
if (review_result['has_settlement'] and review_result['has_discharge'] and review_result['has_cost'] review_result['integrity'] = (review_result['has_settlement'] and review_result['has_discharge']
and review_result['full_page']): and review_result['has_cost'] and review_result['full_page'])
review_result['integrity'] = True
# 三项资料一致性判断 # 三项资料一致性判断
# 姓名一致性 # 姓名一致性
unique_name = {settlement_data['name'], discharge_data['name'], cost_data['name']} name_list = [settlement_data['name'], discharge_data['name'], cost_data['name']]
if len(unique_name) == 1: if sum(not bool(n) for n in name_list) > 1: # 有2个及以上空值直接认为都不一致
review_result['name_match'] = '1' if name == settlement_data['name'] else '5'
elif len(unique_name) == 2:
if settlement_data['name'] != discharge_data['name'] and settlement_data['name'] != cost_data['name']:
review_result['name_match'] = '2'
elif discharge_data['name'] != settlement_data['name'] and discharge_data['name'] != cost_data['name']:
review_result['name_match'] = '3'
else:
review_result['name_match'] = '4'
else:
review_result['name_match'] = '0' review_result['name_match'] = '0'
else:
unique_name = set(name_list)
if len(unique_name) == 1:
review_result['name_match'] = '1' if name == unique_name.pop() else '5'
elif len(unique_name) == 2:
if settlement_data['name'] != discharge_data['name'] and settlement_data['name'] != cost_data['name']:
review_result['name_match'] = '2'
elif discharge_data['name'] != settlement_data['name'] and discharge_data['name'] != cost_data['name']:
review_result['name_match'] = '3'
else:
review_result['name_match'] = '4'
else:
review_result['name_match'] = '0'
# 住院日期一致性 # 住院日期一致性
if (settlement_data['admission_date'] == discharge_data['admission_date'] if (settlement_data['admission_date'] and discharge_data['admission_date']
and settlement_data['discharge_date'] and discharge_data['discharge_date']
and settlement_data['admission_date'] == discharge_data['admission_date']
and settlement_data['discharge_date'] == discharge_data['discharge_date']): and settlement_data['discharge_date'] == discharge_data['discharge_date']):
review_result['admission_date_match'] = '1' review_result['admission_date_match'] = '1'
else: else:
review_result['admission_date_match'] = '0' review_result['admission_date_match'] = '0'
# 出院日期一致性 # 出院日期一致性
unique_discharge_date = {settlement_data['discharge_date'], discharge_data['discharge_date'], discharge_date_list = [settlement_data['discharge_date'], discharge_data['discharge_date'],
cost_data['discharge_date']} cost_data['discharge_date']]
if len(unique_discharge_date) == 1: if sum(not bool(d) for d in discharge_date_list) > 1:
review_result['discharge_date_match'] = '1'
elif len(unique_discharge_date) == 2:
if (settlement_data['discharge_date'] != discharge_data['discharge_date']
and settlement_data['discharge_date'] != cost_data['discharge_date']):
review_result['discharge_date_match'] = '2'
elif (discharge_data['discharge_date'] != settlement_data['discharge_date']
and discharge_data['discharge_date'] != cost_data['discharge_date']):
review_result['discharge_date_match'] = '3'
else:
review_result['discharge_date_match'] = '4'
else:
review_result['discharge_date_match'] = '0' review_result['discharge_date_match'] = '0'
else:
unique_discharge_date = set(discharge_date_list)
if len(unique_discharge_date) == 1:
review_result['discharge_date_match'] = '1'
elif len(unique_discharge_date) == 2:
if (settlement_data['discharge_date'] != discharge_data['discharge_date']
and settlement_data['discharge_date'] != cost_data['discharge_date']):
review_result['discharge_date_match'] = '2'
elif (discharge_data['discharge_date'] != settlement_data['discharge_date']
and discharge_data['discharge_date'] != cost_data['discharge_date']):
review_result['discharge_date_match'] = '3'
else:
review_result['discharge_date_match'] = '4'
else:
review_result['discharge_date_match'] = '0'
if (review_result['name_match'] == '1' and review_result['admission_date_match'] == '1' review_result['consistency'] = (review_result['name_match'] == '1' and review_result['admission_date_match'] == '1'
and review_result['discharge_date_match'] == '1'): and review_result['discharge_date_match'] == '1')
review_result['consistency'] = True
review_result['success'] = review_result['integrity'] and review_result['consistency'] review_result['success'] = review_result['integrity'] and review_result['consistency']
save_or_update_ie(ZxIeReview, pk_phhd, review_result) save_or_update_ie(ZxIeReview, pk_phhd, review_result)