Files
his/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/NurseBillingAppMapper.xml
2025-12-27 15:30:40 +08:00

303 lines
12 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.inhospitalnursestation.mapper.NurseBillingAppMapper">
<select id="getInNurseBillingPage"
resultType="com.openhis.web.inhospitalnursestation.dto.InpatientAdviceDto">
SELECT ii.encounter_id,
ii.advice_table,
ii.request_id,
ii.start_time,
ii.end_time,
ii.requester_id,
ii.request_time,
ii.skin_test_flag,
ii.inject_flag,
ii.group_id,
ii.advice_name,
ii.item_id,
ii.volume,
ii.lot_number,
ii.quantity,
ii.unit_code,
ii.request_status,
ii.method_code,
ii.rate_code,
ii.dose,
ii.dose_unit_code,
ii.position_id,
ii.position_name,
ii.dispense_per_duration,
ii.part_percent,
ii.condition_definition_name,
ii.therapy_enum,
ii.sort_number,
ii.execute_num,
ii.day_times,
ii.bus_no,
ii."patient_name" AS patient_name,
ii."bed_name" AS bed_name,
ii.gender_enum ,
ii.birth_date ,
ii.patient_id,
ii.contract_name ,
ii.condition_names,
ii.admitting_doctor_name AS admitting_doctor_name,
ii.balance_amount AS balance_amount,
ii.account_id AS account_id,
ii.performer_check_id,
ii.category_code,
ii.unit_price,
ii.total_price
FROM (
( SELECT
T1.encounter_id,
T1.tenant_id,
#{ worDeviceRequest } AS advice_table,
T1.id AS request_id,
T1.use_start_time AS start_time,
T1.use_end_time AS end_time,
T1.requester_id AS requester_id,
T1.create_time AS request_time,
NULL AS skin_test_flag,
NULL AS inject_flag,
NULL AS group_id,
NULL AS performer_check_id,
T2."name" AS advice_name,
T2.id AS item_id,
T2.SIZE AS volume,
T1.lot_number AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
T1.status_enum AS request_status,
NULL AS method_code,
NULL AS rate_code,
NULL AS dose,
NULL AS dose_unit_code,
al1.id AS position_id,
al1."name" AS position_name,
NULL AS dispense_per_duration,
T2.part_percent AS part_percent,
'' AS condition_definition_name,
2 AS therapy_enum,
NULL AS sort_number,
T1.quantity AS execute_num,
NULL AS day_times,
ae.bus_no,
ap."name" AS patient_name,
al."name" AS bed_name,
ap.gender_enum,
ap.birth_date,
ap.id AS patient_id,
fc.contract_name,
diagnosis.condition_names,
pra."name" AS admitting_doctor_name,
personal_account.balance_amount,
personal_account.id AS account_id,
T2.category_code,
aci1.unit_price,
aci1.total_price
FROM
wor_device_request AS T1
LEFT JOIN adm_device_definition AS T2 ON T2.id = T1.device_def_id
AND T2.delete_flag = '0'
LEFT JOIN adm_charge_item aci1 on aci1.service_id = T1.id
AND aci1.delete_flag = '0'
LEFT JOIN adm_location al1 ON T1.perform_location = al1.id
LEFT JOIN adm_organization AS ao1 ON ao1.id = T1.org_id
AND ao1.delete_flag = '0'
LEFT JOIN adm_encounter ae ON ae.id = T1.encounter_id
AND ae.class_enum = 1
AND ae.delete_flag = '0'
LEFT JOIN adm_patient ap ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_encounter_location ael ON ae.id = ael.encounter_id
AND ael.delete_flag = '0'
AND ael.status_enum = 2
AND ael.form_enum = 8
LEFT JOIN adm_location al ON ael.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_account aa ON ae.ID = aa.encounter_id
AND aa.encounter_flag = 1
AND aa.delete_flag = '0'
LEFT JOIN fin_contract fc ON aa.contract_no = fc.bus_no
AND fc.delete_flag = '0'
LEFT JOIN (
SELECT
aed.encounter_id,
STRING_AGG (ccd.name, ', ') AS condition_names
FROM
adm_encounter_diagnosis aed
INNER JOIN cli_condition cc ON cc.id = aed.condition_id
AND cc.delete_flag = '0'
INNER JOIN cli_condition_definition ccd ON ccd.id = cc.definition_id
AND ccd.delete_flag = '0'
WHERE
aed.delete_flag = '0'
GROUP BY
aed.encounter_id
) AS diagnosis ON ae.id = diagnosis.encounter_id
LEFT JOIN adm_encounter_participant aep ON ae.id = aep.encounter_id
AND aep.delete_flag = '0'
AND aep.status_enum = #{ active }
AND aep.type_code = #{ admittingDoctor }
LEFT JOIN adm_practitioner pra ON aep.practitioner_id = pra.id
AND pra.delete_flag = '0'
LEFT JOIN (
SELECT
aa.id,
aa.encounter_id,
(
aa.balance_amount - COALESCE (SUM(CASE WHEN aci.status_enum IN (#{ billed }, #{ billable }) THEN aci.total_price ELSE 0 END), 0)
+ COALESCE (SUM(CASE WHEN aci.status_enum = #{ refunded } THEN aci.total_price ELSE 0 END), 0)
) AS balance_amount
FROM
adm_account aa
LEFT JOIN adm_charge_item aci ON aa.encounter_id = aci.encounter_id
AND aa.delete_flag = '0'
WHERE
aa.type_code = #{ personalCashAccount }
AND aa.delete_flag = '0'
GROUP BY
aa.id,
aa.encounter_id,
aa.balance_amount
) AS personal_account ON personal_account.encounter_id = ae.id
WHERE
T1.delete_flag = '0'
AND T1.generate_source_enum =#{ generateSourceEnum }
AND T1.refund_device_id IS NULL
<if test="startTime!=null and endTime!=null">
AND T1.create_time BETWEEN #{startTime}
AND #{endTime}
</if>
ORDER BY
T1.status_enum)
UNION
(SELECT
T1.encounter_id,
T1.tenant_id,
#{ worServiceRequest } AS advice_table,
T1.id AS request_id,
T1.occurrence_start_time AS start_time,
T1.occurrence_end_time AS end_time,
T1.requester_id AS requester_id,
T1.create_time AS request_time,
NULL AS skin_test_flag,
NULL AS inject_flag,
NULL AS group_id,
T1.performer_check_id,
T2."name" AS advice_name,
T2.id AS item_id,
NULL AS volume,
NULL AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
T1.status_enum AS request_status,
NULL AS method_code,
NULL AS rate_code,
NULL AS dose,
NULL AS dose_unit_code,
ao1.id AS position_id,
ao1."name" AS position_name,
NULL AS dispense_per_duration,
1 AS part_percent,
'' AS condition_definition_name,
T1.therapy_enum AS therapy_enum,
NULL AS sort_number,
T1.quantity AS execute_num,
NULL AS day_times,
ae.bus_no,
ap."name" AS patient_name,
al."name" AS bed_name,
ap.gender_enum,
ap.birth_date,
ap.id AS patient_id,
fc.contract_name,
diagnosis.condition_names,
pra."name" AS admitting_doctor_name,
personal_account.balance_amount,
personal_account.id AS account_id,
T2.category_code,
aci1.unit_price,
aci1.total_price
FROM
wor_service_request AS T1
LEFT JOIN wor_activity_definition AS T2 ON T2.id = T1.activity_id
AND T2.delete_flag = '0'
LEFT JOIN adm_charge_item aci1 on aci1.service_id = T1.id
AND aci1.delete_flag = '0'
LEFT JOIN adm_organization AS ao1 ON ao1.id = T1.org_id
AND ao1.delete_flag = '0'
LEFT JOIN adm_encounter ae ON ae.id = T1.encounter_id
AND ae.class_enum = #{ imp }
AND ae.delete_flag = '0'
LEFT JOIN adm_patient ap ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_encounter_location ael ON ae.id = ael.encounter_id
AND ael.delete_flag = '0'
AND ael.status_enum = #{ active }
AND ael.form_enum =#{ bed }
LEFT JOIN adm_location al ON ael.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_account aa ON ae.ID = aa.encounter_id
AND aa.encounter_flag = 1
AND aa.delete_flag = '0'
LEFT JOIN fin_contract fc ON aa.contract_no = fc.bus_no
AND fc.delete_flag = '0'
LEFT JOIN (
SELECT
aed.encounter_id,
STRING_AGG (ccd.name, ', ') AS condition_names
FROM
adm_encounter_diagnosis aed
INNER JOIN cli_condition cc ON cc.id = aed.condition_id
AND cc.delete_flag = '0'
INNER JOIN cli_condition_definition ccd ON ccd.id = cc.definition_id
AND ccd.delete_flag = '0'
WHERE
aed.delete_flag = '0'
GROUP BY
aed.encounter_id
) AS diagnosis ON ae.id = diagnosis.encounter_id
LEFT JOIN adm_encounter_participant aep ON ae.id = aep.encounter_id
AND aep.delete_flag = '0'
AND aep.status_enum = #{ active }
AND aep.type_code = #{ admittingDoctor }
LEFT JOIN adm_practitioner pra ON aep.practitioner_id = pra.id
AND pra.delete_flag = '0'
LEFT JOIN (
SELECT
aa.id,
aa.encounter_id,
(
aa.balance_amount - COALESCE (SUM(CASE WHEN aci.status_enum IN (#{ billed }, #{ billable }) THEN aci.total_price ELSE 0 END), 0)
+ COALESCE (SUM(CASE WHEN aci.status_enum = #{ refunded } THEN aci.total_price ELSE 0 END), 0)
) AS balance_amount
FROM
adm_account aa
LEFT JOIN adm_charge_item aci ON aa.encounter_id = aci.encounter_id
AND aa.delete_flag = '0'
WHERE
aa.type_code = #{ personalCashAccount }
AND aa.delete_flag = '0'
GROUP BY
aa.id,
aa.encounter_id,
aa.balance_amount
) AS personal_account ON personal_account.encounter_id = ae.id
WHERE
T1.delete_flag = '0'
AND T1.generate_source_enum =#{ generateSourceEnum }
AND T1.refund_service_id IS NULL
<if test="startTime!=null and endTime!=null">
AND T1.create_time BETWEEN #{startTime}
AND #{endTime}
</if>
ORDER BY
T1.status_enum)
) AS ii
${ew.customSqlSegment}
</select>
</mapper>