195 lines
7.7 KiB
SQL
195 lines
7.7 KiB
SQL
DROP PROCEDURE IF EXISTS sp_sampling_fix_normal_by_orderdetail;
|
|
|
|
DELIMITER $$
|
|
|
|
CREATE PROCEDURE sp_sampling_fix_normal_by_orderdetail(IN pT_OrderDetailID INT)
|
|
BEGIN
|
|
DECLARE vOrderHeaderID INT DEFAULT NULL;
|
|
DECLARE vPatientSexID INT DEFAULT NULL;
|
|
DECLARE vPatientDOB DATE DEFAULT NULL;
|
|
DECLARE vOrderDate DATE DEFAULT NULL;
|
|
DECLARE vAgeInDay INT DEFAULT NULL;
|
|
DECLARE vNatTestID INT DEFAULT NULL;
|
|
DECLARE vCurrentNormalValueID INT DEFAULT NULL;
|
|
|
|
DECLARE vMethodIDPriority INT DEFAULT NULL;
|
|
DECLARE vMethodNamePriority VARCHAR(100) DEFAULT NULL;
|
|
DECLARE vMethodIDInstrument INT DEFAULT NULL;
|
|
DECLARE vMethodNameInstrument VARCHAR(100) DEFAULT NULL;
|
|
DECLARE vMethodIDNormal INT DEFAULT NULL;
|
|
DECLARE vMethodNameNormal VARCHAR(100) DEFAULT NULL;
|
|
|
|
DECLARE vSelectedMethodID INT DEFAULT NULL;
|
|
DECLARE vSelectedMethodName VARCHAR(100) DEFAULT NULL;
|
|
DECLARE vSelectedMethodSource VARCHAR(30) DEFAULT NULL;
|
|
DECLARE vNormalValueID INT DEFAULT 0;
|
|
|
|
SELECT
|
|
od.T_OrderDetailT_OrderHeaderID,
|
|
p.M_PatientM_SexID,
|
|
p.M_PatientDOB,
|
|
DATE(oh.T_OrderHeaderDate),
|
|
tt.T_TestNat_TestID,
|
|
od.T_OrderDetailNat_NormalValueID
|
|
INTO
|
|
vOrderHeaderID,
|
|
vPatientSexID,
|
|
vPatientDOB,
|
|
vOrderDate,
|
|
vNatTestID,
|
|
vCurrentNormalValueID
|
|
FROM t_orderdetail od
|
|
JOIN t_orderheader oh
|
|
ON oh.T_OrderHeaderID = od.T_OrderDetailT_OrderHeaderID
|
|
JOIN m_patient p
|
|
ON p.M_PatientID = oh.T_OrderHeaderM_PatientID
|
|
LEFT JOIN t_test tt
|
|
ON tt.T_TestID = od.T_OrderDetailT_TestID
|
|
WHERE od.T_OrderDetailID = pT_OrderDetailID
|
|
AND od.T_OrderDetailIsActive = 'Y'
|
|
LIMIT 1;
|
|
|
|
IF vOrderHeaderID IS NULL THEN
|
|
SELECT
|
|
'ERR' AS status,
|
|
CONCAT('T_OrderDetailID ', pT_OrderDetailID, ' tidak ditemukan atau tidak aktif') AS message,
|
|
NULL AS selected_methode_id,
|
|
NULL AS selected_methode_name,
|
|
NULL AS nat_normalvalue_id,
|
|
0 AS updated_rows;
|
|
ELSE
|
|
IF vPatientDOB IS NOT NULL AND vOrderDate IS NOT NULL THEN
|
|
SET vAgeInDay = fn_global_age_count_day(vPatientDOB, vOrderDate);
|
|
END IF;
|
|
|
|
SELECT
|
|
mp.M_MethodePriorityNat_MethodeID,
|
|
nm.Nat_MethodeName
|
|
INTO
|
|
vMethodIDPriority,
|
|
vMethodNamePriority
|
|
FROM m_methode_priority mp
|
|
JOIN nat_methode nm
|
|
ON nm.Nat_MethodeID = mp.M_MethodePriorityNat_MethodeID
|
|
AND nm.Nat_MethodeIsActive = 'Y'
|
|
JOIN m_instrumentmethode im
|
|
ON im.M_InstrumentMethodeNat_MethodeID = nm.Nat_MethodeID
|
|
AND im.M_InstrumentMethodeIsActive = 'Y'
|
|
JOIN nat_instrument ni
|
|
ON ni.Nat_InstrumentID = im.M_InstrumentMethodeNat_InstrumentID
|
|
AND ni.Nat_InstrumentIsActive = 'Y'
|
|
WHERE mp.M_MethodePriorityIsActive = 'Y'
|
|
AND mp.M_MethodePriorityNat_TestID = vNatTestID
|
|
AND mp.M_MethodePriorityM_DayOfWeekID = DAYOFWEEK(NOW())
|
|
ORDER BY mp.M_MethodePriorityNumber DESC
|
|
LIMIT 1;
|
|
|
|
SELECT
|
|
im.M_InstrumentMethodeNat_MethodeID,
|
|
nm.Nat_MethodeName
|
|
INTO
|
|
vMethodIDInstrument,
|
|
vMethodNameInstrument
|
|
FROM m_instrumentmethode im
|
|
JOIN nat_methode nm
|
|
ON nm.Nat_MethodeID = im.M_InstrumentMethodeNat_MethodeID
|
|
AND nm.Nat_MethodeIsActive = 'Y'
|
|
JOIN nat_instrument ni
|
|
ON ni.Nat_InstrumentID = im.M_InstrumentMethodeNat_InstrumentID
|
|
AND ni.Nat_InstrumentIsActive = 'Y'
|
|
WHERE im.M_InstrumentMethodeNat_TestID = vNatTestID
|
|
AND im.M_InstrumentMethodeIsActive = 'Y'
|
|
ORDER BY im.M_InstrumentMethodePriority DESC
|
|
LIMIT 1;
|
|
|
|
SELECT
|
|
nn.Nat_NormalValueNat_MethodeID,
|
|
nm.Nat_MethodeName
|
|
INTO
|
|
vMethodIDNormal,
|
|
vMethodNameNormal
|
|
FROM nat_normalvalue nn
|
|
JOIN nat_methode nm
|
|
ON nm.Nat_MethodeID = nn.Nat_NormalValueNat_MethodeID
|
|
AND nm.Nat_MethodeIsActive = 'Y'
|
|
WHERE nn.Nat_NormalValueNat_TestID = vNatTestID
|
|
AND nn.Nat_NormalValueIsActive = 'Y'
|
|
ORDER BY nn.Nat_NormalValueID
|
|
LIMIT 1;
|
|
|
|
IF vMethodIDPriority IS NOT NULL AND vMethodIDPriority > 0 THEN
|
|
SET vSelectedMethodID = vMethodIDPriority;
|
|
SET vSelectedMethodName = vMethodNamePriority;
|
|
SET vSelectedMethodSource = 'm_methode_priority';
|
|
ELSEIF vMethodIDInstrument IS NOT NULL AND vMethodIDInstrument > 0 THEN
|
|
SET vSelectedMethodID = vMethodIDInstrument;
|
|
SET vSelectedMethodName = vMethodNameInstrument;
|
|
SET vSelectedMethodSource = 'm_instrumentmethode';
|
|
ELSEIF vMethodIDNormal IS NOT NULL AND vMethodIDNormal > 0 THEN
|
|
SET vSelectedMethodID = vMethodIDNormal;
|
|
SET vSelectedMethodName = vMethodNameNormal;
|
|
SET vSelectedMethodSource = 'nat_normalvalue';
|
|
END IF;
|
|
|
|
IF vSelectedMethodID IS NOT NULL
|
|
AND vSelectedMethodID > 0
|
|
AND vNatTestID IS NOT NULL
|
|
AND vPatientSexID IS NOT NULL
|
|
AND vAgeInDay IS NOT NULL THEN
|
|
SET vNormalValueID = fn_sampling_get_normal(vSelectedMethodID, vNatTestID, vPatientSexID, vAgeInDay);
|
|
END IF;
|
|
|
|
IF vNormalValueID IS NOT NULL AND vNormalValueID > 0 THEN
|
|
UPDATE t_orderdetail od
|
|
JOIN nat_normalvalue nn
|
|
ON nn.Nat_NormalValueID = vNormalValueID
|
|
SET
|
|
od.T_OrderDetailNat_NormalValueID = nn.Nat_NormalValueID,
|
|
od.T_OrderDetailNormalValueNote = nn.Nat_NormalValueNote,
|
|
od.T_OrderDetailNormalValueDescription = nn.Nat_NormalValueDescription,
|
|
od.T_OrderDetailMinValue = nn.Nat_NormalValueMinValue,
|
|
od.T_OrderDetailMaxValue = nn.Nat_NormalValueMaxValue,
|
|
od.T_OrderDetailMinValueInclusive = nn.Nat_NormalValueMinValueInclusive,
|
|
od.T_OrderDetailMaxValueInclusive = nn.Nat_NormalValueMaxValueInclusive,
|
|
od.T_OrderDetailNat_MethodeID = vSelectedMethodID,
|
|
od.T_OrderdetailNat_MethodeName = vSelectedMethodName
|
|
WHERE od.T_OrderDetailID = pT_OrderDetailID
|
|
AND od.T_OrderDetailIsActive = 'Y';
|
|
|
|
SELECT
|
|
'OK' AS status,
|
|
CONCAT('Normal value berhasil diupdate untuk T_OrderDetailID ', pT_OrderDetailID) AS message,
|
|
vSelectedMethodID AS selected_methode_id,
|
|
vSelectedMethodName AS selected_methode_name,
|
|
vSelectedMethodSource AS selected_methode_source,
|
|
vNormalValueID AS nat_normalvalue_id,
|
|
ROW_COUNT() AS updated_rows;
|
|
ELSE
|
|
SELECT
|
|
'NOT_FOUND' AS status,
|
|
CONCAT('Normal value tidak ditemukan untuk T_OrderDetailID ', pT_OrderDetailID) AS message,
|
|
vSelectedMethodID AS selected_methode_id,
|
|
vSelectedMethodName AS selected_methode_name,
|
|
vSelectedMethodSource AS selected_methode_source,
|
|
vNormalValueID AS nat_normalvalue_id,
|
|
0 AS updated_rows;
|
|
END IF;
|
|
|
|
SELECT
|
|
od.T_OrderDetailID,
|
|
od.T_OrderDetailNat_NormalValueID,
|
|
od.T_OrderDetailNat_MethodeID,
|
|
od.T_OrderdetailNat_MethodeName,
|
|
od.T_OrderDetailNormalValueDescription,
|
|
od.T_OrderDetailMinValue,
|
|
od.T_OrderDetailMaxValue,
|
|
od.T_OrderDetailMinValueInclusive,
|
|
od.T_OrderDetailMaxValueInclusive
|
|
FROM t_orderdetail od
|
|
WHERE od.T_OrderDetailID = pT_OrderDetailID
|
|
LIMIT 1;
|
|
END IF;
|
|
END$$
|
|
|
|
DELIMITER ;
|