@@ -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,
|
|
||||||
}
|
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
|
|||||||
@@ -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
15
config/email.py
Normal 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
39
config/keys.py
Normal 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
|
||||||
@@ -38,4 +38,4 @@ LOGGING_CONFIG = {
|
|||||||
'propagate': False, # 是否向上级传播日志信息
|
'propagate': False, # 是否向上级传播日志信息
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
17
config/photo_review.py
Normal file
17
config/photo_review.py
Normal 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
12
config/ucloud.py
Normal 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
|
||||||
6
main.py
6
main.py
@@ -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())
|
|
||||||
|
|||||||
@@ -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):
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
0
photo_review/entity/__init__.py
Normal file
0
photo_review/entity/__init__.py
Normal file
29
photo_review/entity/bd_yljg.py
Normal file
29
photo_review/entity/bd_yljg.py
Normal 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='删除标记')
|
||||||
27
photo_review/entity/bd_ylks.py
Normal file
27
photo_review/entity/bd_ylks.py
Normal 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='删除标记')
|
||||||
23
photo_review/entity/zx_ie_cost.py
Normal file
23
photo_review/entity/zx_ie_cost.py
Normal 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='修改人')
|
||||||
23
photo_review/entity/zx_ie_cost_detail.py
Normal file
23
photo_review/entity/zx_ie_cost_detail.py
Normal 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='修改人')
|
||||||
30
photo_review/entity/zx_ie_discharge.py
Normal file
30
photo_review/entity/zx_ie_discharge.py
Normal 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='修改人')
|
||||||
34
photo_review/entity/zx_ie_settlement.py
Normal file
34
photo_review/entity/zx_ie_settlement.py
Normal 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='修改人')
|
||||||
23
photo_review/entity/zx_ocr.py
Normal file
23
photo_review/entity/zx_ocr.py
Normal 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='修改人')
|
||||||
115
photo_review/entity/zx_phhd.py
Normal file
115
photo_review/entity/zx_phhd.py
Normal 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-默认)')
|
||||||
46
photo_review/entity/zx_phrec.py
Normal file
46
photo_review/entity/zx_phrec.py
Normal 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过)')
|
||||||
26
photo_review/enumeration/task.py
Normal file
26
photo_review/enumeration/task.py
Normal 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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
# 获取图片
|
# 获取图片
|
||||||
|
|||||||
0
photo_review/util/__init__.py
Normal file
0
photo_review/util/__init__.py
Normal 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
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user