Add sampling normal SQL tools
This commit is contained in:
@@ -0,0 +1,463 @@
|
|||||||
|
DROP PROCEDURE IF EXISTS sp_sampling_check_normal_setting;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
|
||||||
|
CREATE PROCEDURE sp_sampling_check_normal_setting(IN pT_OrderDetailID INT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vOrderHeaderID INT DEFAULT NULL;
|
||||||
|
DECLARE vPatientID INT DEFAULT NULL;
|
||||||
|
DECLARE vPatientSexID INT DEFAULT NULL;
|
||||||
|
DECLARE vPatientDOB DATE DEFAULT NULL;
|
||||||
|
DECLARE vOrderDate DATE DEFAULT NULL;
|
||||||
|
DECLARE vAgeInDay INT DEFAULT NULL;
|
||||||
|
DECLARE vTTestID INT DEFAULT NULL;
|
||||||
|
DECLARE vNatTestID INT DEFAULT NULL;
|
||||||
|
DECLARE vOrderDetailMethodID 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 vFnNormalValueID INT DEFAULT 0;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
od.T_OrderDetailT_OrderHeaderID,
|
||||||
|
oh.T_OrderHeaderM_PatientID,
|
||||||
|
p.M_PatientM_SexID,
|
||||||
|
p.M_PatientDOB,
|
||||||
|
DATE(oh.T_OrderHeaderDate),
|
||||||
|
od.T_OrderDetailT_TestID,
|
||||||
|
tt.T_TestNat_TestID,
|
||||||
|
od.T_OrderDetailNat_MethodeID
|
||||||
|
INTO
|
||||||
|
vOrderHeaderID,
|
||||||
|
vPatientID,
|
||||||
|
vPatientSexID,
|
||||||
|
vPatientDOB,
|
||||||
|
vOrderDate,
|
||||||
|
vTTestID,
|
||||||
|
vNatTestID,
|
||||||
|
vOrderDetailMethodID
|
||||||
|
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;
|
||||||
|
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 vFnNormalValueID = fn_sampling_get_normal(vSelectedMethodID, vNatTestID, vPatientSexID, vAgeInDay);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
pT_OrderDetailID AS T_OrderDetailID,
|
||||||
|
vOrderHeaderID AS T_OrderHeaderID,
|
||||||
|
vPatientID AS M_PatientID,
|
||||||
|
vPatientSexID AS M_PatientM_SexID,
|
||||||
|
vPatientDOB AS M_PatientDOB,
|
||||||
|
vOrderDate AS T_OrderHeaderDate,
|
||||||
|
vAgeInDay AS AgeInDay,
|
||||||
|
vTTestID AS T_TestID,
|
||||||
|
vNatTestID AS Nat_TestID,
|
||||||
|
vOrderDetailMethodID AS T_OrderDetailNat_MethodeID,
|
||||||
|
vMethodIDPriority AS MethodeIDFromPriority,
|
||||||
|
vMethodNamePriority AS MethodeNameFromPriority,
|
||||||
|
vMethodIDInstrument AS MethodeIDFromInstrument,
|
||||||
|
vMethodNameInstrument AS MethodeNameFromInstrument,
|
||||||
|
vMethodIDNormal AS MethodeIDFromNormalValue,
|
||||||
|
vMethodNameNormal AS MethodeNameFromNormalValue,
|
||||||
|
vSelectedMethodID AS SelectedMethodeID,
|
||||||
|
vSelectedMethodName AS SelectedMethodeName,
|
||||||
|
vSelectedMethodSource AS SelectedMethodeSource,
|
||||||
|
vFnNormalValueID AS FnSamplingGetNormalResult;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
'ORDER_DETAIL_ACTIVE' AS check_name,
|
||||||
|
IF(vOrderHeaderID IS NOT NULL, 'OK', 'MISSING') AS check_status,
|
||||||
|
CAST(pT_OrderDetailID AS CHAR) AS check_value,
|
||||||
|
't_orderdetail aktif harus ditemukan' AS check_note
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'PATIENT_SEX',
|
||||||
|
IF(vPatientSexID IS NOT NULL AND vPatientSexID > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vPatientSexID AS CHAR), 'NULL'),
|
||||||
|
'Dipakai pada type 1 dan type 3'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'PATIENT_DOB',
|
||||||
|
IF(vPatientDOB IS NOT NULL, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vPatientDOB AS CHAR), 'NULL'),
|
||||||
|
'DOB dipakai untuk hitung AgeInDay'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'ORDER_DATE',
|
||||||
|
IF(vOrderDate IS NOT NULL, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vOrderDate AS CHAR), 'NULL'),
|
||||||
|
'Tanggal order dipakai untuk hitung AgeInDay'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'AGE_IN_DAY',
|
||||||
|
IF(vAgeInDay IS NOT NULL, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vAgeInDay AS CHAR), 'NULL'),
|
||||||
|
'Dipakai pada type 1 dan type 2'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'NAT_TEST',
|
||||||
|
IF(vNatTestID IS NOT NULL AND vNatTestID > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vNatTestID AS CHAR), 'NULL'),
|
||||||
|
'Harus ada mapping T_TestNat_TestID'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'METHOD_PRIORITY',
|
||||||
|
IF(vMethodIDPriority IS NOT NULL AND vMethodIDPriority > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vMethodIDPriority AS CHAR), 'NULL'),
|
||||||
|
'Sumber metode prioritas pertama'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'METHOD_INSTRUMENT',
|
||||||
|
IF(vMethodIDInstrument IS NOT NULL AND vMethodIDInstrument > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vMethodIDInstrument AS CHAR), 'NULL'),
|
||||||
|
'Fallback metode kedua'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'METHOD_NORMALVALUE',
|
||||||
|
IF(vMethodIDNormal IS NOT NULL AND vMethodIDNormal > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vMethodIDNormal AS CHAR), 'NULL'),
|
||||||
|
'Fallback metode ketiga'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'SELECTED_METHOD',
|
||||||
|
IF(vSelectedMethodID IS NOT NULL AND vSelectedMethodID > 0, 'OK', 'MISSING'),
|
||||||
|
IFNULL(CAST(vSelectedMethodID AS CHAR), 'NULL'),
|
||||||
|
IFNULL(vSelectedMethodSource, 'Tidak ada metode yang bisa dipakai')
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'NORMALVALUE_TEST_METHOD_ACTIVE',
|
||||||
|
IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND Nat_NormalValueNat_MethodeID = IFNULL(vSelectedMethodID, 0)
|
||||||
|
AND Nat_NormalValueIsActive = 'Y') > 0,
|
||||||
|
'OK',
|
||||||
|
'MISSING'
|
||||||
|
),
|
||||||
|
CAST(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND Nat_NormalValueNat_MethodeID = IFNULL(vSelectedMethodID, 0)
|
||||||
|
AND Nat_NormalValueIsActive = 'Y') AS CHAR
|
||||||
|
),
|
||||||
|
'Jumlah nat_normalvalue aktif untuk test + metode terpilih'
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'FN_RESULT',
|
||||||
|
IF(vFnNormalValueID IS NOT NULL AND vFnNormalValueID > 0, 'OK', 'NOT_FOUND'),
|
||||||
|
IFNULL(CAST(vFnNormalValueID AS CHAR), '0'),
|
||||||
|
'Hasil akhir fn_sampling_get_normal'
|
||||||
|
;
|
||||||
|
|
||||||
|
IF vSelectedMethodID IS NOT NULL AND vSelectedMethodID > 0 THEN
|
||||||
|
SELECT
|
||||||
|
branch_name,
|
||||||
|
matched_count,
|
||||||
|
first_normalvalue_id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
'TYPE_1' AS branch_name,
|
||||||
|
COUNT(*) AS matched_count,
|
||||||
|
MIN(Nat_NormalValueID) AS first_normalvalue_id
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE (Nat_NormalValueValidDate IS NULL OR Nat_NormalValueValidDate < NOW())
|
||||||
|
AND Nat_NormalValueIsActive = 'Y'
|
||||||
|
AND Nat_NormalValueNat_NormalValueTypeID = 1
|
||||||
|
AND Nat_NormalValueIsAbnormal = 'N'
|
||||||
|
AND Nat_NormalValueNat_MethodeID = vSelectedMethodID
|
||||||
|
AND Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND Nat_NormalValueNat_SexID = vPatientSexID
|
||||||
|
AND (
|
||||||
|
(Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(Nat_NormalValueMinAge, Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR (Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(Nat_NormalValueMinAge, Nat_NormalValueAgeUnit) < vAgeInDay)
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
(Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(Nat_NormalValueMaxAge, Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR (Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(Nat_NormalValueMaxAge, Nat_NormalValueAgeUnit) > vAgeInDay)
|
||||||
|
)
|
||||||
|
AND Nat_NormalValueNat_FlagID = 1
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
'TYPE_2',
|
||||||
|
COUNT(*),
|
||||||
|
MIN(Nat_NormalValueID)
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE (Nat_NormalValueValidDate IS NULL OR Nat_NormalValueValidDate < NOW())
|
||||||
|
AND Nat_NormalValueIsActive = 'Y'
|
||||||
|
AND Nat_NormalValueNat_NormalValueTypeID = 2
|
||||||
|
AND Nat_NormalValueIsAbnormal = 'N'
|
||||||
|
AND Nat_NormalValueNat_MethodeID = vSelectedMethodID
|
||||||
|
AND Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND (
|
||||||
|
(Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(Nat_NormalValueMinAge, Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR (Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(Nat_NormalValueMinAge, Nat_NormalValueAgeUnit) < vAgeInDay)
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
(Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(Nat_NormalValueMaxAge, Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR (Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(Nat_NormalValueMaxAge, Nat_NormalValueAgeUnit) > vAgeInDay)
|
||||||
|
)
|
||||||
|
AND Nat_NormalValueNat_FlagID = 1
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
'TYPE_3',
|
||||||
|
COUNT(*),
|
||||||
|
MIN(Nat_NormalValueID)
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE (Nat_NormalValueValidDate IS NULL OR Nat_NormalValueValidDate < NOW())
|
||||||
|
AND Nat_NormalValueIsActive = 'Y'
|
||||||
|
AND Nat_NormalValueNat_NormalValueTypeID = 3
|
||||||
|
AND Nat_NormalValueIsAbnormal = 'N'
|
||||||
|
AND Nat_NormalValueNat_MethodeID = vSelectedMethodID
|
||||||
|
AND Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND Nat_NormalValueNat_SexID = vPatientSexID
|
||||||
|
AND Nat_NormalValueNat_FlagID = 1
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
'TYPE_4',
|
||||||
|
COUNT(*),
|
||||||
|
MIN(Nat_NormalValueID)
|
||||||
|
FROM nat_normalvalue
|
||||||
|
WHERE (Nat_NormalValueValidDate IS NULL OR Nat_NormalValueValidDate < NOW())
|
||||||
|
AND Nat_NormalValueIsActive = 'Y'
|
||||||
|
AND Nat_NormalValueNat_NormalValueTypeID = 4
|
||||||
|
AND Nat_NormalValueIsAbnormal = 'N'
|
||||||
|
AND Nat_NormalValueNat_MethodeID = vSelectedMethodID
|
||||||
|
AND Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
AND Nat_NormalValueNat_FlagID = 1
|
||||||
|
) branch_summary;
|
||||||
|
ELSE
|
||||||
|
SELECT
|
||||||
|
'NO_SELECTED_METHOD' AS branch_name,
|
||||||
|
0 AS matched_count,
|
||||||
|
NULL AS first_normalvalue_id;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
nn.Nat_NormalValueID,
|
||||||
|
nn.Nat_NormalValueNat_TestID,
|
||||||
|
nn.Nat_NormalValueNat_MethodeID,
|
||||||
|
nm.Nat_MethodeName,
|
||||||
|
nn.Nat_NormalValueNat_NormalValueTypeID,
|
||||||
|
nn.Nat_NormalValueNat_SexID,
|
||||||
|
nn.Nat_NormalValueValidDate,
|
||||||
|
nn.Nat_NormalValueMinAge,
|
||||||
|
nn.Nat_NormalValueMaxAge,
|
||||||
|
nn.Nat_NormalValueAgeUnit,
|
||||||
|
nn.Nat_NormalValueMinAgeInclusive,
|
||||||
|
nn.Nat_NormalValueMaxAgeInclusive,
|
||||||
|
fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) AS MinAgeInDay,
|
||||||
|
fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) AS MaxAgeInDay,
|
||||||
|
nn.Nat_NormalValueNat_FlagID,
|
||||||
|
nn.Nat_NormalValueIsAbnormal,
|
||||||
|
nn.Nat_NormalValueIsActive,
|
||||||
|
IF((nn.Nat_NormalValueValidDate IS NULL OR nn.Nat_NormalValueValidDate < NOW()), 'Y', 'N') AS MatchValidDate,
|
||||||
|
IF(nn.Nat_NormalValueIsActive = 'Y', 'Y', 'N') AS MatchActive,
|
||||||
|
IF(nn.Nat_NormalValueIsAbnormal = 'N', 'Y', 'N') AS MatchNotAbnormal,
|
||||||
|
IF(nn.Nat_NormalValueNat_FlagID = 1, 'Y', 'N') AS MatchFlag,
|
||||||
|
IF(nn.Nat_NormalValueNat_TestID = vNatTestID, 'Y', 'N') AS MatchNatTest,
|
||||||
|
IF(vSelectedMethodID IS NOT NULL AND nn.Nat_NormalValueNat_MethodeID = vSelectedMethodID, 'Y', 'N') AS MatchSelectedMethod,
|
||||||
|
IF(nn.Nat_NormalValueNat_SexID = vPatientSexID, 'Y', 'N') AS MatchSex,
|
||||||
|
IF(
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) < vAgeInDay),
|
||||||
|
'Y',
|
||||||
|
'N'
|
||||||
|
) AS MatchMinAge,
|
||||||
|
IF(
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) > vAgeInDay),
|
||||||
|
'Y',
|
||||||
|
'N'
|
||||||
|
) AS MatchMaxAge,
|
||||||
|
CASE
|
||||||
|
WHEN nn.Nat_NormalValueNat_NormalValueTypeID = 1 THEN
|
||||||
|
IF(
|
||||||
|
nn.Nat_NormalValueNat_SexID = vPatientSexID
|
||||||
|
AND (
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) < vAgeInDay)
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) > vAgeInDay)
|
||||||
|
),
|
||||||
|
'Y',
|
||||||
|
'N'
|
||||||
|
)
|
||||||
|
WHEN nn.Nat_NormalValueNat_NormalValueTypeID = 2 THEN
|
||||||
|
IF(
|
||||||
|
(
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) < vAgeInDay)
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) > vAgeInDay)
|
||||||
|
),
|
||||||
|
'Y',
|
||||||
|
'N'
|
||||||
|
)
|
||||||
|
WHEN nn.Nat_NormalValueNat_NormalValueTypeID = 3 THEN
|
||||||
|
IF(nn.Nat_NormalValueNat_SexID = vPatientSexID, 'Y', 'N')
|
||||||
|
WHEN nn.Nat_NormalValueNat_NormalValueTypeID = 4 THEN
|
||||||
|
'Y'
|
||||||
|
ELSE
|
||||||
|
'N'
|
||||||
|
END AS MatchTypeRule,
|
||||||
|
CONCAT_WS(
|
||||||
|
'; ',
|
||||||
|
IF(NOT (nn.Nat_NormalValueValidDate IS NULL OR nn.Nat_NormalValueValidDate < NOW()), 'valid_date_not_passed', NULL),
|
||||||
|
IF(nn.Nat_NormalValueIsActive <> 'Y', 'inactive', NULL),
|
||||||
|
IF(nn.Nat_NormalValueIsAbnormal <> 'N', 'abnormal_row', NULL),
|
||||||
|
IF(nn.Nat_NormalValueNat_FlagID <> 1, 'flag_not_1', NULL),
|
||||||
|
IF(nn.Nat_NormalValueNat_TestID <> vNatTestID, 'nat_test_mismatch', NULL),
|
||||||
|
IF(vSelectedMethodID IS NOT NULL AND nn.Nat_NormalValueNat_MethodeID <> vSelectedMethodID, 'methode_mismatch', NULL),
|
||||||
|
IF(nn.Nat_NormalValueNat_NormalValueTypeID IN (1,3) AND nn.Nat_NormalValueNat_SexID <> vPatientSexID, 'sex_mismatch', NULL),
|
||||||
|
IF(
|
||||||
|
nn.Nat_NormalValueNat_NormalValueTypeID IN (1,2) AND NOT (
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) <= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMinAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMinAge, nn.Nat_NormalValueAgeUnit) < vAgeInDay)
|
||||||
|
),
|
||||||
|
'age_below_min',
|
||||||
|
NULL
|
||||||
|
),
|
||||||
|
IF(
|
||||||
|
nn.Nat_NormalValueNat_NormalValueTypeID IN (1,2) AND NOT (
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'Y' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) >= vAgeInDay)
|
||||||
|
OR
|
||||||
|
(nn.Nat_NormalValueMaxAgeInclusive = 'N' AND fn_normal_get_age(nn.Nat_NormalValueMaxAge, nn.Nat_NormalValueAgeUnit) > vAgeInDay)
|
||||||
|
),
|
||||||
|
'age_above_max',
|
||||||
|
NULL
|
||||||
|
)
|
||||||
|
) AS FailReason
|
||||||
|
FROM nat_normalvalue nn
|
||||||
|
LEFT JOIN nat_methode nm
|
||||||
|
ON nm.Nat_MethodeID = nn.Nat_NormalValueNat_MethodeID
|
||||||
|
WHERE nn.Nat_NormalValueNat_TestID = vNatTestID
|
||||||
|
ORDER BY
|
||||||
|
CASE
|
||||||
|
WHEN vSelectedMethodID IS NOT NULL AND nn.Nat_NormalValueNat_MethodeID = vSelectedMethodID THEN 0
|
||||||
|
ELSE 1
|
||||||
|
END,
|
||||||
|
nn.Nat_NormalValueNat_MethodeID,
|
||||||
|
nn.Nat_NormalValueNat_NormalValueTypeID,
|
||||||
|
nn.Nat_NormalValueID;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
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 ;
|
||||||
19
sql/manual_changes/2026-05-24-fix-qr-printout-hosts-ibl.sql
Normal file
19
sql/manual_changes/2026-05-24-fix-qr-printout-hosts-ibl.sql
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
UPDATE qr_printout
|
||||||
|
SET QR_PrintOutReportURL = REPLACE(
|
||||||
|
QR_PrintOutReportURL,
|
||||||
|
'http://10.9.20.31',
|
||||||
|
'http://localhost'
|
||||||
|
)
|
||||||
|
WHERE QR_PrintOutReportURL LIKE 'http://10.9.20.31%';
|
||||||
|
|
||||||
|
UPDATE qr_printout
|
||||||
|
SET QR_PrintOutVerifyURL = REPLACE(
|
||||||
|
QR_PrintOutVerifyURL,
|
||||||
|
'http://10.9.10.38:8899/xgw/',
|
||||||
|
'http://devcpone.aplikasi.web.id/xgw/'
|
||||||
|
)
|
||||||
|
WHERE QR_PrintOutVerifyURL LIKE 'http://10.9.10.38:8899/xgw/%';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Reference in New Issue
Block a user