Files
his/scripts/query_patient_data.py

207 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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