feat(emr): 添加数据库迁移脚本同步老病历数据
- 自动清空假数据 - 从doc_emr同步修订历史(每条病历创建初始修订记录) - 从doc_emr同步搜索索引(提取患者、诊断、医生等信息) - 应用启动时自动执行
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
-- V100__sync_existing_emr_data.sql
|
||||
-- 同步已有的门诊/住院病历到修订历史和搜索索引
|
||||
|
||||
-- 1. 清空假数据
|
||||
TRUNCATE TABLE emr_revision CASCADE;
|
||||
TRUNCATE TABLE emr_search_index CASCADE;
|
||||
|
||||
-- 2. 从doc_emr同步修订历史(为每条病历创建初始修订记录)
|
||||
INSERT INTO emr_revision (
|
||||
id, emr_id, encounter_id, revision_number,
|
||||
operator_id, operator_name, operation_type,
|
||||
diff_content, snapshot_content, create_time
|
||||
)
|
||||
SELECT
|
||||
nextval('emr_revision_id_seq'),
|
||||
e.id,
|
||||
e.encounter_id,
|
||||
1,
|
||||
COALESCE(e.record_id, 1),
|
||||
'系统同步',
|
||||
'CREATE',
|
||||
'初始创建 - 从历史病历同步',
|
||||
e.context_json,
|
||||
COALESCE(e.create_time, NOW())
|
||||
FROM doc_emr e
|
||||
WHERE e.id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM emr_revision r WHERE r.emr_id = e.id
|
||||
);
|
||||
|
||||
-- 3. 从doc_emr同步搜索索引
|
||||
INSERT INTO emr_search_index (
|
||||
id, emr_id, encounter_id, patient_id, patient_name,
|
||||
emr_type, emr_title, diagnosis_text,
|
||||
doctor_name, department_name, create_time, update_time
|
||||
)
|
||||
SELECT
|
||||
nextval('emr_search_index_id_seq'),
|
||||
e.id,
|
||||
e.encounter_id,
|
||||
e.patient_id,
|
||||
COALESCE(p.name, '患者' || e.patient_id),
|
||||
CASE
|
||||
WHEN e.class_enum = 1 THEN 'OUTPATIENT'
|
||||
WHEN e.class_enum = 2 THEN 'INPATIENT'
|
||||
ELSE 'OTHER'
|
||||
END,
|
||||
COALESCE(
|
||||
NULLIF(TRIM(BOTH '"' FROM
|
||||
SPLIT_PART(
|
||||
SPLIT_PART(e.context_json, '"chiefComplaint"', 2),
|
||||
':', 2
|
||||
)
|
||||
), ''),
|
||||
'未命名病历'
|
||||
),
|
||||
COALESCE(
|
||||
NULLIF(TRIM(BOTH '"' FROM
|
||||
SPLIT_PART(
|
||||
SPLIT_PART(e.context_json, '"diagnosis"', 2),
|
||||
':', 2
|
||||
)
|
||||
), ''),
|
||||
''
|
||||
),
|
||||
COALESCE(u.name, '医生' || e.record_id),
|
||||
COALESCE(o.name, '未知科室'),
|
||||
COALESCE(e.create_time, NOW()),
|
||||
COALESCE(e.update_time, NOW())
|
||||
FROM doc_emr e
|
||||
LEFT JOIN patient p ON e.patient_id = p.id
|
||||
LEFT JOIN sys_user u ON e.record_id = u.user_id
|
||||
LEFT JOIN adm_encounter enc ON e.encounter_id = enc.id
|
||||
LEFT JOIN sys_organization o ON enc.organization_id = o.id
|
||||
WHERE e.id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM emr_search_index si WHERE si.emr_id = e.id
|
||||
);
|
||||
Reference in New Issue
Block a user