docs(release-notes): 添加住院护士站划价功能说明和发版记录 - 新增住院护士站划价服务流程说明文档,详细描述了从参数预处理到结果响应的五大阶段流程 - 包含耗材类医嘱和诊疗活动类医嘱的差异化处理逻辑 - 添加完整的发版内容记录,涵盖新增菜单功能和各模块优化点 - 记录了住院相关功能的新增和门诊业务流程的修复 ```
444 lines
19 KiB
XML
444 lines
19 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.chargemanage.mapper.OutpatientRefundAppMapper">
|
||
<resultMap id="encounterPatientRefundMap"
|
||
type="com.openhis.web.chargemanage.dto.EncounterPatientRefundDto">
|
||
<!--患者退费项目信息-->
|
||
<result property="paymentId" column="payment_id"/>
|
||
<result property="entererId" column="enterer_id"/>
|
||
<result property="encounterId" column="encounter_id"/>
|
||
<result property="patientId" column="patient_id"/>
|
||
<result property="prescriptionNo" column="prescription_no"/>
|
||
<result property="busNo" column="bus_no"/>
|
||
<result property="contractNo" column="contract_no"/>
|
||
<result property="billDate" column="bill_date"/>
|
||
<result property="chargeItemIds" column="charge_item_ids"/>
|
||
<result property="itemName" column="item_name"/>
|
||
<result property="orgName" column="org_name"/>
|
||
<result property="entererName" column="enterer_name"/>
|
||
<result property="chargeStatus" column="charge_status"/>
|
||
<result property="paymentStatus" column="payment_status"/>
|
||
<result property="dispenseStatus" column="dispense_status"/>
|
||
<result property="serviceStatus" column="service_status"/>
|
||
<result property="quantityValue" column="quantity_value"/>
|
||
<result property="dispenseQuantity" column="dispense_quantity"/>
|
||
<result property="quantityUnit" column="quantity_unit"/>
|
||
<result property="unitPrice" column="unit_price"/>
|
||
<result property="totalPrice" column="total_price"/>
|
||
<result property="requestId" column="request_id"/>
|
||
<result property="dispenseId" column="dispense_id"/>
|
||
<result property="serviceTable" column="service_table"/>
|
||
|
||
<!--支付明细-->
|
||
<collection property="paymentDetailList"
|
||
ofType="com.openhis.yb.dto.PaymentDetailDto">
|
||
<!--唯一值,避免相同数据合并-->
|
||
<id column="payment_detail_id"/>
|
||
<result property="payEnum" column="pay_enum"/>
|
||
<!-- <result property="payLevelEnum" column="pay_level_enum"/>-->
|
||
<result property="amount" column="amount"/>
|
||
<result property="returnAmount" column="return_amount"/>
|
||
<result property="chargeAmount" column="charge_amount"/>
|
||
</collection>
|
||
</resultMap>
|
||
<select id="selectEncounterPatientPayment"
|
||
resultType="com.openhis.web.chargemanage.dto.EncounterPatientPaymentDto">
|
||
SELECT T1.id AS payment_id,
|
||
T1.status_enum,
|
||
T1.relation_id,
|
||
T1.payment_no,
|
||
T1.payment_enum,
|
||
T1.location_id,
|
||
T1.expiration_date,
|
||
T1.tendered_amount,
|
||
T1.returned_amount,
|
||
T1.contract_no,
|
||
T2.prescription_no,
|
||
T2.account_id
|
||
FROM fin_payment_reconciliation AS T1
|
||
LEFT JOIN adm_charge_item AS T2
|
||
-- 因为T2.id是long型,T1.charge_item_ids是例如 [1,2] 的string类型,所以需要先转类型再匹配
|
||
ON T2.id::TEXT = ANY(string_to_array(T1.charge_item_ids, ','))
|
||
AND T2.delete_flag = '0'
|
||
WHERE T1.encounter_id =#{encounterId}
|
||
AND T1.status_enum IN (#{success})
|
||
AND T1.delete_flag = '0'
|
||
</select>
|
||
<select id="selectRefundItem" resultType="com.openhis.web.chargemanage.dto.RefundItemDto">
|
||
SELECT T1.id AS charge_item_id,
|
||
T1.service_table,
|
||
T1.service_id,
|
||
T2.bus_no,
|
||
T2.prescription_no,
|
||
T2.quantity,
|
||
T2.medication_id AS item_id,
|
||
T2.unit_code,
|
||
T1.unit_price,
|
||
T1.total_price,
|
||
T2.id AS request_id,
|
||
T7.name AS item_name,
|
||
T10.id AS payment_id,
|
||
T1.status_enum AS refund_status
|
||
FROM adm_charge_item AS T1
|
||
LEFT JOIN med_medication_request AS T2
|
||
ON T2.id = T1.service_id
|
||
AND T2.delete_flag = '0'
|
||
LEFT JOIN med_medication_definition AS T7
|
||
ON T1.product_id = T7.id
|
||
AND T7.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation AS T10
|
||
ON T1.id::TEXT = ANY(string_to_array(T10.charge_item_ids, ','))
|
||
AND T10.delete_flag = '0'
|
||
AND T10.status_enum = 1
|
||
WHERE T1.service_table = #{medMedicationRequest}
|
||
AND T1.delete_flag = '0'
|
||
AND T2.refund_medicine_id IS NULL
|
||
<if test="chargeItemIdList != null and !chargeItemIdList.isEmpty()">
|
||
AND T1.id IN
|
||
<foreach collection="chargeItemIdList" item="chargeItemId" separator="," open="(" close=")">
|
||
#{chargeItemId}
|
||
</foreach>
|
||
</if>
|
||
UNION
|
||
SELECT T1.id AS charge_item_id,
|
||
T1.service_table,
|
||
T1.service_id,
|
||
T4.bus_no,
|
||
T4.prescription_no,
|
||
T4.quantity,
|
||
T4.device_def_id AS item_id,
|
||
T4.unit_code,
|
||
T1.unit_price,
|
||
T1.total_price,
|
||
T4.id AS request_id,
|
||
T8.name AS item_name,
|
||
T10.id AS payment_id,
|
||
T1.status_enum AS refund_status
|
||
FROM adm_charge_item AS T1
|
||
LEFT JOIN wor_device_request AS T4
|
||
ON T4.id = T1.service_id
|
||
AND T4.delete_flag = '0'
|
||
LEFT JOIN adm_device_definition AS T8
|
||
ON T1.product_id = T8.id
|
||
AND T8.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation AS T10
|
||
ON T1.id::TEXT = ANY(string_to_array(T10.charge_item_ids, ','))
|
||
AND T10.delete_flag = '0'
|
||
AND T10.status_enum = 1
|
||
WHERE T1.service_table = #{worDeviceRequest}
|
||
AND T4.refund_device_id IS NULL
|
||
AND T1.delete_flag = '0'
|
||
<if test="chargeItemIdList != null and !chargeItemIdList.isEmpty()">
|
||
AND T1.id IN
|
||
<foreach collection="chargeItemIdList" item="chargeItemId" separator="," open="(" close=")">
|
||
#{chargeItemId}
|
||
</foreach>
|
||
</if>
|
||
UNION
|
||
SELECT T1.id AS charge_item_id,
|
||
T1.service_table,
|
||
T1.service_id,
|
||
T6.bus_no,
|
||
T6.prescription_no,
|
||
T6.quantity,
|
||
T6.activity_id AS item_id,
|
||
T6.unit_code,
|
||
T1.unit_price,
|
||
T1.total_price,
|
||
T6.id AS request_id,
|
||
T9.name AS item_name,
|
||
T10.id AS payment_id,
|
||
T1.status_enum AS refund_status
|
||
FROM adm_charge_item AS T1
|
||
LEFT JOIN wor_service_request AS T6
|
||
ON T6.id = T1.service_id
|
||
AND T6.delete_flag = '0'
|
||
LEFT JOIN wor_activity_definition AS T9
|
||
ON T1.product_id = T9.id
|
||
AND T9.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation AS T10
|
||
ON T1.id::TEXT = ANY(string_to_array(T10.charge_item_ids, ','))
|
||
AND T10.delete_flag = '0'
|
||
AND T10.status_enum = 1
|
||
WHERE T1.service_table = #{worServiceRequest}
|
||
AND T1.delete_flag = '0'
|
||
<if test="chargeItemIdList != null and !chargeItemIdList.isEmpty()">
|
||
AND T1.id IN
|
||
<foreach collection="chargeItemIdList" item="chargeItemId" separator="," open="(" close=")">
|
||
#{chargeItemId}
|
||
</foreach>
|
||
</if>
|
||
</select>
|
||
<select id="selectBilledEncounterPatientPage"
|
||
resultType="com.openhis.web.chargemanage.dto.EncounterPatientPageDto">
|
||
SELECT T8.encounter_id,
|
||
T8.encounter_bus_no,
|
||
T8.status_enum,
|
||
T8.start_time,
|
||
T8.patient_name,
|
||
T8.patient_bus_no,
|
||
T8.gender_enum,
|
||
T8.birth_date,
|
||
T8.id_card,
|
||
T8.patient_py_str,
|
||
T8.patient_wb_str,
|
||
T8.type_code,
|
||
T8.category_enum,
|
||
T8.total_amount,
|
||
T8.max_bill_date,
|
||
T8.insurance_amount,
|
||
T8.self_amount
|
||
FROM (
|
||
SELECT T1.id AS encounter_id,
|
||
T1.bus_no AS encounter_bus_no,
|
||
T1.start_time,
|
||
T1.delete_flag,
|
||
T1.tenant_id,
|
||
T3.status_enum,
|
||
T2."name" AS patient_name,
|
||
T2.bus_no AS patient_bus_no,
|
||
T2.gender_enum,
|
||
T2.birth_date,
|
||
T2.id_card,
|
||
T2.py_str AS patient_py_str,
|
||
T2.wb_str AS patient_wb_str,
|
||
T4.type_code,
|
||
T5.category_enum,
|
||
SUM(T6.tendered_amount) AS total_amount,
|
||
MAX(T6.bill_date) AS max_bill_date,
|
||
CASE WHEN T7.account_code = #{insurance} THEN SUM(T7.amount) ELSE 0 END AS insurance_amount,
|
||
CASE WHEN T7.account_code != #{insurance} THEN SUM(T7.amount) ELSE 0 END AS self_amount
|
||
FROM adm_encounter AS T1
|
||
LEFT JOIN adm_patient AS T2
|
||
ON T1.patient_id = T2.id
|
||
AND T2.delete_flag = '0'
|
||
LEFT JOIN adm_charge_item AS T3
|
||
ON T3.encounter_id = T1.id
|
||
AND T3.delete_flag = '0'
|
||
LEFT JOIN adm_account AS T4
|
||
ON T4.id = T3.account_id
|
||
AND T4.delete_flag = '0'
|
||
LEFT JOIN fin_contract AS T5
|
||
ON T5.bus_no = T4.contract_no
|
||
AND T5.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation AS T6
|
||
ON T6.encounter_id = T1.id
|
||
AND T6.status_enum = 1
|
||
AND T6.delete_flag = '0'
|
||
LEFT JOIN fin_payment_rec_detail AS T7
|
||
ON T7.reconciliation_id = T6.id
|
||
AND T7.delete_flag = '0'
|
||
WHERE T3.status_enum IN (#{billed}, #{refunding}, #{refunded}, #{partRefund})
|
||
AND T3.refund_id IS NULL
|
||
AND T3.context_enum != #{register}
|
||
AND T1.class_enum = #{amb}
|
||
AND T1.delete_flag = '0'
|
||
GROUP BY T1.id,
|
||
T1.bus_no,
|
||
T1.start_time,
|
||
T1.delete_flag,
|
||
T1.tenant_id,
|
||
T3.status_enum,
|
||
T2."name",
|
||
T2.bus_no,
|
||
T2.gender_enum,
|
||
T2.birth_date,
|
||
T2.id_card,
|
||
T2.py_str,
|
||
T2.wb_str,
|
||
T4.type_code,
|
||
T5.category_enum,
|
||
T7.account_code
|
||
) AS T8
|
||
${ew.customSqlSegment}
|
||
ORDER BY T8.max_bill_date DESC
|
||
</select>
|
||
<select id="selectEncounterPatientRefund" resultMap="encounterPatientRefundMap">
|
||
SELECT aci.encounter_id,
|
||
aci.bus_no,
|
||
aci.status_enum AS charge_status,
|
||
aci.quantity_unit,
|
||
aci.quantity_value,
|
||
aci.unit_price,
|
||
aci.total_price,
|
||
aci.service_table,
|
||
mmr.prescription_no,
|
||
mmr.id AS request_id,
|
||
0 AS service_status,
|
||
mmd."name" AS item_name,
|
||
fpr.id AS payment_id,
|
||
fpr.enterer_id,
|
||
fpr.patient_id,
|
||
fpr.status_enum AS payment_status,
|
||
fpr.contract_no,
|
||
fpr.bill_date,
|
||
fpr.charge_item_ids,
|
||
fprd.id AS payment_detail_id,
|
||
fprd.target_enum,
|
||
fprd.account_id,
|
||
fprd.account_code,
|
||
fprd.pay_enum,
|
||
fprd.pay_level_enum,
|
||
fprd.amount,
|
||
fprd.return_amount,
|
||
fprd.charge_amount,
|
||
ao."name" AS org_name,
|
||
ap."name" AS enterer_name
|
||
FROM adm_charge_item aci
|
||
LEFT JOIN med_medication_request mmr
|
||
ON aci.service_id = mmr.refund_medicine_id
|
||
AND mmr.refund_medicine_id IS NOT NULL
|
||
AND mmr.delete_flag = '0'
|
||
INNER JOIN med_medication_definition mmd
|
||
ON aci.product_id = mmd.id
|
||
AND mmd.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation fpr
|
||
ON aci.id::TEXT = ANY(string_to_array(fpr.charge_item_ids, ','))
|
||
AND fpr.status_enum = 1
|
||
AND fpr.delete_flag = '0'
|
||
LEFT JOIN fin_payment_rec_detail fprd
|
||
ON fpr.id = fprd.reconciliation_id
|
||
AND fprd.delete_flag = '0'
|
||
LEFT JOIN adm_organization ao
|
||
ON ao.id = aci.org_id
|
||
AND ao.delete_flag = '0'
|
||
LEFT JOIN adm_practitioner ap
|
||
ON ap.id = fpr.enterer_id
|
||
AND ap.delete_flag = '0'
|
||
WHERE aci.encounter_id = #{encounterId}
|
||
AND aci.status_enum IN (#{partRefund}
|
||
, #{refunded}
|
||
, #{refunding})
|
||
AND aci.service_table = #{medMedicationRequest}
|
||
AND aci.refund_id IS NULL
|
||
AND aci.delete_flag = '0'
|
||
AND TO_CHAR(fpr.bill_date
|
||
, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{billDateSTime}
|
||
AND #{billDateETime}
|
||
UNION
|
||
SELECT aci.encounter_id,
|
||
aci.bus_no,
|
||
aci.status_enum AS charge_status,
|
||
aci.quantity_unit,
|
||
aci.quantity_value,
|
||
aci.unit_price,
|
||
aci.total_price,
|
||
aci.service_table,
|
||
wdr.prescription_no,
|
||
wdr.id AS request_id,
|
||
0 AS service_status,
|
||
dev."name" AS item_name,
|
||
fpr.id AS payment_id,
|
||
fpr.enterer_id,
|
||
fpr.patient_id,
|
||
fpr.status_enum AS payment_status,
|
||
fpr.contract_no,
|
||
fpr.bill_date,
|
||
fpr.charge_item_ids,
|
||
fprd.id AS payment_detail_id,
|
||
fprd.target_enum,
|
||
fprd.account_id,
|
||
fprd.account_code,
|
||
fprd.pay_enum,
|
||
fprd.pay_level_enum,
|
||
fprd.amount,
|
||
fprd.return_amount,
|
||
fprd.charge_amount,
|
||
ao."name" AS org_name,
|
||
ap."name" AS enterer_name
|
||
FROM adm_charge_item aci
|
||
LEFT JOIN wor_device_request wdr
|
||
ON aci.service_id = wdr.refund_device_id
|
||
AND wdr.refund_device_id IS NOT NULL
|
||
AND wdr.delete_flag = '0'
|
||
INNER JOIN adm_device_definition dev
|
||
ON aci.product_id = dev.id
|
||
AND dev.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation fpr
|
||
ON aci.id::TEXT = ANY(string_to_array(fpr.charge_item_ids, ','))
|
||
AND fpr.status_enum = 1
|
||
AND fpr.delete_flag = '0'
|
||
LEFT JOIN fin_payment_rec_detail fprd
|
||
ON fpr.id = fprd.reconciliation_id
|
||
AND fprd.delete_flag = '0'
|
||
LEFT JOIN adm_organization ao
|
||
ON ao.id = aci.org_id
|
||
AND ao.delete_flag = '0'
|
||
LEFT JOIN adm_practitioner ap
|
||
ON ap.id = fpr.enterer_id
|
||
AND ap.delete_flag = '0'
|
||
WHERE aci.encounter_id = #{encounterId}
|
||
AND aci.status_enum IN (#{partRefund}
|
||
, #{refunded}
|
||
, #{refunding})
|
||
AND aci.service_table = #{worDeviceRequest}
|
||
AND aci.refund_id IS NULL
|
||
AND aci.delete_flag = '0'
|
||
AND TO_CHAR(fpr.bill_date
|
||
, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{billDateSTime}
|
||
AND #{billDateETime}
|
||
UNION
|
||
SELECT aci.encounter_id,
|
||
aci.bus_no,
|
||
aci.status_enum AS charge_status,
|
||
aci.quantity_unit,
|
||
aci.quantity_value,
|
||
aci.unit_price,
|
||
aci.total_price,
|
||
aci.service_table,
|
||
wsr.prescription_no,
|
||
wsr.id AS request_id,
|
||
wsr.status_enum AS service_status,
|
||
wad."name" AS item_name,
|
||
fpr.id AS payment_id,
|
||
fpr.enterer_id,
|
||
fpr.patient_id,
|
||
fpr.status_enum AS payment_status,
|
||
fpr.contract_no,
|
||
fpr.bill_date,
|
||
fpr.charge_item_ids,
|
||
fprd.id AS payment_detail_id,
|
||
fprd.target_enum,
|
||
fprd.account_id,
|
||
fprd.account_code,
|
||
fprd.pay_enum,
|
||
fprd.pay_level_enum,
|
||
fprd.amount,
|
||
fprd.return_amount,
|
||
fprd.charge_amount,
|
||
ao."name" AS org_name,
|
||
ap."name" AS enterer_name
|
||
FROM adm_charge_item aci
|
||
LEFT JOIN wor_service_request wsr
|
||
ON aci.service_id = wsr.id
|
||
AND wsr.refund_service_id IS NOT NULL
|
||
AND wsr.delete_flag = '0'
|
||
INNER JOIN wor_activity_definition wad
|
||
ON aci.product_id = wad.id
|
||
AND wad.delete_flag = '0'
|
||
LEFT JOIN fin_payment_reconciliation fpr
|
||
ON aci.id::TEXT = ANY(string_to_array(fpr.charge_item_ids,','))
|
||
AND fpr.status_enum = 1
|
||
AND fpr.delete_flag = '0'
|
||
LEFT JOIN fin_payment_rec_detail fprd
|
||
ON fpr.id = fprd.reconciliation_id
|
||
AND fprd.delete_flag = '0'
|
||
LEFT JOIN adm_organization ao
|
||
ON ao.id = aci.org_id
|
||
AND ao.delete_flag = '0'
|
||
LEFT JOIN adm_practitioner ap
|
||
ON ap.id = fpr.enterer_id
|
||
AND ap.delete_flag = '0'
|
||
WHERE aci.encounter_id = #{encounterId}
|
||
AND aci.status_enum IN (#{partRefund}
|
||
, #{refunded}
|
||
, #{refunding})
|
||
AND aci.service_table = #{worServiceRequest}
|
||
AND aci.refund_id IS NULL
|
||
AND aci.delete_flag = '0'
|
||
AND TO_CHAR(fpr.bill_date
|
||
, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{billDateSTime}
|
||
AND #{billDateETime}
|
||
</select>
|
||
</mapper>
|