Update MCU sync, dummy generator, and kelainan trigger
This commit is contained in:
16
AGENTS.md
Normal file
16
AGENTS.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Agent Safety Rules
|
||||
|
||||
## Destructive Actions
|
||||
- Never run destructive actions directly when the request is ambiguous.
|
||||
- Destructive actions include (not limited to): `DELETE`, `TRUNCATE`, `DROP`, mass `UPDATE`, file deletion, force-reset, and similar irreversible operations.
|
||||
- Before executing destructive actions, the agent must:
|
||||
1. Confirm exact target scope (table/file/column/ID/filter).
|
||||
2. Show a short preview of affected scope when possible.
|
||||
3. Ask for explicit user confirmation.
|
||||
|
||||
## Ambiguous Instructions
|
||||
- If instruction can be interpreted in more than one way, do not execute immediately.
|
||||
- Ask a concise clarification first, then proceed after confirmation.
|
||||
|
||||
## Priority
|
||||
- Safety confirmation is mandatory and overrides speed.
|
||||
@@ -54,6 +54,80 @@ class Resumeindividucponev7 extends MY_Controller
|
||||
Published_McuDasboardLastUpdatedUserID = VALUES(Published_McuDasboardLastUpdatedUserID)";
|
||||
$this->db_onedev->query($sql, array($orderID, $userID, $userID));
|
||||
}
|
||||
|
||||
private function ensure_publish_dashboard_file($orderID, $userID)
|
||||
{
|
||||
$orderID = intval($orderID);
|
||||
$userID = intval($userID);
|
||||
if ($orderID <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure published row exists for this order.
|
||||
$sql = "INSERT INTO published_mcu_dashboard (
|
||||
Published_McuDasboardT_OrderHeaderID,
|
||||
Published_McuDasboardStatus,
|
||||
Published_McuDasboardIsActive,
|
||||
Published_McuDasboardCreated,
|
||||
Published_McuDasboardCreatedUserID,
|
||||
Published_McuDasboardLastUpdated,
|
||||
Published_McuDasboardLastUpdatedUserID
|
||||
)
|
||||
VALUES (?, 'N', 'Y', NOW(), ?, NOW(), ?)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
Published_McuDasboardIsActive = 'Y',
|
||||
Published_McuDasboardLastUpdated = NOW(),
|
||||
Published_McuDasboardLastUpdatedUserID = VALUES(Published_McuDasboardLastUpdatedUserID)";
|
||||
$this->db_onedev->query($sql, array($orderID, $userID, $userID));
|
||||
|
||||
$sql = "SELECT Published_McuDasboardID
|
||||
FROM published_mcu_dashboard
|
||||
WHERE Published_McuDasboardT_OrderHeaderID = ?
|
||||
AND Published_McuDasboardIsActive = 'Y'
|
||||
ORDER BY Published_McuDasboardID DESC
|
||||
LIMIT 1";
|
||||
$qry = $this->db_onedev->query($sql, array($orderID));
|
||||
if (!$qry || $qry->num_rows() === 0) {
|
||||
return;
|
||||
}
|
||||
$publishedID = intval($qry->row()->Published_McuDasboardID);
|
||||
if ($publishedID <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Mark as processing before file generation.
|
||||
$this->db_onedev->query(
|
||||
"UPDATE published_mcu_dashboard
|
||||
SET Published_McuDasboardStatus = 'P',
|
||||
Published_McuDasboardLastUpdated = NOW(),
|
||||
Published_McuDasboardLastUpdatedUserID = ?
|
||||
WHERE Published_McuDasboardID = ?",
|
||||
array($userID, $publishedID)
|
||||
);
|
||||
|
||||
$rtn = $this->mcudashboard->generate_dashboard_files(0, $publishedID);
|
||||
$isOk = false;
|
||||
if (is_array($rtn) && isset($rtn[0]) && $rtn[0] === true && isset($rtn[1]) && is_array($rtn[1])) {
|
||||
foreach ($rtn[1] as $item) {
|
||||
if (isset($item['status']) && strtoupper($item['status']) === 'OK') {
|
||||
$isOk = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->db_onedev->query(
|
||||
"UPDATE published_mcu_dashboard
|
||||
SET Published_McuDasboardStatus = ?,
|
||||
Published_McuDasboardLastUpdated = NOW(),
|
||||
Published_McuDasboardLastUpdatedUserID = ?
|
||||
WHERE Published_McuDasboardID = ?",
|
||||
array($isOk ? 'Y' : 'N', $userID, $publishedID)
|
||||
);
|
||||
|
||||
// Keep cpone_dashboard mirror in sync if SP is available.
|
||||
$this->db_onedev->query("CALL cpone.sp_sync_published_mcu_dashboard_by_orderheaderid(?)", array($orderID));
|
||||
}
|
||||
public function getsetup()
|
||||
{
|
||||
try {
|
||||
@@ -744,20 +818,29 @@ class Resumeindividucponev7 extends MY_Controller
|
||||
}
|
||||
}
|
||||
|
||||
$status = 'NEW';
|
||||
$status = 'NEW';
|
||||
$statusLog = $act;
|
||||
$val = 'N';
|
||||
$dt = '0000-00-00 00:00:00';
|
||||
$verification = 'N';
|
||||
$verificationUserID = 0;
|
||||
$verificationDateTime = null;
|
||||
$statusBefore = 'NEW';
|
||||
if ($act == 'VAL') {
|
||||
$status = 'VAL';
|
||||
$val = 'Y';
|
||||
$dt = date("Y-m-d h:i:s");
|
||||
} else if ($act == 'UNVAL') {
|
||||
$val = 'N';
|
||||
$status = 'NEW';
|
||||
$dt = date("Y-m-d h:i:s");
|
||||
}
|
||||
$dt = date("Y-m-d H:i:s");
|
||||
$verification = 'Y';
|
||||
$verificationUserID = $userid;
|
||||
$verificationDateTime = $dt;
|
||||
} else if ($act == 'UNVAL') {
|
||||
$val = 'N';
|
||||
$status = 'NEW';
|
||||
$dt = date("Y-m-d H:i:s");
|
||||
$verification = 'N';
|
||||
$verificationUserID = 0;
|
||||
$verificationDateTime = null;
|
||||
}
|
||||
$jsonBefore = "";
|
||||
$jsonAfter = "";
|
||||
//insert mcu_resume
|
||||
@@ -782,23 +865,29 @@ class Resumeindividucponev7 extends MY_Controller
|
||||
$sql = "INSERT INTO mcu_resume
|
||||
(Mcu_ResumeT_OrderHeaderID,
|
||||
Mcu_ResumeStatus,
|
||||
Mcu_ResumeValidation,
|
||||
Mcu_ResumeValidationDateTime,
|
||||
Mcu_ResumeValidationUserID,
|
||||
Mcu_ResumeKesimpulan,
|
||||
Mcu_ResumeRekomendasi,
|
||||
Mcu_ResumeSaran,
|
||||
Mcu_ResumeMcu_FitnessCategoryID)
|
||||
VALUES(?,?,?,?,?,?,?,?,?)";
|
||||
$query = $this->db_onedev->query($sql, [
|
||||
$data['orderID'],
|
||||
$status,
|
||||
$val,
|
||||
$dt,
|
||||
$userid,
|
||||
$data['header']['kesimpulan'],
|
||||
$data['header']['rekomendasi'],
|
||||
$data['header']['saran'],
|
||||
Mcu_ResumeValidation,
|
||||
Mcu_ResumeValidationDateTime,
|
||||
Mcu_ResumeValidationUserID,
|
||||
Mcu_ResumeVerification,
|
||||
Mcu_ResumeVerificationDateTime,
|
||||
Mcu_ResumeVerificationUserID,
|
||||
Mcu_ResumeKesimpulan,
|
||||
Mcu_ResumeRekomendasi,
|
||||
Mcu_ResumeSaran,
|
||||
Mcu_ResumeMcu_FitnessCategoryID)
|
||||
VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
|
||||
$query = $this->db_onedev->query($sql, [
|
||||
$data['orderID'],
|
||||
$status,
|
||||
$val,
|
||||
$dt,
|
||||
$userid,
|
||||
$verification,
|
||||
$verificationDateTime,
|
||||
$verificationUserID,
|
||||
$data['header']['kesimpulan'],
|
||||
$data['header']['rekomendasi'],
|
||||
$data['header']['saran'],
|
||||
$data['fitnessCategory'],
|
||||
]);
|
||||
if (!$query) {
|
||||
@@ -853,23 +942,29 @@ class Resumeindividucponev7 extends MY_Controller
|
||||
$detail = $query->result_array();
|
||||
$jsonBefore['detail'] = $detail;
|
||||
$sql = "UPDATE mcu_resume
|
||||
SET Mcu_ResumeStatus = ?,
|
||||
Mcu_ResumeValidation = ?,
|
||||
Mcu_ResumeValidationDateTime = ?,
|
||||
Mcu_ResumeValidationUserID = ?,
|
||||
Mcu_ResumeKesimpulan = ?,
|
||||
Mcu_ResumeRekomendasi = ?,
|
||||
Mcu_ResumeSaran = ?,
|
||||
SET Mcu_ResumeStatus = ?,
|
||||
Mcu_ResumeValidation = ?,
|
||||
Mcu_ResumeValidationDateTime = ?,
|
||||
Mcu_ResumeValidationUserID = ?,
|
||||
Mcu_ResumeVerification = ?,
|
||||
Mcu_ResumeVerificationDateTime = ?,
|
||||
Mcu_ResumeVerificationUserID = ?,
|
||||
Mcu_ResumeKesimpulan = ?,
|
||||
Mcu_ResumeRekomendasi = ?,
|
||||
Mcu_ResumeSaran = ?,
|
||||
Mcu_ResumeMcu_FitnessCategoryID = ?
|
||||
WHERE Mcu_ResumeID = ?";
|
||||
$query = $this->db_onedev->query($sql, [
|
||||
$status,
|
||||
$val,
|
||||
$dt,
|
||||
$userid,
|
||||
$data['header']['kesimpulan'],
|
||||
$data['header']['rekomendasi'],
|
||||
$data['header']['saran'],
|
||||
$status,
|
||||
$val,
|
||||
$dt,
|
||||
$userid,
|
||||
$verification,
|
||||
$verificationDateTime,
|
||||
$verificationUserID,
|
||||
$data['header']['kesimpulan'],
|
||||
$data['header']['rekomendasi'],
|
||||
$data['header']['saran'],
|
||||
$data['fitnessCategory'],
|
||||
$resumeID,
|
||||
]);
|
||||
@@ -1091,9 +1186,12 @@ class Resumeindividucponev7 extends MY_Controller
|
||||
exit;
|
||||
}
|
||||
$this->upsert_published_dashboard_on_new_to_val($data['orderID'], $statusBefore, $status, $userid);
|
||||
if ($status === 'VAL' && $val === 'Y') {
|
||||
$this->ensure_publish_dashboard_file($data['orderID'], $userid);
|
||||
}
|
||||
$this->sync_resume_status_dashboard($resumeID);
|
||||
$this->sys_ok('ok');
|
||||
}
|
||||
}
|
||||
function getlab($id, $isApi)
|
||||
{
|
||||
$prm = $this->sys_input;
|
||||
|
||||
10
claude.md
Normal file
10
claude.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Collaboration Guardrails
|
||||
|
||||
- For any destructive operation, confirm first. Do not assume.
|
||||
- If request is ambiguous, ask clarification before execution.
|
||||
- For database deletes/updates with broad impact, verify exact filter and IDs with the user.
|
||||
- Preferred safe flow:
|
||||
1. Re-state interpreted target.
|
||||
2. Show short impact preview if possible.
|
||||
3. Wait for explicit approval.
|
||||
4. Execute.
|
||||
@@ -790,6 +790,11 @@ BEGIN
|
||||
DECLARE v_lab_number VARCHAR(25);
|
||||
DECLARE v_seq INT;
|
||||
DECLARE v_effective_date DATE;
|
||||
DECLARE v_lab_exists INT DEFAULT 0;
|
||||
DECLARE v_checkin_time TIME;
|
||||
DECLARE v_checkout_time TIME;
|
||||
DECLARE v_total_station INT DEFAULT 0;
|
||||
DECLARE v_done_station INT DEFAULT 0;
|
||||
|
||||
DECLARE cur_target CURSOR FOR
|
||||
SELECT
|
||||
@@ -821,6 +826,11 @@ BEGIN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Gunakan preregister_id, atau mcu_id + date';
|
||||
END IF;
|
||||
|
||||
SELECT IFNULL(MAX(CAST(RIGHT(T_OrderHeaderLabNumber, 4) AS UNSIGNED)), 0) + 1
|
||||
INTO v_seq
|
||||
FROM cpone.t_orderheader
|
||||
WHERE T_OrderHeaderLabNumber LIKE CONCAT('X', DATE_FORMAT(NOW(), '%y%m%d'), '%');
|
||||
|
||||
OPEN cur_target;
|
||||
read_loop: LOOP
|
||||
FETCH cur_target INTO v_preregister_id, v_patient_id, v_gender, v_corporate_id, v_mcu_id, v_orders;
|
||||
@@ -845,75 +855,102 @@ BEGIN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'Tanggal MCU tidak ditemukan di mcu_preregister_date aktif';
|
||||
END IF;
|
||||
SELECT oh.T_OrderHeaderID
|
||||
INTO v_source_order_id
|
||||
FROM cpone.t_orderheader oh
|
||||
JOIN cpone.mcu_preregister_patients p2
|
||||
ON p2.Mcu_PreregisterPatientsT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND p2.Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
WHERE oh.T_OrderHeaderIsActive = 'Y'
|
||||
AND p2.Mcu_PreregisterPatientsGender = v_gender
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.so_resultentry r
|
||||
JOIN cpone.so_resultentrydetail rd
|
||||
ON rd.So_ResultEntryDetailSo_ResultEntryID = r.So_ResultEntryID
|
||||
AND rd.So_ResultEntryDetailIsActive = 'Y'
|
||||
WHERE r.So_ResultEntryT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND r.So_ResultEntryIsActive = 'Y'
|
||||
AND r.So_ResultEntryValidation1 = 'Y'
|
||||
AND r.So_ResultEntryStatus = 'VAL'
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetail odr
|
||||
WHERE odr.T_OrderDetailT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odr.T_OrderDetailIsActive = 'Y'
|
||||
AND IFNULL(TRIM(odr.T_OrderDetailResult), '') <> ''
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetail odf
|
||||
JOIN cpone.so_resultentry rf
|
||||
ON rf.So_ResultEntryT_OrderHeaderID = odf.T_OrderDetailT_OrderHeaderID
|
||||
AND rf.So_ResultEntryT_OrderDetailID = odf.T_OrderDetailID
|
||||
AND rf.So_ResultEntryIsActive = 'Y'
|
||||
AND rf.So_ResultEntryValidation1 = 'Y'
|
||||
AND rf.So_ResultEntryStatus = 'VAL'
|
||||
JOIN cpone.so_resultentry_fisik_umum rfu
|
||||
ON rfu.So_ResultEntryFisikUmumSo_ResultEntryID = rf.So_ResultEntryID
|
||||
AND rfu.So_ResultEntryFisikUmumIsActive = 'Y'
|
||||
WHERE odf.T_OrderDetailT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odf.T_OrderDetailIsActive = 'Y'
|
||||
AND odf.T_OrderDetailT_TestID = 2562
|
||||
)
|
||||
AND (
|
||||
(v_orders LIKE '%PN%' AND EXISTS (
|
||||
SELECT IFNULL((
|
||||
SELECT oh.T_OrderHeaderID
|
||||
FROM cpone.t_orderheader oh
|
||||
JOIN cpone.mcu_preregister_patients p2
|
||||
ON p2.Mcu_PreregisterPatientsT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND p2.Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
WHERE oh.T_OrderHeaderIsActive = 'Y'
|
||||
AND p2.Mcu_PreregisterPatientsGender = v_gender
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetailorder odo
|
||||
WHERE odo.T_OrderDetailOrderT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odo.T_OrderDetailOrderIsPacket = 'Y'
|
||||
AND odo.T_OrderDetailOrderIsActive = 'Y'
|
||||
))
|
||||
OR v_orders NOT LIKE '%PN%'
|
||||
)
|
||||
ORDER BY oh.T_OrderHeaderDate DESC
|
||||
LIMIT 1;
|
||||
FROM cpone.so_resultentry r
|
||||
JOIN cpone.so_resultentrydetail rd
|
||||
ON rd.So_ResultEntryDetailSo_ResultEntryID = r.So_ResultEntryID
|
||||
AND rd.So_ResultEntryDetailIsActive = 'Y'
|
||||
WHERE r.So_ResultEntryT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND r.So_ResultEntryIsActive = 'Y'
|
||||
AND r.So_ResultEntryValidation1 = 'Y'
|
||||
AND r.So_ResultEntryStatus = 'VAL'
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetail odr
|
||||
WHERE odr.T_OrderDetailT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odr.T_OrderDetailIsActive = 'Y'
|
||||
AND IFNULL(TRIM(odr.T_OrderDetailResult), '') <> ''
|
||||
)
|
||||
AND (
|
||||
(v_orders LIKE '%PN%' AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetailorder odo
|
||||
WHERE odo.T_OrderDetailOrderT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odo.T_OrderDetailOrderIsPacket = 'Y'
|
||||
AND odo.T_OrderDetailOrderIsActive = 'Y'
|
||||
))
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetail odx
|
||||
WHERE odx.T_OrderDetailT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odx.T_OrderDetailIsActive = 'Y'
|
||||
AND FIND_IN_SET(TRIM(odx.T_OrderDetailT_TestCode), REPLACE(v_orders, ' ', '')) > 0
|
||||
)
|
||||
OR IFNULL(TRIM(v_orders), '') = ''
|
||||
)
|
||||
ORDER BY oh.T_OrderHeaderDate DESC
|
||||
LIMIT 1
|
||||
), 0)
|
||||
INTO v_source_order_id;
|
||||
|
||||
IF IFNULL(v_source_order_id, 0) = 0 THEN
|
||||
SELECT IFNULL((
|
||||
SELECT oh.T_OrderHeaderID
|
||||
FROM cpone.t_orderheader oh
|
||||
JOIN cpone.mcu_preregister_patients p2
|
||||
ON p2.Mcu_PreregisterPatientsT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND p2.Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
WHERE oh.T_OrderHeaderIsActive = 'Y'
|
||||
AND p2.Mcu_PreregisterPatientsGender = v_gender
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone.t_orderdetail odr
|
||||
WHERE odr.T_OrderDetailT_OrderHeaderID = oh.T_OrderHeaderID
|
||||
AND odr.T_OrderDetailIsActive = 'Y'
|
||||
AND IFNULL(TRIM(odr.T_OrderDetailResult), '') <> ''
|
||||
)
|
||||
ORDER BY oh.T_OrderHeaderDate DESC
|
||||
LIMIT 1
|
||||
), 0)
|
||||
INTO v_source_order_id;
|
||||
END IF;
|
||||
|
||||
IF IFNULL(v_source_order_id, 0) = 0 THEN
|
||||
ITERATE read_loop;
|
||||
END IF;
|
||||
|
||||
SELECT IFNULL(MAX(CAST(RIGHT(T_OrderHeaderLabNumber, 4) AS UNSIGNED)), 0) + 1
|
||||
INTO v_seq
|
||||
FROM cpone.t_orderheader
|
||||
WHERE T_OrderHeaderLabNumber LIKE CONCAT('X', DATE_FORMAT(NOW(), '%y%m%d'), '%');
|
||||
|
||||
SET v_lab_number = CONCAT(
|
||||
'X',
|
||||
DATE_FORMAT(NOW(), '%y%m%d'),
|
||||
LPAD(v_seq, 4, '0')
|
||||
);
|
||||
SELECT COUNT(1)
|
||||
INTO v_lab_exists
|
||||
FROM cpone.t_orderheader
|
||||
WHERE T_OrderHeaderLabNumber = v_lab_number;
|
||||
WHILE v_lab_exists > 0 DO
|
||||
SET v_seq = v_seq + 1;
|
||||
SET v_lab_number = CONCAT(
|
||||
'X',
|
||||
DATE_FORMAT(NOW(), '%y%m%d'),
|
||||
LPAD(v_seq, 4, '0')
|
||||
);
|
||||
SELECT COUNT(1)
|
||||
INTO v_lab_exists
|
||||
FROM cpone.t_orderheader
|
||||
WHERE T_OrderHeaderLabNumber = v_lab_number;
|
||||
END WHILE;
|
||||
SET v_seq = v_seq + 1;
|
||||
|
||||
INSERT INTO cpone.t_orderheader (
|
||||
T_OrderHeaderM_BranchID,
|
||||
@@ -994,7 +1031,7 @@ BEGIN
|
||||
v_mcu_id,
|
||||
os.T_OrderSampleT_SampleStationID,
|
||||
ss.T_SampleStationName,
|
||||
'LAB',
|
||||
'lab',
|
||||
os.T_OrderSampleSamplingDate,
|
||||
CONCAT(os.T_OrderSampleSamplingDate, ' ', IFNULL(os.T_OrderSampleSamplingTime, '00:00:00')),
|
||||
CONCAT(os.T_OrderSampleReceiveDate, ' ', IFNULL(os.T_OrderSampleReceiveTime, '00:00:00')),
|
||||
@@ -1020,6 +1057,83 @@ BEGIN
|
||||
Mcu_StationProgressProcessAt = VALUES(Mcu_StationProgressProcessAt),
|
||||
Mcu_StationProgressDoneAt = VALUES(Mcu_StationProgressDoneAt),
|
||||
Mcu_StationProgressSyncedAt = VALUES(Mcu_StationProgressSyncedAt);
|
||||
|
||||
SELECT TIME(oh.T_OrderHeaderDate)
|
||||
INTO v_checkin_time
|
||||
FROM cpone.t_orderheader oh
|
||||
WHERE oh.T_OrderHeaderID = v_new_order_id
|
||||
LIMIT 1;
|
||||
|
||||
IF v_checkin_time IS NULL THEN
|
||||
SET v_checkin_time = '07:30:00';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO v_total_station
|
||||
FROM cpone.t_ordersample os
|
||||
WHERE os.T_OrderSampleT_OrderHeaderID = v_new_order_id
|
||||
AND os.T_OrderSampleIsActive = 'Y';
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO v_done_station
|
||||
FROM cpone.t_ordersample os
|
||||
JOIN cpone.t_samplingso sso
|
||||
ON sso.T_SamplingSoT_OrderHeaderID = os.T_OrderSampleT_OrderHeaderID
|
||||
AND sso.T_SamplingSoT_SampleStationID = os.T_OrderSampleT_SampleStationID
|
||||
AND sso.T_SamplingSoIsActive = 'Y'
|
||||
WHERE os.T_OrderSampleT_OrderHeaderID = v_new_order_id
|
||||
AND os.T_OrderSampleIsActive = 'Y'
|
||||
AND sso.T_SamplingSoDoneDate IS NOT NULL
|
||||
AND sso.T_SamplingSoDoneDate <> '0000-00-00'
|
||||
AND IFNULL(sso.T_SamplingSoDoneTime, '') <> '';
|
||||
|
||||
IF v_total_station > 0 AND v_done_station = v_total_station THEN
|
||||
SELECT MAX(sso.T_SamplingSoDoneTime)
|
||||
INTO v_checkout_time
|
||||
FROM cpone.t_samplingso sso
|
||||
WHERE sso.T_SamplingSoT_OrderHeaderID = v_new_order_id
|
||||
AND sso.T_SamplingSoIsActive = 'Y'
|
||||
AND sso.T_SamplingSoDoneDate IS NOT NULL
|
||||
AND sso.T_SamplingSoDoneDate <> '0000-00-00'
|
||||
AND IFNULL(sso.T_SamplingSoDoneTime, '') <> '';
|
||||
ELSE
|
||||
SET v_checkout_time = NULL;
|
||||
END IF;
|
||||
|
||||
INSERT INTO cpone_dashboard.mcu_checkinout (
|
||||
Mcu_CheckinoutMcuID,
|
||||
Mcu_CheckinoutPreregisterID,
|
||||
Mcu_CheckinoutOrderID,
|
||||
Mcu_CheckinoutDate,
|
||||
Mcu_CheckinoutInTime,
|
||||
Mcu_CheckinoutOutTime,
|
||||
Mcu_CheckinoutOutUserID,
|
||||
Mcu_CheckinoutIsActive,
|
||||
Mcu_CheckinoutSyncedAt
|
||||
)
|
||||
VALUES (
|
||||
v_mcu_id,
|
||||
v_preregister_id,
|
||||
v_new_order_id,
|
||||
v_effective_date,
|
||||
v_checkin_time,
|
||||
v_checkout_time,
|
||||
CASE WHEN v_checkout_time IS NULL THEN 0 ELSE p_user_id END,
|
||||
'Y',
|
||||
NOW()
|
||||
)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
Mcu_CheckinoutMcuID = VALUES(Mcu_CheckinoutMcuID),
|
||||
Mcu_CheckinoutOrderID = VALUES(Mcu_CheckinoutOrderID),
|
||||
Mcu_CheckinoutOutTime = CASE
|
||||
WHEN VALUES(Mcu_CheckinoutOutTime) IS NULL THEN Mcu_CheckinoutOutTime
|
||||
ELSE VALUES(Mcu_CheckinoutOutTime)
|
||||
END,
|
||||
Mcu_CheckinoutOutUserID = CASE
|
||||
WHEN VALUES(Mcu_CheckinoutOutTime) IS NULL THEN Mcu_CheckinoutOutUserID
|
||||
ELSE VALUES(Mcu_CheckinoutOutUserID)
|
||||
END,
|
||||
Mcu_CheckinoutSyncedAt = NOW();
|
||||
END LOOP;
|
||||
CLOSE cur_target;
|
||||
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
-- Auto-maintain cpone_corporate.kelainan_summary from cpone_corporate.kelainan_details
|
||||
|
||||
-- 1) deduplicate existing rows before adding unique key
|
||||
DELETE ks1
|
||||
FROM cpone_corporate.kelainan_summary ks1
|
||||
JOIN cpone_corporate.kelainan_summary ks2
|
||||
ON ks1.Mcu_KelainanMgm_McuID = ks2.Mcu_KelainanMgm_McuID
|
||||
AND ks1.Mcu_KelainanID = ks2.Mcu_KelainanID
|
||||
AND ks1.created_at > ks2.created_at;
|
||||
|
||||
DELETE dks1
|
||||
FROM cpone_dashboard.kelainan_summary dks1
|
||||
JOIN cpone_dashboard.kelainan_summary dks2
|
||||
ON dks1.Mgm_McuID = dks2.Mgm_McuID
|
||||
AND dks1.Mcu_KelainanID = dks2.Mcu_KelainanID
|
||||
AND dks1.created_at > dks2.created_at;
|
||||
|
||||
DROP TRIGGER IF EXISTS cpone_corporate.trg_kelainan_details_ai_sync_summary;
|
||||
DROP TRIGGER IF EXISTS cpone_corporate.trg_kelainan_details_au_sync_summary;
|
||||
DROP TRIGGER IF EXISTS cpone_corporate.trg_kelainan_details_ad_sync_summary;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE TRIGGER cpone_corporate.trg_kelainan_details_ai_sync_summary
|
||||
AFTER INSERT ON cpone_corporate.kelainan_details
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE v_mgm_mcuid INT;
|
||||
|
||||
SELECT oh.T_OrderHeaderMgm_McuID
|
||||
INTO v_mgm_mcuid
|
||||
FROM cpone.t_orderheader oh
|
||||
WHERE oh.T_OrderHeaderID = NEW.T_OrderHeaderID
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
LIMIT 1;
|
||||
|
||||
IF v_mgm_mcuid IS NOT NULL
|
||||
AND NEW.Mcu_KelainanID IS NOT NULL
|
||||
AND NEW.Mcu_KelainanName IS NOT NULL
|
||||
AND NEW.Mcu_KelainanName <> '' THEN
|
||||
INSERT INTO cpone_corporate.kelainan_summary (
|
||||
Mcu_KelainanID,
|
||||
Mcu_KelainanMgm_McuID,
|
||||
Mcu_KelainanName,
|
||||
created_at
|
||||
)
|
||||
SELECT NEW.Mcu_KelainanID, v_mgm_mcuid, NEW.Mcu_KelainanName, NOW()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_corporate.kelainan_summary ks
|
||||
WHERE ks.Mcu_KelainanMgm_McuID = v_mgm_mcuid
|
||||
AND ks.Mcu_KelainanID = NEW.Mcu_KelainanID
|
||||
);
|
||||
|
||||
UPDATE cpone_corporate.kelainan_summary
|
||||
SET Mcu_KelainanName = NEW.Mcu_KelainanName
|
||||
WHERE Mcu_KelainanMgm_McuID = v_mgm_mcuid
|
||||
AND Mcu_KelainanID = NEW.Mcu_KelainanID;
|
||||
|
||||
INSERT INTO cpone_dashboard.kelainan_summary (
|
||||
Mcu_KelainanID,
|
||||
Mcu_KelainanMgm_McuID,
|
||||
Mcu_KelainanName,
|
||||
created_at,
|
||||
Mgm_McuID
|
||||
)
|
||||
SELECT NEW.Mcu_KelainanID, v_mgm_mcuid, NEW.Mcu_KelainanName, NOW(), v_mgm_mcuid
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_dashboard.kelainan_summary dks
|
||||
WHERE dks.Mgm_McuID = v_mgm_mcuid
|
||||
AND dks.Mcu_KelainanID = NEW.Mcu_KelainanID
|
||||
);
|
||||
|
||||
UPDATE cpone_dashboard.kelainan_summary
|
||||
SET Mcu_KelainanName = NEW.Mcu_KelainanName,
|
||||
Mcu_KelainanMgm_McuID = v_mgm_mcuid
|
||||
WHERE Mgm_McuID = v_mgm_mcuid
|
||||
AND Mcu_KelainanID = NEW.Mcu_KelainanID;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CREATE TRIGGER cpone_corporate.trg_kelainan_details_au_sync_summary
|
||||
AFTER UPDATE ON cpone_corporate.kelainan_details
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE v_mgm_old INT;
|
||||
DECLARE v_mgm_new INT;
|
||||
|
||||
SELECT oh.T_OrderHeaderMgm_McuID
|
||||
INTO v_mgm_old
|
||||
FROM cpone.t_orderheader oh
|
||||
WHERE oh.T_OrderHeaderID = OLD.T_OrderHeaderID
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
LIMIT 1;
|
||||
|
||||
SELECT oh.T_OrderHeaderMgm_McuID
|
||||
INTO v_mgm_new
|
||||
FROM cpone.t_orderheader oh
|
||||
WHERE oh.T_OrderHeaderID = NEW.T_OrderHeaderID
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
LIMIT 1;
|
||||
|
||||
IF v_mgm_old IS NOT NULL AND OLD.Mcu_KelainanID IS NOT NULL THEN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_corporate.kelainan_details kd
|
||||
JOIN cpone.t_orderheader oh ON oh.T_OrderHeaderID = kd.T_OrderHeaderID
|
||||
WHERE oh.T_OrderHeaderMgm_McuID = v_mgm_old
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
AND kd.Mcu_KelainanID = OLD.Mcu_KelainanID
|
||||
) THEN
|
||||
DELETE FROM cpone_corporate.kelainan_summary
|
||||
WHERE Mcu_KelainanMgm_McuID = v_mgm_old
|
||||
AND Mcu_KelainanID = OLD.Mcu_KelainanID;
|
||||
DELETE FROM cpone_dashboard.kelainan_summary
|
||||
WHERE Mgm_McuID = v_mgm_old
|
||||
AND Mcu_KelainanID = OLD.Mcu_KelainanID;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
IF v_mgm_new IS NOT NULL
|
||||
AND NEW.Mcu_KelainanID IS NOT NULL
|
||||
AND NEW.Mcu_KelainanName IS NOT NULL
|
||||
AND NEW.Mcu_KelainanName <> '' THEN
|
||||
INSERT INTO cpone_corporate.kelainan_summary (
|
||||
Mcu_KelainanID,
|
||||
Mcu_KelainanMgm_McuID,
|
||||
Mcu_KelainanName,
|
||||
created_at
|
||||
)
|
||||
SELECT NEW.Mcu_KelainanID, v_mgm_new, NEW.Mcu_KelainanName, NOW()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_corporate.kelainan_summary ks
|
||||
WHERE ks.Mcu_KelainanMgm_McuID = v_mgm_new
|
||||
AND ks.Mcu_KelainanID = NEW.Mcu_KelainanID
|
||||
);
|
||||
|
||||
UPDATE cpone_corporate.kelainan_summary
|
||||
SET Mcu_KelainanName = NEW.Mcu_KelainanName
|
||||
WHERE Mcu_KelainanMgm_McuID = v_mgm_new
|
||||
AND Mcu_KelainanID = NEW.Mcu_KelainanID;
|
||||
|
||||
INSERT INTO cpone_dashboard.kelainan_summary (
|
||||
Mcu_KelainanID,
|
||||
Mcu_KelainanMgm_McuID,
|
||||
Mcu_KelainanName,
|
||||
created_at,
|
||||
Mgm_McuID
|
||||
)
|
||||
SELECT NEW.Mcu_KelainanID, v_mgm_new, NEW.Mcu_KelainanName, NOW(), v_mgm_new
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_dashboard.kelainan_summary dks
|
||||
WHERE dks.Mgm_McuID = v_mgm_new
|
||||
AND dks.Mcu_KelainanID = NEW.Mcu_KelainanID
|
||||
);
|
||||
|
||||
UPDATE cpone_dashboard.kelainan_summary
|
||||
SET Mcu_KelainanName = NEW.Mcu_KelainanName,
|
||||
Mcu_KelainanMgm_McuID = v_mgm_new
|
||||
WHERE Mgm_McuID = v_mgm_new
|
||||
AND Mcu_KelainanID = NEW.Mcu_KelainanID;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
CREATE TRIGGER cpone_corporate.trg_kelainan_details_ad_sync_summary
|
||||
AFTER DELETE ON cpone_corporate.kelainan_details
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE v_mgm_mcuid INT;
|
||||
|
||||
SELECT oh.T_OrderHeaderMgm_McuID
|
||||
INTO v_mgm_mcuid
|
||||
FROM cpone.t_orderheader oh
|
||||
WHERE oh.T_OrderHeaderID = OLD.T_OrderHeaderID
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
LIMIT 1;
|
||||
|
||||
IF v_mgm_mcuid IS NOT NULL AND OLD.Mcu_KelainanID IS NOT NULL THEN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM cpone_corporate.kelainan_details kd
|
||||
JOIN cpone.t_orderheader oh ON oh.T_OrderHeaderID = kd.T_OrderHeaderID
|
||||
WHERE oh.T_OrderHeaderMgm_McuID = v_mgm_mcuid
|
||||
AND oh.T_OrderHeaderIsActive = 'Y'
|
||||
AND kd.Mcu_KelainanID = OLD.Mcu_KelainanID
|
||||
) THEN
|
||||
DELETE FROM cpone_corporate.kelainan_summary
|
||||
WHERE Mcu_KelainanMgm_McuID = v_mgm_mcuid
|
||||
AND Mcu_KelainanID = OLD.Mcu_KelainanID;
|
||||
DELETE FROM cpone_dashboard.kelainan_summary
|
||||
WHERE Mgm_McuID = v_mgm_mcuid
|
||||
AND Mcu_KelainanID = OLD.Mcu_KelainanID;
|
||||
END IF;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
35
scripts/tmp_rerun_kelainan_1583.sh
Executable file
35
scripts/tmp_rerun_kelainan_1583.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJNX1VzZXJJRCI6IjIiLCJNX1VzZXJFbWFpbCI6Impva29AZ21haWwuY29tIiwiTV9Vc2VyVXNlcm5hbWUiOiJqb2tvQGdtYWlsLmNvbSIsIk1fVXNlckdyb3VwRGFzaGJvYXJkIjoib25lLXVpXC90ZXN0XC92dWV4XC9vbmUtbWQtdXNlcmdyb3VwLXVzZXItdjVcLyIsIk1fVXNlckRlZmF1bHRUX1NhbXBsZVN0YXRpb25JRCI6IjEiLCJNX1N0YWZmTmFtZSI6IkFkbWluIENQT05FIiwiaXNfY291cmllciI6Ik4iLCJNX0JyYW5jaElEIjoiMTAiLCJNX0JyYW5jaE5hbWUiOiJMYWJvcmF0b3JpdW0gTWFrYXNzYXIiLCJ0aW1lX2F1dG9sb2dvdXQiOiIxNSIsImlwIjoiMTI4LjE5OS44Ni43IiwiYWdlbnQiOiJHby1odHRwLWNsaWVudFwvMS4xIiwidmVyc2lvbiI6InYyIiwibGFzdC1sb2dpbiI6IjIwMjYtMDUtMDYgMTY6MDA6MzYifQ.YoDFYB-uayRtGSqGeapbo9EbvtHx_RcvNLlXDNwVk4s"
|
||||
COOKIE="cpone_session=ZmFqcmk.4VydTLnAE5nMiudJXBPrlz1MqzQbA38R6JGiawYu5zI; cpone_project_mcu_id=1583; token=${TOKEN}"
|
||||
ORDER_IDS=$(ssh -o BatchMode=yes one@devcpone.aplikasi.web.id "mysql -N -D cpone -e \"SELECT DISTINCT pp.Mcu_PreregisterPatientsT_OrderHeaderID FROM mcu_preregister_patients pp JOIN mcu_preregister_date pd ON pd.Mcu_PreregisterDateMcu_PreregisterPatientsID=pp.Mcu_PreregisterPatientsID AND pd.Mcu_PreregisterDateIsActive='Y' JOIN t_orderheader oh ON oh.T_OrderHeaderID=pp.Mcu_PreregisterPatientsT_OrderHeaderID AND oh.T_OrderHeaderIsActive='Y' WHERE pp.Mcu_PreregisterPatientsMgm_McuID=1583 AND pd.Mcu_PreregisterDateCheckinSchedule='2026-05-05' AND pp.Mcu_PreregisterPatientsIsActive='Y' ORDER BY pp.Mcu_PreregisterPatientsT_OrderHeaderID;\"")
|
||||
|
||||
ok=0
|
||||
val_fail=0
|
||||
gen_fail=0
|
||||
sync_fail=0
|
||||
total=0
|
||||
|
||||
for OID in $ORDER_IDS; do
|
||||
total=$((total+1))
|
||||
RESP=$(curl -sS "https://devcpone.aplikasi.web.id/one-api/mockup/mcuoffline/Resumeindividucponev7/generateFitnessCategory" \
|
||||
-H "Accept: application/json, text/plain, */*" \
|
||||
-H "Content-Type: application/json;charset=UTF-8" \
|
||||
-H "Cookie: ${COOKIE}" \
|
||||
--data-raw "{\"token\":\"${TOKEN}\",\"orderid\":\"${OID}\",\"kesimpulan\":\"\",\"rekomendasi\":\"\",\"saran\":\"\",\"conclusion\":\"\",\"recomendation\":\"\",\"advice\":\"\"}")
|
||||
|
||||
if echo "$RESP" | grep -q '"status":"OK"'; then
|
||||
if ssh -o BatchMode=yes one@devcpone.aplikasi.web.id "mysql -N -D cpone -e \"CALL cpone.sp_sync_kelainan_details_by_orderheader(${OID});\"" >/dev/null 2>&1; then
|
||||
ok=$((ok+1))
|
||||
else
|
||||
sync_fail=$((sync_fail+1))
|
||||
fi
|
||||
elif echo "$RESP" | grep -q 'belum di validasi'; then
|
||||
val_fail=$((val_fail+1))
|
||||
else
|
||||
gen_fail=$((gen_fail+1))
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo "RESULT total=${total} ok=${ok} val_fail=${val_fail} gen_fail=${gen_fail} sync_fail=${sync_fail}"
|
||||
Reference in New Issue
Block a user