Files
his/openhis-server-new/sql/快速诊断诊疗项目问题.sql

87 lines
3.1 KiB
SQL
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.

-- 快速诊断诊疗项目检索问题
-- 已知wor_activity_definition 表中有4条数据
-- 关键ChargeItemContext.ACTIVITY.getValue() = 3整数
-- 步骤1检查这4条诊疗项目定义的delete_flag状态
SELECT
id,
name,
delete_flag,
CASE WHEN delete_flag = '0' THEN '✅ 可用' ELSE '❌ 已删除' END as status
FROM wor_activity_definition
ORDER BY id;
-- 步骤2检查收费项目中是否有诊疗项目类型context_enum = 3的记录
SELECT
COUNT(*) as total_count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) as active_count
FROM adm_charge_item
WHERE (context_enum::text = '3' OR context_enum = 3);
-- 步骤3检查收费项目能否匹配到诊疗项目定义最关键
SELECT
aci.id as charge_item_id,
aci.encounter_id,
aci.product_id,
aci.status_enum,
wad.id as activity_def_id,
wad.name as activity_name,
CASE
WHEN wad.id IS NULL THEN '❌ 无法匹配product_id=' || aci.product_id || ' 在诊疗项目定义表中不存在'
WHEN wad.delete_flag != '0' THEN '❌ 无法匹配:诊疗项目定义已删除'
WHEN aci.delete_flag != '0' THEN '❌ 无法匹配:收费项目已删除'
WHEN aci.status_enum NOT IN (1,2,3,4,5,6) THEN '❌ 无法匹配:状态不在查询范围内 status=' || aci.status_enum
ELSE '✅ 可以匹配'
END as match_result
FROM adm_charge_item aci
LEFT JOIN wor_activity_definition wad
ON aci.product_id = wad.id AND wad.delete_flag = '0'
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3)
AND aci.delete_flag = '0'
LIMIT 50;
-- 步骤4统计匹配情况
SELECT
COUNT(*) as total_charge_items,
COUNT(CASE WHEN wad.id IS NOT NULL AND wad.delete_flag = '0' THEN 1 END) as matched_count,
COUNT(CASE WHEN wad.id IS NULL THEN 1 END) as unmatched_def_count,
COUNT(CASE WHEN wad.delete_flag != '0' THEN 1 END) as deleted_def_count,
COUNT(CASE WHEN wad.id IS NOT NULL AND wad.delete_flag = '0' AND aci.status_enum IN (1,2,3,4,5,6) THEN 1 END) as final_matched_count
FROM adm_charge_item aci
LEFT JOIN wor_activity_definition wad
ON aci.product_id = wad.id
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3)
AND aci.delete_flag = '0';
-- 步骤5检查具体就诊的诊疗项目如果有encounterId取消注释并替换
-- SELECT
-- T1.encounter_id,
-- T1.id as charge_item_id,
-- T1.product_id,
-- T1.status_enum,
-- T2.id as activity_def_id,
-- T2.name as activity_name,
-- CASE
-- WHEN T2.id IS NULL THEN '❌ 无法匹配'
-- WHEN T2.delete_flag != '0' THEN '❌ 定义已删除'
-- WHEN T1.status_enum NOT IN (1,2,3,4,5,6) THEN '❌ 状态不符合'
-- ELSE '✅ 正常'
-- END as status
-- FROM adm_charge_item AS T1
-- LEFT JOIN wor_activity_definition AS T2
-- ON T1.product_id = T2.id AND T2.delete_flag = '0'
-- WHERE T1.encounter_id = :encounterId -- 替换为实际的encounterId
-- AND (T1.context_enum::text = '3' OR T1.context_enum = 3)
-- AND T1.delete_flag = '0';