Revert "整理项目结构,优化配置项"

This reverts commit ab15cb1fc3.
This commit is contained in:
2024-07-15 15:18:39 +08:00
parent 13575fb2aa
commit 2f650dd880
33 changed files with 506 additions and 275 deletions

View File

@@ -1,15 +0,0 @@
# 程序异常短信配置
ERROR_EMAIL_CONFIG = {
# SMTP服务器地址
"smtp_server": "smtp.163.com",
# 连接SMTP的端口
"port": 994,
# 发件人邮箱地址请确保开启了SMTP邮件服务
"sender": "EchoLiu618@163.com",
# 授权码--用于登录第三方邮件客户端的专用密码,不是邮箱密码
"authorization_code": "OKPQLIIVLVGRZYVH",
# 收件人邮箱地址
"receivers": ["1515783401@qq.com"],
# 尝试次数
"retry_times": 3,
}

View File

@@ -3,7 +3,7 @@ import logging
import smtplib import smtplib
from email.mime.text import MIMEText from email.mime.text import MIMEText
from auto_email import ERROR_EMAIL_CONFIG from config.email import ERROR_EMAIL_CONFIG
def send_error_email(program_name, error_name, error_detail): def send_error_email(program_name, error_name, error_detail):

View File

@@ -1,15 +1,15 @@
# 自动生成数据库表和sqlalchemy对应的Model # 自动生成数据库表和sqlalchemy对应的Model
import subprocess import subprocess
from db import DB_URL from config.mysql import DB_URL
if __name__ == '__main__': if __name__ == '__main__':
table = input("请输入表名:") table = input("请输入表名:")
out_file = f"db/{table}.py" out_file = f"photo_review/entity/{table}.py"
command = f"sqlacodegen {DB_URL} --outfile={out_file} --tables={table}" command = f"sqlacodegen {DB_URL} --outfile={out_file} --tables={table}"
try: try:
subprocess.run(command, shell=True, check=True) subprocess.run(command, shell=True, check=True)
print(f"{table}.py文件生成成功检查并复制到合适的文件中") print(f"{table}.py文件生成成功手动调整Base的声明")
except Exception as e: except Exception as e:
print(f"生成{table}.py文件时发生错误: {e}") print(f"生成{table}.py文件时发生错误: {e}")

View File

@@ -1 +0,0 @@

View File

@@ -9,9 +9,15 @@ from itertools import groupby
import requests import requests
from PIL import ImageDraw, Image, ImageFont from PIL import ImageDraw, Image, ImageFont
from photo_review.entity.zx_ie_cost import ZxIeCost
from photo_review.entity.zx_ie_discharge import ZxIeDischarge
from photo_review.entity.zx_ie_settlement import ZxIeSettlement
from photo_review.entity.zx_phhd import ZxPhhd
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from db import MysqlSession from config.mysql import MysqlSession
from db.mysql import ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxOcr, ZxPhrec from photo_review.entity.zx_ocr import ZxOcr
from photo_review.entity.zx_phrec import ZxPhrec
from ucloud import ucloud from ucloud import ucloud

15
config/email.py Normal file
View File

@@ -0,0 +1,15 @@
# 程序异常短信配置
ERROR_EMAIL_CONFIG = {
# SMTP服务器地址
"smtp_server": "smtp.163.com",
# 连接SMTP的端口
"port": 994,
# 发件人邮箱地址请确保开启了SMTP邮件服务
"sender": "EchoLiu618@163.com",
# 授权码--用于登录第三方邮件客户端的专用密码,不是邮箱密码
"authorization_code": "OKPQLIIVLVGRZYVH",
# 收件人邮箱地址
"receivers": ["1515783401@qq.com"],
# 尝试次数
"retry_times": 3,
}

39
config/keys.py Normal file
View File

@@ -0,0 +1,39 @@
# 信息抽取关键词配置
# 患者姓名
PATIENT_NAME = ["患者姓名"]
# 入院日期
ADMISSION_DATE = ["入院日期"]
# 出院日期
DISCHARGE_DATE = ["出院日期"]
# 发生医疗费
MEDICAL_EXPENSES = ["费用总额"]
# 个人现金支付
PERSONAL_CASH_PAYMENT = ["个人现金支付"]
# 个人账户支付
PERSONAL_ACCOUNT_PAYMENT = ["个人账户支付"]
# 个人自费金额
PERSONAL_FUNDED_AMOUNT = ["自费金额"]
# 医保类别
MEDICAL_INSURANCE_TYPE = ["医保类型"]
# 就诊医院
HOSPITAL = ["医院"]
# 就诊科室
DEPARTMENT = ["科室"]
# 主治医生
DOCTOR = ["主治医生"]
# 住院号
ADMISSION_ID = ["住院号"]
# 医保结算单号码
SETTLEMENT_ID = ["医保结算单号码"]
# 年龄
AGE = ["年龄"]
SETTLEMENT_LIST_SCHEMA = \
PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES + PERSONAL_CASH_PAYMENT \
+ PERSONAL_ACCOUNT_PAYMENT + PERSONAL_FUNDED_AMOUNT + MEDICAL_INSURANCE_TYPE + ADMISSION_ID + SETTLEMENT_ID
DISCHARGE_RECORD_SCHEMA = \
HOSPITAL + DEPARTMENT + PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + DOCTOR + ADMISSION_ID + AGE
COST_LIST_SCHEMA = PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES

View File

@@ -38,4 +38,4 @@ LOGGING_CONFIG = {
'propagate': False, # 是否向上级传播日志信息 'propagate': False, # 是否向上级传播日志信息
}, },
}, },
} }

17
config/photo_review.py Normal file
View File

@@ -0,0 +1,17 @@
# 项目奔溃的重试次数
RETRY_TIME = 1
# 每次从数据库获取的案子数量
PHHD_BATCH_SIZE = 10
# 没有查询到案子的等待时间(分钟)
SLEEP_MINUTES = 5
# 是否发送报错邮件
SEND_ERROR_EMAIL = True
# 是否开启布局分析
LAYOUT_ANALYSIS = False
# 可使用的GPU
CUDA_VISIBLE_DEVICES = "1"

12
config/ucloud.py Normal file
View File

@@ -0,0 +1,12 @@
# 公钥
PUBLIC_KEY = "4Z7QYI7qml36QRjcCjKrls7aHl1R6H6uq"
# 私钥
PRIVATE_KEY = "FIdW1Kev1Ge3K7GHXzSLyGG1wTnaG6LE9BxmIVubcCaG"
# 桶
BUCKET = "drg100"
# 上传后缀
UPLOAD_SUFFIX = ".cn-sh2.ufileos.com"
# 下载后缀
DOWNLOAD_SUFFIX = ".cn-sh2.ufileos.com"
# 私空间文件地址过期时间(秒)
PRIVATE_EXPIRES = 3600

View File

@@ -1,8 +1,9 @@
import logging.config import logging.config
import os
import traceback import traceback
from auto_email.error_email import send_error_email from auto_email.error_email import send_error_email
from log import LOGGING_CONFIG from config.log import LOGGING_CONFIG
from photo_review.photo_review import main from photo_review.photo_review import main
# 项目必须从此处启动,否则代码中的相对路径可能导致错误的发生 # 项目必须从此处启动,否则代码中的相对路径可能导致错误的发生
@@ -17,5 +18,4 @@ if __name__ == '__main__':
main() main()
except Exception as e: except Exception as e:
log.error(traceback.format_exc()) log.error(traceback.format_exc())
send_error_email(program_name='照片审核关键信息抽取脚本', error_name=repr(e), send_error_email(program_name='照片审核关键信息抽取脚本', error_name=repr(e), error_detail=traceback.format_exc())
error_detail=traceback.format_exc())

View File

@@ -2,164 +2,7 @@
from sqlalchemy import Column, DECIMAL, Date, DateTime, Index, String, text, LargeBinary from sqlalchemy import Column, DECIMAL, Date, DateTime, Index, String, text, LargeBinary
from sqlalchemy.dialects.mysql import BIT, CHAR, INTEGER, TINYINT, VARCHAR from sqlalchemy.dialects.mysql import BIT, CHAR, INTEGER, TINYINT, VARCHAR
from db import Base from config.mysql import Base
class BdYljg(Base):
__tablename__ = 'bd_yljg'
pk_yljg = Column(INTEGER(11), primary_key=True, comment='医疗机构主键')
code = Column(String(12), nullable=False, unique=True, comment='编码')
name = Column(String(200), comment='名称')
cpym = Column(String(40), comment='拼音码')
pk_yldj = Column(INTEGER(11), comment='医疗机构等级')
pk_father = Column(INTEGER(11), comment='上级医疗机构')
address = Column(String(300), comment='地址')
pk_region = Column(INTEGER(11), comment='行政区划主键')
depiction = Column(String(100), comment='备注')
creator = Column(String(20), comment='创建人')
creationtime = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
modifier = Column(String(20), comment='最后修改人')
modifiedtime = Column(DateTime, comment='最后修改时间')
enablestate = Column(TINYINT(4), server_default=text("'1'"), comment='启用状态')
create_by = Column(String(100), comment='创建人')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
update_by = Column(String(100), comment='更新人')
update_time = Column(DateTime, comment='更新时间')
del_flag = Column(TINYINT(1), server_default=text("'0'"), comment='删除标记')
class BdYlks(Base):
__tablename__ = 'bd_ylks'
pk_ylks = Column(INTEGER(11), primary_key=True, comment='科室主键')
code = Column(String(12), nullable=False, index=True, comment='编码')
name = Column(String(200), comment='名称')
cpym = Column(String(40), comment='拼音码')
pk_father = Column(INTEGER(11))
cIsBottom = Column(CHAR(1), comment='是否底层')
depiction = Column(String(100), comment='备注')
creator = Column(String(20), comment='创建人')
creationtime = Column(DateTime, comment='创建时间')
modifier = Column(String(20), comment='最后修改人')
modifiedtime = Column(DateTime, comment='最后修改时间')
enablestate = Column(TINYINT(4), server_default=text("'1'"), comment='启用状态')
create_by = Column(String(100), comment='创建人')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
update_by = Column(String(100), comment='更新人')
update_time = Column(DateTime, comment='更新时间')
del_flag = Column(TINYINT(1), server_default=text("'0'"), comment='删除标记')
class ZxIeCost(Base):
__tablename__ = 'zx_ie_cost'
pk_ie_cost = Column(INTEGER(11), primary_key=True, comment='费用明细信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
name = Column(String(30), comment='患者姓名')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
medical_expenses_str = Column(String(255), comment='费用总额字符串')
medical_expenses = Column(DECIMAL(18, 2), comment='费用总额')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(255), comment='修改人')
class ZxIeCostDetail(Base):
__tablename__ = 'zx_ie_cost_detail'
pk_ie_cost_detail = Column(INTEGER(11), primary_key=True, comment='费用明细详情主键')
pk_ie_cost = Column(INTEGER(11), nullable=False, comment='费用明细信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, comment='报销案子主键')
_class = Column('class', String(255), comment='类别')
name = Column(String(255), comment='名称')
specification = Column(String(255), comment='规格')
price = Column(DECIMAL(18, 2), comment='单价')
quantity = Column(INTEGER(11), comment='数量')
amount = Column(DECIMAL(18, 2), comment='金额(单价 * 数量)')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(30), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(30), comment='修改人')
class ZxIeDischarge(Base):
__tablename__ = 'zx_ie_discharge'
pk_ie_discharge = Column(INTEGER(11), primary_key=True, comment='出院记录信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
content = Column(String(5000), comment='详细内容')
hospital = Column(String(255), comment='医院')
pk_yljg = Column(INTEGER(11), comment='医院主键')
department = Column(String(255), comment='科室')
pk_ylks = Column(INTEGER(11), comment='科室主键')
name = Column(String(30), comment='患者姓名')
age = Column(INTEGER(3), comment='年龄')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
doctor = Column(String(30), comment='主治医生')
admission_id = Column(String(50), comment='住院号')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(255), comment='修改人')
class ZxIeSettlement(Base):
__tablename__ = 'zx_ie_settlement'
pk_ie_settlement = Column(INTEGER(11), primary_key=True, comment='结算清单信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
name = Column(String(30), comment='患者姓名')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
medical_expenses_str = Column(String(255), comment='费用总额字符串')
medical_expenses = Column(DECIMAL(18, 2), comment='费用总额')
personal_cash_payment_str = Column(String(255), comment='个人现金支付字符串')
personal_cash_payment = Column(DECIMAL(18, 2), comment='个人现金支付')
personal_account_payment_str = Column(String(255), comment='个人账户支付字符串')
personal_account_payment = Column(DECIMAL(18, 2), comment='个人账户支付')
personal_funded_amount_str = Column(String(255), comment='自费金额字符串')
personal_funded_amount = Column(DECIMAL(18, 2), comment='自费金额')
medical_insurance_type_str = Column(String(255), comment='医保类型字符串')
medical_insurance_type = Column(String(40), comment='医保类型')
admission_id = Column(String(50), comment='住院号')
settlement_id = Column(String(50), comment='医保结算单号码')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(255), comment='修改人')
class ZxOcr(Base):
__tablename__ = 'zx_ocr'
pk_ocr = Column(INTEGER(11), primary_key=True, comment='图片OCR识别主键')
pk_phhd = Column(INTEGER(11), nullable=False, comment='报销单主键')
pk_phrec = Column(INTEGER(11), nullable=False, comment='图片主键')
id = Column(INTEGER(11), nullable=False, comment='识别批次')
cfjaddress = Column(String(200), nullable=False, comment='云存储文件名')
content = Column(String(5000), comment='OCR识别内容')
rotation_angle = Column(INTEGER(11), comment='旋转角度')
x_offset = Column(INTEGER(11), comment='x轴偏移量')
y_offset = Column(INTEGER(11), comment='y轴偏移量')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(30), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(30), comment='修改人')
class ZxPhhd(Base): class ZxPhhd(Base):

View File

@@ -13,11 +13,12 @@ from paddlenlp.utils.doc_parser import DocParser
from sqlalchemy import update from sqlalchemy import update
from auto_email.error_email import send_error_email from auto_email.error_email import send_error_email
from db import MysqlSession from config.log import LOGGING_CONFIG
from db.mysql import ZxPhrec, ZxPhhd from config.mysql import MysqlSession
from log import LOGGING_CONFIG from config.photo_review import PHHD_BATCH_SIZE, SLEEP_MINUTES
from photo_review import PHHD_BATCH_SIZE, SLEEP_MINUTES from config.ucloud import BUCKET
from ucloud import BUCKET, ucloud from models import ZxPhrec, ZxPhhd
from ucloud import ucloud
DOC_PARSER = DocParser(use_gpu=True, device_id=1) DOC_PARSER = DocParser(use_gpu=True, device_id=1)

View File

@@ -1,73 +1,13 @@
from paddlenlp import Taskflow from paddlenlp import Taskflow
from paddleocr import PaddleOCR from paddleocr import PaddleOCR
""" from config import keys
项目配置
"""
# 项目奔溃的重试次数
RETRY_TIME = 1
# 每次从数据库获取的案子数量 SETTLEMENT_IE = Taskflow("information_extraction", schema=keys.SETTLEMENT_LIST_SCHEMA, model="uie-x-base",
PHHD_BATCH_SIZE = 10
# 没有查询到案子的等待时间(分钟)
SLEEP_MINUTES = 5
# 是否发送报错邮件
SEND_ERROR_EMAIL = True
# 是否开启布局分析
LAYOUT_ANALYSIS = False
# 可使用的GPU
CUDA_VISIBLE_DEVICES = "1"
"""
信息抽取关键词配置
"""
# 患者姓名
PATIENT_NAME = ["患者姓名"]
# 入院日期
ADMISSION_DATE = ["入院日期"]
# 出院日期
DISCHARGE_DATE = ["出院日期"]
# 发生医疗费
MEDICAL_EXPENSES = ["费用总额"]
# 个人现金支付
PERSONAL_CASH_PAYMENT = ["个人现金支付"]
# 个人账户支付
PERSONAL_ACCOUNT_PAYMENT = ["个人账户支付"]
# 个人自费金额
PERSONAL_FUNDED_AMOUNT = ["自费金额"]
# 医保类别
MEDICAL_INSURANCE_TYPE = ["医保类型"]
# 就诊医院
HOSPITAL = ["医院"]
# 就诊科室
DEPARTMENT = ["科室"]
# 主治医生
DOCTOR = ["主治医生"]
# 住院号
ADMISSION_ID = ["住院号"]
# 医保结算单号码
SETTLEMENT_ID = ["医保结算单号码"]
# 年龄
AGE = ["年龄"]
SETTLEMENT_LIST_SCHEMA = \
PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES + PERSONAL_CASH_PAYMENT \
+ PERSONAL_ACCOUNT_PAYMENT + PERSONAL_FUNDED_AMOUNT + MEDICAL_INSURANCE_TYPE + ADMISSION_ID + SETTLEMENT_ID
DISCHARGE_RECORD_SCHEMA = \
HOSPITAL + DEPARTMENT + PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + DOCTOR + ADMISSION_ID + AGE
COST_LIST_SCHEMA = PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES
SETTLEMENT_IE = Taskflow("information_extraction", schema=SETTLEMENT_LIST_SCHEMA, model="uie-x-base",
task_path="config/model/settlement_list_model", layout_analysis=False, precision='fp16') task_path="config/model/settlement_list_model", layout_analysis=False, precision='fp16')
DISCHARGE_IE = Taskflow("information_extraction", schema=DISCHARGE_RECORD_SCHEMA, model="uie-x-base", DISCHARGE_IE = Taskflow("information_extraction", schema=keys.DISCHARGE_RECORD_SCHEMA, model="uie-x-base",
task_path="config/model/discharge_record_model", layout_analysis=False, precision='fp16') task_path="config/model/discharge_record_model", layout_analysis=False, precision='fp16')
COST_IE = Taskflow("information_extraction", schema=COST_LIST_SCHEMA, model="uie-x-base", device_id=1, COST_IE = Taskflow("information_extraction", schema=keys.COST_LIST_SCHEMA, model="uie-x-base", device_id=1,
task_path="config/model/cost_list_model", layout_analysis=False, precision='fp16') task_path="config/model/cost_list_model", layout_analysis=False, precision='fp16')
OCR = PaddleOCR(use_angle_cls=False, lang="ch", show_log=False, gpu_id=1) OCR = PaddleOCR(use_angle_cls=False, lang="ch", show_log=False, gpu_id=1)

View File

View File

@@ -0,0 +1,29 @@
# coding: utf-8
from sqlalchemy import Column, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER, TINYINT
from config.mysql import Base
class BdYljg(Base):
__tablename__ = 'bd_yljg'
pk_yljg = Column(INTEGER(11), primary_key=True, comment='医疗机构主键')
code = Column(String(12), nullable=False, unique=True, comment='编码')
name = Column(String(200), comment='名称')
cpym = Column(String(40), comment='拼音码')
pk_yldj = Column(INTEGER(11), comment='医疗机构等级')
pk_father = Column(INTEGER(11), comment='上级医疗机构')
address = Column(String(300), comment='地址')
pk_region = Column(INTEGER(11), comment='行政区划主键')
depiction = Column(String(100), comment='备注')
creator = Column(String(20), comment='创建人')
creationtime = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
modifier = Column(String(20), comment='最后修改人')
modifiedtime = Column(DateTime, comment='最后修改时间')
enablestate = Column(TINYINT(4), server_default=text("'1'"), comment='启用状态')
create_by = Column(String(100), comment='创建人')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
update_by = Column(String(100), comment='更新人')
update_time = Column(DateTime, comment='更新时间')
del_flag = Column(TINYINT(1), server_default=text("'0'"), comment='删除标记')

View File

@@ -0,0 +1,27 @@
# coding: utf-8
from sqlalchemy import CHAR, Column, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER, TINYINT
from config.mysql import Base
class BdYlks(Base):
__tablename__ = 'bd_ylks'
pk_ylks = Column(INTEGER(11), primary_key=True, comment='科室主键')
code = Column(String(12), nullable=False, index=True, comment='编码')
name = Column(String(200), comment='名称')
cpym = Column(String(40), comment='拼音码')
pk_father = Column(INTEGER(11))
cIsBottom = Column(CHAR(1), comment='是否底层')
depiction = Column(String(100), comment='备注')
creator = Column(String(20), comment='创建人')
creationtime = Column(DateTime, comment='创建时间')
modifier = Column(String(20), comment='最后修改人')
modifiedtime = Column(DateTime, comment='最后修改时间')
enablestate = Column(TINYINT(4), server_default=text("'1'"), comment='启用状态')
create_by = Column(String(100), comment='创建人')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
update_by = Column(String(100), comment='更新人')
update_time = Column(DateTime, comment='更新时间')
del_flag = Column(TINYINT(1), server_default=text("'0'"), comment='删除标记')

View File

@@ -0,0 +1,23 @@
# coding: utf-8
from sqlalchemy import Column, DECIMAL, Date, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER
from config.mysql import Base
class ZxIeCost(Base):
__tablename__ = 'zx_ie_cost'
pk_ie_cost = Column(INTEGER(11), primary_key=True, comment='费用明细信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
name = Column(String(30), comment='患者姓名')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
medical_expenses_str = Column(String(255), comment='费用总额字符串')
medical_expenses = Column(DECIMAL(18, 2), comment='费用总额')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间')
updater = Column(String(255), comment='修改人')

View File

@@ -0,0 +1,23 @@
# coding: utf-8
from sqlalchemy import Column, DECIMAL, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER
from config.mysql import Base
class ZxIeCostDetail(Base):
__tablename__ = 'zx_ie_cost_detail'
pk_ie_cost_detail = Column(INTEGER(11), primary_key=True, comment='费用明细详情主键')
pk_ie_cost = Column(INTEGER(11), nullable=False, comment='费用明细信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, comment='报销案子主键')
_class = Column('class', String(255), comment='类别')
name = Column(String(255), comment='名称')
specification = Column(String(255), comment='规格')
price = Column(DECIMAL(18, 2), comment='单价')
quantity = Column(INTEGER(11), comment='数量')
amount = Column(DECIMAL(18, 2), comment='金额(单价 * 数量)')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(30), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间')
updater = Column(String(30), comment='修改人')

View File

@@ -0,0 +1,30 @@
# coding: utf-8
from sqlalchemy import Column, Date, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER
from config.mysql import Base
class ZxIeDischarge(Base):
__tablename__ = 'zx_ie_discharge'
pk_ie_discharge = Column(INTEGER(11), primary_key=True, comment='出院记录信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
content = Column(String(5000), comment='详细内容')
hospital = Column(String(255), comment='医院')
pk_yljg = Column(INTEGER(11), comment='医院主键')
department = Column(String(255), comment='科室')
pk_ylks = Column(INTEGER(11), comment='科室主键')
name = Column(String(30), comment='患者姓名')
age = Column(INTEGER(3), comment='年龄')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
doctor = Column(String(30), comment='主治医生')
admission_id = Column(String(50), comment='住院号')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(255), comment='修改人')

View File

@@ -0,0 +1,34 @@
# coding: utf-8
from sqlalchemy import Column, DECIMAL, Date, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER
from config.mysql import Base
class ZxIeSettlement(Base):
__tablename__ = 'zx_ie_settlement'
pk_ie_settlement = Column(INTEGER(11), primary_key=True, comment='结算清单信息抽取主键')
pk_phhd = Column(INTEGER(11), nullable=False, unique=True, comment='报销案子主键')
name = Column(String(30), comment='患者姓名')
admission_date_str = Column(String(255), comment='入院日期字符串')
admission_date = Column(Date, comment='入院日期')
discharge_date_str = Column(String(255), comment='出院日期字符串')
discharge_date = Column(Date, comment='出院日期')
medical_expenses_str = Column(String(255), comment='费用总额字符串')
medical_expenses = Column(DECIMAL(18, 2), comment='费用总额')
personal_cash_payment_str = Column(String(255), comment='个人现金支付字符串')
personal_cash_payment = Column(DECIMAL(18, 2), comment='个人现金支付')
personal_account_payment_str = Column(String(255), comment='个人账户支付字符串')
personal_account_payment = Column(DECIMAL(18, 2), comment='个人账户支付')
personal_funded_amount_str = Column(String(255), comment='自费金额字符串')
personal_funded_amount = Column(DECIMAL(18, 2), comment='自费金额')
medical_insurance_type_str = Column(String(255), comment='医保类型字符串')
medical_insurance_type = Column(String(40), comment='医保类型')
admission_id = Column(String(50), comment='住院号')
settlement_id = Column(String(50), comment='医保结算单号码')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(255), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
comment='修改时间')
updater = Column(String(255), comment='修改人')

View File

@@ -0,0 +1,23 @@
# coding: utf-8
from sqlalchemy import Column, DateTime, String, text
from sqlalchemy.dialects.mysql import INTEGER
from config.mysql import Base
class ZxOcr(Base):
__tablename__ = 'zx_ocr'
pk_ocr = Column(INTEGER(11), primary_key=True, comment='图片OCR识别主键')
pk_phhd = Column(INTEGER(11), nullable=False, comment='报销单主键')
pk_phrec = Column(INTEGER(11), nullable=False, comment='图片主键')
id = Column(INTEGER(11), nullable=False, comment='识别批次')
cfjaddress = Column(String(200), nullable=False, comment='云存储文件名')
content = Column(String(5000), comment='OCR识别内容')
rotation_angle = Column(INTEGER(11), comment='旋转角度')
x_offset = Column(INTEGER(11), comment='x轴偏移量')
y_offset = Column(INTEGER(11), comment='y轴偏移量')
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
creator = Column(String(30), comment='创建人')
update_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间')
updater = Column(String(30), comment='修改人')

View File

@@ -0,0 +1,115 @@
# coding: utf-8
from sqlalchemy import Column, DECIMAL, Date, DateTime, Index, String, text
from sqlalchemy.dialects.mysql import BIT, CHAR, INTEGER, TINYINT, VARCHAR
from config.mysql import Base
class ZxPhhd(Base):
__tablename__ = 'zx_phhd'
__table_args__ = (
Index('zx_phhd_idx3', 'pk_yljg', 'cjsd_id'),
)
pk_phhd = Column(INTEGER(11), primary_key=True, comment='病案主键')
cPhhd_id = Column(VARCHAR(20), index=True, comment='拍一拍单据号')
billdate = Column(DateTime, index=True)
pk_person = Column(INTEGER(11), server_default=text("'0'"), comment='人员主键')
pk_corp = Column(INTEGER(11), index=True, server_default=text("'0'"), comment='单位主键')
cRyid = Column(VARCHAR(20), comment='人员编码')
cJBH = Column(VARCHAR(20), comment='结报号')
cXm = Column(String(12), comment='姓名')
cSfzh = Column(VARCHAR(20), index=True, comment='身份证号')
czh = Column(VARCHAR(20), comment='小组')
cXb = Column(VARCHAR(2), comment='性别')
dCsny = Column(Date, comment='出身时间')
fAge = Column(INTEGER(4), server_default=text("'0'"), comment='年龄')
pk_yljg = Column(INTEGER(11), server_default=text("'0'"), comment='医院pk')
pk_ylks = Column(INTEGER(11), server_default=text("'0'"), comment='科室pk')
cDoctor = Column(VARCHAR(20), comment='医生')
dZYRQ = Column(DateTime, comment='入院日期')
dCYRQ = Column(DateTime)
cZYH = Column(VARCHAR(20), comment='住院号')
iMZTS = Column(INTEGER(4), server_default=text("'0'"), comment='住院天数')
fFSYLFY = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='发生医疗费用')
fZcfwfy = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='政策范围内费用')
fxnhbcje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='新农合补助金额')
fqtbcje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='其它补助金额')
fBCJE = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='补偿金额')
fgrzfje1 = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='个人支付金额1')
fgezfje2 = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='个人支付金额2')
fgrzfje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='个人自费金额')
fZfje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='自付金额')
fXianje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='限额')
fMaxbcje = Column(DECIMAL(18, 2), server_default=text("'0.00'"), comment='最高支付')
cJBBM = Column(VARCHAR(20), server_default=text("'-'"), comment='疾病编码')
cJbbm_cyzd = Column(VARCHAR(20), comment='疾病编码出院诊断')
cSsczmc = Column(VARCHAR(100), comment='手术操作名称')
problem_note = Column(String(400))
depiction = Column(VARCHAR(300), comment='备注')
creator = Column(VARCHAR(30), index=True, comment='创建人')
creationtime = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
modifier = Column(VARCHAR(30), comment='最后修改人')
modifiedtime = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='最后修改时间')
cStatus = Column(CHAR(1), index=True, server_default=text("'0'"), comment='状态')
vercode = Column(VARCHAR(4), comment='版本编码')
drg_groups_id = Column(String(6), server_default=text("'2017'"), comment='drg分组器版本号')
cSource_flag = Column(VARCHAR(4), server_default=text("'1'"), comment='病案来源')
ref_id1 = Column(VARCHAR(20))
ref_id2 = Column(VARCHAR(20))
ref_pk1 = Column(INTEGER(11))
checker = Column(VARCHAR(30), comment='创建人')
checktime = Column(DateTime, comment='创建时间')
paint_user = Column(VARCHAR(30))
paint_date = Column(DateTime)
filetype_id = Column(VARCHAR(10), comment='文件类型id')
cMphone = Column(VARCHAR(11), comment='移动电话')
cmiss_rectype = Column(VARCHAR(10), comment='遗漏记录类型')
cmiss_remark = Column(VARCHAR(200), comment='遗漏备注 ')
bhg_remark = Column(VARCHAR(200), comment='不合格原因')
cmis_jsd_flag = Column(BIT(1))
cmis_jsd_page = Column(VARCHAR(40), comment='结算单遗漏页码')
cmis_cyjl_flag = Column(BIT(1))
cmis_cyjl_page = Column(VARCHAR(40), comment='出院记录遗漏页码')
cmis_fyqd_flag = Column(BIT(1))
cmis_fyqd_page = Column(VARCHAR(40), comment='费用清单遗漏页码')
cmis_evidence = Column(VARCHAR(60), comment='相关证明材料')
del_reason = Column(CHAR(1), server_default=text("'0'"), comment='删除原因')
deln_reason = Column(VARCHAR(2), comment='删除原因')
train_flag = Column(VARCHAR(10), server_default=text("'0'"), comment='培训标志')
cjsd_id = Column(VARCHAR(30), comment='结算单号码')
sms_content = Column(String(1000), comment='短信内容')
judge_backup = Column(VARCHAR(100))
remind_num = Column(INTEGER(11), server_default=text("'0'"), comment='提醒次数')
input_cxm = Column(String(20), comment='姓名核对')
yb_type = Column(VARCHAR(10), comment='医保类别')
bucode = Column(VARCHAR(4), server_default=text("'1'"), comment='业务单元')
subcorpname = Column(VARCHAR(80), comment='子公司')
deptname = Column(VARCHAR(80), comment='部门')
psncode = Column(VARCHAR(16), comment='工号')
period_code = Column(VARCHAR(10), comment='会计期间')
cbznote = Column(VARCHAR(500))
corp_list = Column(VARCHAR(200), comment='其它补助单位及年度')
perjudge_flag = Column(CHAR(1), server_default=text("'0'"), comment='人员信息判断标志')
priority_num = Column(TINYINT(4), server_default=text("'0'"), comment='优先领取')
addin_xybz = Column(BIT(1))
addin_tybz = Column(BIT(1))
finish_flag = Column(BIT(1))
exsuccess_flag = Column(CHAR(1), server_default=text("'0'"), comment='交换成功标志')
pk_soncorp = Column(INTEGER(11), server_default=text("'0'"), comment='镇下村单位pk值')
return_times = Column(INTEGER(11), server_default=text("'0'"), comment='退回次数')
phuser_type = Column(CHAR(1), server_default=text("'1'"), comment='拍传人类型')
examine_note = Column(VARCHAR(400), comment='抽查意见')
examine_user = Column(VARCHAR(30), comment='抽查人')
examine_date = Column(DateTime, comment='抽查时间')
channel_code = Column(VARCHAR(10), comment='上传渠道')
einvoice_flag = Column(BIT(1))
drgs_flag = Column(CHAR(1), server_default=text("'0'"), comment='病种类型(0-无,1-单病种,2-drg)')
applyDate = Column(DateTime)
admissionDate = Column(Date, comment='入院日期')
dischargeDate = Column(Date, comment='出院日期')
reapplyDate = Column(Date, comment='重新上传日期')
exreq_times = Column(INTEGER(11), server_default=text("'0'"), comment='请求次数')
drug_source = Column(CHAR(1), server_default=text("'0'"), comment='药品来源(1-外购药,0--没有)')
addin_passpaydate = Column(BIT(1))
apply_classid = Column(CHAR(1), server_default=text("'0'"), comment='申请人员类别(1-农民工,0-默认)')

View File

@@ -0,0 +1,46 @@
# coding: utf-8
from sqlalchemy import CHAR, Column, DateTime, LargeBinary, String, text
from sqlalchemy.dialects.mysql import BIT, INTEGER, TINYINT
from config.mysql import Base
class ZxPhrec(Base):
__tablename__ = 'zx_phrec'
pk_phrec = Column(INTEGER(11), primary_key=True, comment='病案清主键')
pk_phhd = Column(INTEGER(11), index=True, comment='病案主键')
cRectype = Column(CHAR(1), comment='记录类型1-入院小结2--出院小结3--手术记录 4清单')
rowno = Column(TINYINT(4), server_default=text("'1'"), comment='序号')
cfjaddress = Column(String(200), comment='附件地址')
cfjaddress2 = Column(String(500), comment='附件地址2')
cfjaddress3 = Column(String(500), comment='附件地址3')
cfjblob = Column(LargeBinary, comment='附件')
cfjblob2 = Column(LargeBinary, comment='附件2')
cfjblob3 = Column(LargeBinary, comment='附件3')
subsys_id = Column(String(4), comment='分系统代码')
depiction = Column(String(100), comment='备注')
isreupload = Column(CHAR(1), server_default=text("'0'"))
checker = Column(String(10), comment='创建人')
checktime = Column(DateTime, comment='创建时间')
creator = Column(String(30), comment='创建人')
creationtime = Column(DateTime, index=True, comment='创建时间')
modifier = Column(String(30), comment='最后修改人')
modifiedtime = Column(DateTime, comment='最后修改时间')
cSource_flag = Column(String(4), server_default=text("'1'"), comment='病案来源')
cStatus = Column(CHAR(1), server_default=text("'0'"), comment='状态')
link_flag = Column(CHAR(1), server_default=text("'1'"), comment='是否采用链接')
filetype_id = Column(String(10), server_default=text("'jpg'"), comment='文件类型id')
cmiss_flag = Column(INTEGER(4), server_default=text("'0'"), comment='遗漏补拍标记')
paint_flag = Column(CHAR(1), server_default=text("'0'"), comment='涂抹标志')
paint_user = Column(String(30))
paint_date = Column(DateTime)
byz_xmbz_flag = Column(BIT(1))
byz_zyrqcyjl_flag = Column(BIT(1))
byz_zyhcyjl_flag = Column(BIT(1))
byz_ftyccyjl_flag = Column(BIT(1))
byz_ftycfyqd_flag = Column(BIT(1))
byz_ftycjsd_flag = Column(BIT(1))
unsharp_flag = Column(BIT(1))
judge_backup = Column(String(40))
ps_flag = Column(CHAR(1), server_default=text("'0'"), comment='图片是否ps过(0-无1-ps过)')

View File

@@ -0,0 +1,26 @@
from enum import Enum
from config.keys import SETTLEMENT_LIST_SCHEMA, DISCHARGE_RECORD_SCHEMA, COST_LIST_SCHEMA
class TaskEnum(Enum):
SETTLEMENT = "SETTLEMENT"
DISCHARGE = "DISCHARGE"
COST = "COST"
def request_url(self):
base_url = "http://192.168.5.9:8000"
if self == TaskEnum.SETTLEMENT:
return base_url + "/nlp/ie/settlement"
elif self == TaskEnum.DISCHARGE:
return base_url + "/nlp/ie/discharge"
elif self == TaskEnum.COST:
return base_url + "/nlp/ie/cost"
def schema(self):
if self == TaskEnum.SETTLEMENT:
return SETTLEMENT_LIST_SCHEMA
elif self == TaskEnum.DISCHARGE:
return DISCHARGE_RECORD_SCHEMA
elif self == TaskEnum.COST:
return COST_LIST_SCHEMA

View File

@@ -6,25 +6,35 @@ import sys
import tempfile import tempfile
import time import time
import urllib.request import urllib.request
from time import sleep
import cv2 import cv2
import numpy as np import numpy as np
import paddleclas import paddleclas
import requests import requests
from photo_review import OCR, SETTLEMENT_IE, DISCHARGE_IE, COST_IE
from photo_review.entity.zx_ocr import ZxOcr
from ucloud import ucloud
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from db import MysqlSession from time import sleep
from db.mysql import BdYljg, BdYlks, ZxOcr, ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxPhrec
from photo_review import PATIENT_NAME, ADMISSION_DATE, DISCHARGE_DATE, MEDICAL_EXPENSES, PERSONAL_CASH_PAYMENT, \
PERSONAL_ACCOUNT_PAYMENT, PERSONAL_FUNDED_AMOUNT, MEDICAL_INSURANCE_TYPE, HOSPITAL, DEPARTMENT, DOCTOR, \
ADMISSION_ID, SETTLEMENT_ID, AGE, OCR, SETTLEMENT_IE, DISCHARGE_IE, COST_IE, PHHD_BATCH_SIZE, SLEEP_MINUTES
from sqlalchemy import update from sqlalchemy import update
from ucloud import ucloud from config.keys import PATIENT_NAME, ADMISSION_DATE, DISCHARGE_DATE, MEDICAL_EXPENSES, PERSONAL_CASH_PAYMENT, \
from util.data_util import handle_date, handle_decimal, parse_department, handle_name, \ PERSONAL_ACCOUNT_PAYMENT, PERSONAL_FUNDED_AMOUNT, MEDICAL_INSURANCE_TYPE, HOSPITAL, DEPARTMENT, DOCTOR, \
ADMISSION_ID, SETTLEMENT_ID, AGE
from config.mysql import MysqlSession
from config.photo_review import PHHD_BATCH_SIZE, SLEEP_MINUTES
from photo_review.entity.bd_yljg import BdYljg
from photo_review.entity.bd_ylks import BdYlks
from photo_review.entity.zx_ie_cost import ZxIeCost
from photo_review.entity.zx_ie_discharge import ZxIeDischarge
from photo_review.entity.zx_ie_settlement import ZxIeSettlement
from photo_review.entity.zx_phhd import ZxPhhd
from photo_review.entity.zx_phrec import ZxPhrec
from photo_review.util.data_util import handle_date, handle_decimal, parse_department, handle_name, \
handle_insurance_type, handle_original_data, handle_hospital, handle_department, handle_id, handle_age handle_insurance_type, handle_original_data, handle_hospital, handle_department, handle_id, handle_age
from util.util import get_default_datetime from photo_review.util.util import get_default_datetime
# 获取图片 # 获取图片

View File

View File

@@ -1,12 +0,0 @@
# 公钥
PUBLIC_KEY = "4Z7QYI7qml36QRjcCjKrls7aHl1R6H6uq"
# 私钥
PRIVATE_KEY = "FIdW1Kev1Ge3K7GHXzSLyGG1wTnaG6LE9BxmIVubcCaG"
# 桶
BUCKET = "drg100"
# 上传后缀
UPLOAD_SUFFIX = ".cn-sh2.ufileos.com"
# 下载后缀
DOWNLOAD_SUFFIX = ".cn-sh2.ufileos.com"
# 私空间文件地址过期时间(秒)
PRIVATE_EXPIRES = 3600

View File

@@ -3,7 +3,7 @@ import logging
from ufile import filemanager from ufile import filemanager
from ucloud import PUBLIC_KEY, PRIVATE_KEY, UPLOAD_SUFFIX, DOWNLOAD_SUFFIX, BUCKET, PRIVATE_EXPIRES from config.ucloud import PUBLIC_KEY, PRIVATE_KEY, UPLOAD_SUFFIX, DOWNLOAD_SUFFIX, BUCKET, PRIVATE_EXPIRES
UFILE_HANDLER = filemanager.FileManager(PUBLIC_KEY, PRIVATE_KEY, UPLOAD_SUFFIX, DOWNLOAD_SUFFIX) UFILE_HANDLER = filemanager.FileManager(PUBLIC_KEY, PRIVATE_KEY, UPLOAD_SUFFIX, DOWNLOAD_SUFFIX)