Merge develop into test - sync latest code
This commit is contained in:
206
scripts/query_patient_data.py
Normal file
206
scripts/query_patient_data.py
Normal file
@@ -0,0 +1,206 @@
|
||||
import psycopg2
|
||||
import sys
|
||||
|
||||
sys.stdout.reconfigure(encoding="utf-8")
|
||||
|
||||
# 数据库连接
|
||||
conn = psycopg2.connect(
|
||||
host="192.168.110.252",
|
||||
port=15432,
|
||||
database="postgresql",
|
||||
user="postgresql",
|
||||
password="Jchl1528",
|
||||
)
|
||||
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SET search_path TO hisdev, public")
|
||||
conn.commit()
|
||||
|
||||
print("=" * 80)
|
||||
print("查询患者:王俊彭 (病历号: PN0000000038)")
|
||||
print("=" * 80)
|
||||
print()
|
||||
|
||||
# 1. 查询患者基本信息和就诊ID
|
||||
print("步骤1: 查询患者基本信息...")
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
p.id as patient_id,
|
||||
p.name as patient_name,
|
||||
e.id as encounter_id,
|
||||
e.create_time as encounter_time
|
||||
FROM adm_patient p
|
||||
LEFT JOIN adm_encounter e ON e.patient_id = p.id
|
||||
WHERE p.name = '王俊彭'
|
||||
ORDER BY e.create_time DESC
|
||||
LIMIT 5
|
||||
""")
|
||||
patient_rows = cursor.fetchall()
|
||||
|
||||
if not patient_rows:
|
||||
print("✗ 未找到患者信息")
|
||||
else:
|
||||
for row in patient_rows:
|
||||
print(
|
||||
f" 患者ID: {row[0]}, 姓名: {row[1]}, 就诊ID: {row[2]}, 就诊时间: {row[3]}"
|
||||
)
|
||||
|
||||
# 获取最新的就诊ID
|
||||
encounter_id = patient_rows[0][2]
|
||||
patient_id = patient_rows[0][0]
|
||||
print(f"\n使用就诊ID: {encounter_id}")
|
||||
print()
|
||||
|
||||
# 2. 查询手术申请单
|
||||
print("步骤2: 查询手术申请单...")
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT
|
||||
id,
|
||||
prescription_no,
|
||||
type_code,
|
||||
name,
|
||||
create_time,
|
||||
desc_json
|
||||
FROM doc_request_form
|
||||
WHERE encounter_id = %s
|
||||
AND type_code = 'PROCEDURE'
|
||||
AND delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
""",
|
||||
(encounter_id,),
|
||||
)
|
||||
|
||||
request_forms = cursor.fetchall()
|
||||
if not request_forms:
|
||||
print("✗ 未找到手术申请单")
|
||||
else:
|
||||
print(f"✓ 找到 {len(request_forms)} 条手术申请单:")
|
||||
for rf in request_forms:
|
||||
print(
|
||||
f" 申请单ID: {rf[0]}, 单号: {rf[1]}, 类型: {rf[2]}, 名称: {rf[3]}, 时间: {rf[4]}"
|
||||
)
|
||||
if rf[5]:
|
||||
try:
|
||||
import json
|
||||
|
||||
desc = json.loads(rf[5])
|
||||
surgery_name = desc.get("surgeryName", "N/A")
|
||||
surgery_fee = desc.get("surgeryFee", "N/A")
|
||||
print(f" -> 手术名称: {surgery_name}, 手术费用: {surgery_fee}")
|
||||
except:
|
||||
print(f" -> 手术详情: {rf[5][:100]}")
|
||||
print()
|
||||
|
||||
# 3. 查询手术医嘱(ServiceRequest)
|
||||
print("步骤3: 查询手术医嘱(ServiceRequest)...")
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT
|
||||
id,
|
||||
prescription_no,
|
||||
status_enum,
|
||||
category_enum,
|
||||
patient_id,
|
||||
encounter_id,
|
||||
create_time,
|
||||
content_json
|
||||
FROM wor_service_request
|
||||
WHERE patient_id = %s
|
||||
AND category_enum = 4
|
||||
AND delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
""",
|
||||
(patient_id,),
|
||||
)
|
||||
|
||||
service_requests = cursor.fetchall()
|
||||
if not service_requests:
|
||||
print("✗ 未找到手术医嘱")
|
||||
print("\n⚠️ 问题确认:有手术申请单但没有对应的手术医嘱!")
|
||||
else:
|
||||
print(f"✓ 找到 {len(service_requests)} 条手术医嘱:")
|
||||
for sr in service_requests:
|
||||
status_text = {1: "待签发", 2: "已签发", 3: "已执行"}.get(
|
||||
sr[2], f"状态{sr[2]}"
|
||||
)
|
||||
print(
|
||||
f" 医嘱ID: {sr[0]}, 单号: {sr[1]}, 状态: {status_text}, 就诊ID: {sr[5]}, 时间: {sr[6]}"
|
||||
)
|
||||
print()
|
||||
|
||||
# 4. 查询收费项目
|
||||
print("步骤4: 查询收费项目(ChargeItem)...")
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT
|
||||
id,
|
||||
bus_no,
|
||||
status_enum,
|
||||
total_price,
|
||||
service_id
|
||||
FROM adm_charge_item
|
||||
WHERE patient_id = %s
|
||||
AND service_table = 'wor_service_request'
|
||||
AND delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
""",
|
||||
(patient_id,),
|
||||
)
|
||||
|
||||
charge_items = cursor.fetchall()
|
||||
if not charge_items:
|
||||
print("✗ 未找到收费项目")
|
||||
else:
|
||||
print(f"✓ 找到 {len(charge_items)} 条收费项目:")
|
||||
for ci in charge_items:
|
||||
print(f" 收费ID: {ci[0]}, 单号: {ci[1]}, 金额: {ci[3]}, 关联医嘱: {ci[4]}")
|
||||
print()
|
||||
|
||||
# 5. 查询医嘱列表(用于对比)
|
||||
print("步骤5: 查询该患者的所有医嘱...")
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT
|
||||
category_enum,
|
||||
status_enum,
|
||||
count(*) as count
|
||||
FROM wor_service_request
|
||||
WHERE patient_id = %s
|
||||
AND delete_flag = '0'
|
||||
GROUP BY category_enum, status_enum
|
||||
ORDER BY category_enum
|
||||
""",
|
||||
(patient_id,),
|
||||
)
|
||||
|
||||
categories = cursor.fetchall()
|
||||
if categories:
|
||||
print("✓ 医嘱统计:")
|
||||
cat_names = {1: "西药", 2: "耗材", 3: "诊疗", 4: "手术"}
|
||||
stat_names = {1: "待签发", 2: "已签发", 3: "已执行"}
|
||||
for cat in categories:
|
||||
cat_name = cat_names.get(cat[0], f"类型{cat[0]}")
|
||||
stat_name = stat_names.get(cat[1], f"状态{cat[1]}")
|
||||
print(f" {cat_name} - {stat_name}: {cat[2]}条")
|
||||
print()
|
||||
|
||||
print("=" * 80)
|
||||
|
||||
# 问题诊断
|
||||
if request_forms and not service_requests:
|
||||
print("\n🔴 问题确认:")
|
||||
print(" ✓ 手术申请单存在(doc_request_form)")
|
||||
print(" ✗ 手术医嘱不存在(wor_service_request)")
|
||||
print("\n 结论:保存手术申请单时未生成手术医嘱")
|
||||
print(" 原因:代码修复可能未生效或未部署到生产环境")
|
||||
elif service_requests:
|
||||
print("\n✅ 数据正常:")
|
||||
print(" ✓ 手术申请单存在")
|
||||
print(" ✓ 手术医嘱存在")
|
||||
print("\n 请在医嘱TAB页面查看是否能显示")
|
||||
|
||||
print()
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user