14 Commits

Author SHA1 Message Date
sas.fajri
d544736fda IUNHI0 - fix duplicate listing preregister dengan subquery MAX FormRiwayatPasienID di v5 dan v8 2026-06-30 14:17:23 +07:00
f1fdd09517 Merge pull request '3Z4LPN - ganti flag stemcell ke table baru' (#6) from staging into master
Reviewed-on: #6
2026-06-30 10:47:26 +07:00
sas.fajri
35997c1719 3Z4LPN - ganti flag stemcell ke table baru 2026-06-30 10:42:23 +07:00
sas.fajri
d1af165999 3Z4LPN - ganti flag stemcell ke table baru
- Tambah validasi nat_groupid = 7 di save() walk_in_registration_stemcell/Order.php sebelum transaksi dimulai
- Tambah insert ke t_orderstemcell saat order dari cabang stemcell berhasil disimpan
- Ganti referensi M_BranchIsSteemCell di Transactionv4 dan Transactionv5 ke EXISTS/NOT EXISTS pada t_orderstemcell
- Tambah SQL DDL tabel t_orderstemcell di sql/t_orderstemcell.sql
2026-06-30 10:42:13 +07:00
a6fa405dd4 Merge pull request 'FHM290626SAS01 - tambah aturan wajib cek semua commit sebelum buat PR' (#5) from staging into master
Reviewed-on: #5
2026-06-29 11:01:36 +07:00
sas.fajri
2d20465b66 FHM290626SAS01 - tambah aturan wajib cek semua commit sebelum buat PR 2026-06-29 10:53:46 +07:00
2fdac0a347 Merge pull request 'FHM290626SAS01 - prompt pembuatan PR' (#4) from staging into master
Reviewed-on: #4
2026-06-29 10:46:52 +07:00
sas.fajri
589f3f050b FHM290626SAS01 - prompt pembuatan PR 2026-06-29 10:39:17 +07:00
77168695ff Merge pull request 'FHM290626CPONE01 - fix filter T_TestIsPrice di Transactionv2 + debug AIS Masterdata' (#3) from staging into master
Reviewed-on: #3
2026-06-29 10:31:45 +07:00
sas.fajri
0e8eba2f69 FHM290626CPONE01 - fix filter T_TestIsPrice di Transactionv2 2026-06-29 10:23:57 +07:00
sas.fajri
e75ed02c26 FHM290626CPONE01 - tambah debug AIS payload di Masterdata 2026-06-29 10:18:18 +07:00
d66625a06d Merge pull request 'FHM290626CPONE01 - fix filter T_TestIsPrice pada post_transaction' (#2) from staging into master
Reviewed-on: #2
2026-06-29 10:09:46 +07:00
sas.fajri
b31b4747ec FHM290626CPONE01 - merge fix filter T_TestIsPrice ke staging 2026-06-29 10:01:15 +07:00
0fd6b2ffc8 Merge pull request 'Staging → Master: Stemcell & CPone Dashboard Live (2026-06-25)' (#1) from staging into master
Reviewed-on: #1
2026-06-25 15:57:47 +07:00
11 changed files with 935 additions and 89 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ vendor/
.cursor/
.DS_Store
composer.phar
.env

View File

@@ -15,6 +15,43 @@
## Priority
- Safety confirmation is mandatory and overrides speed.
## Pull Request — Wajib Sebelum Membuat PR
Sebelum membuat PR, **selalu jalankan dua perintah ini terlebih dahulu:**
```bash
git log origin/master..origin/staging --oneline # lihat semua commit yang belum masuk master
git diff origin/master...origin/staging --stat # lihat semua file yang berubah
```
Deskripsi PR harus mencakup **semua commit** yang ada di staging tapi belum di master — bukan hanya commit terakhir. Jangan sampai ada commit/file yang terlewat.
## Pull Request Format
Setiap PR wajib menggunakan struktur berikut:
**Title:** `TASKCODE - deskripsi singkat`
**Body:**
```
## Latar Belakang Masalah
[Root cause atau kebutuhan yang melatarbelakangi perubahan]
## Perubahan
- [Bullet point perubahan spesifik per fungsi/fitur]
## File yang Diubah
| File | Fungsi/Bagian | Keterangan |
|---|---|---|
| `path/to/file.php` | `nama_fungsi()` | deskripsi singkat |
## Test yang Harus Dilakukan QA
- [ ] Skenario normal: ...
- [ ] Skenario edge case: ...
- [ ] Skenario negatif: ...
- [ ] Regression: pastikan fitur terkait tidak rusak
```
## Commit Message Format
- Sebelum membuat commit, **selalu tanya kode task** kepada user.
- Format commit message wajib: `TASKCODE - deskripsi singkat`

87
PR_PROMPT.md Normal file
View File

@@ -0,0 +1,87 @@
# Prompt Standar Pembuatan Pull Request
Gunakan prompt berikut saat meminta AI untuk membuat PR. Isi bagian dalam kurung `[ ]` sesuai konteks.
---
## Prompt
```
Buatkan PR dari branch [HEAD_BRANCH] ke [BASE_BRANCH] dengan detail berikut:
**Kode Task:** [TASKCODE]
**Latar Belakang Masalah:**
[Jelaskan root cause masalah atau kebutuhan bisnis.
Contoh: "Fungsi post_transaction_daily tidak memfilter T_TestIsPrice sehingga
pemeriksaan non-price ikut terkirim ke AIS dan menyebabkan transaksi ditolak."]
**Perubahan yang Dilakukan:**
- [Perubahan 1, spesifik per fungsi/komponen]
- [Perubahan 2]
- [dst...]
**File yang Terkait:**
- `path/to/file1` — [deskripsi singkat perubahan]
- `path/to/file2` — [deskripsi singkat perubahan]
**Skenario Test untuk QA:**
- Normal: [flow utama yang harus berjalan]
- Edge case: [kondisi batas yang harus ditangani]
- Negatif: [kondisi yang harus ditolak/error]
- Regression: [fitur lain yang harus dipastikan tidak rusak]
```
---
## Contoh Hasil PR yang Diharapkan
### Title
`FHM290626CPONE01 - fix filter T_TestIsPrice pada post_transaction`
### Body
```markdown
## Latar Belakang Masalah
Fungsi `post_layanan_all` di `Masterdata.php` hanya mendaftarkan layanan dengan
`T_TestIsPrice = 'Y'` ke master layanan AIS. Namun fungsi `post_transaction_*`
tidak memfilter hal yang sama — semua pemeriksaan dengan `T_TestIsActive = 'Y'`
ikut terkirim sebagai transaksi, termasuk yang `T_TestIsPrice = 'N'`.
Akibatnya AIS menolak transaksi karena `LayananID` tidak terdaftar di master layanan.
## Perubahan
- Menambahkan kondisi `AND T_TestIsPrice = 'Y'` pada semua JOIN ke tabel `t_test`
di fungsi `post_transaction_daily_by_date`, `post_transaction_daily`,
dan `post_transaction_by_labnumber`.
## File yang Diubah
| File | Fungsi/Bagian | Keterangan |
|---|---|---|
| `application/controllers/ais/Transactionv2.php` | `post_transaction_*` | 21 titik JOIN diupdate |
| `application/controllers/ais/Transactionv3.php` | `post_transaction_*` | 21 titik JOIN diupdate |
| `application/controllers/ais/Transactionv4.php` | `post_transaction_*` | 21 titik JOIN diupdate |
| `application/controllers/ais/Transactionv5.php` | `post_transaction_*` | 21 titik JOIN diupdate |
## Test yang Harus Dilakukan QA
- [ ] **Normal:** Kirim transaksi dengan pemeriksaan yang `T_TestIsPrice = 'Y'`
harus berhasil masuk ke AIS tanpa error.
- [ ] **Edge case:** Order yang mengandung campuran pemeriksaan `IsPrice = 'Y'`
dan `IsPrice = 'N'` — hanya yang `'Y'` yang terkirim ke AIS.
- [ ] **Negatif:** Kirim transaksi yang seluruh pemeriksaannya `T_TestIsPrice = 'N'`
— tidak boleh ada layanan yang terkirim ke AIS.
- [ ] **Regression:** Pastikan total tagihan, RegpasNominal, dan TrxBayar
tetap terhitung dengan benar setelah filter diterapkan.
```
---
## Catatan
- Selalu gunakan kode task dari user sebelum membuat PR.
- Token Gitea tersimpan di `.env` dengan key `GITEA_TOKEN`.
- Base URL Gitea: `https://devone.aplikasi.web.id/gitea`
- Repo: `fajri/BE_CPONE` (BE) atau sesuai repo aktif.

File diff suppressed because it is too large Load Diff

View File

@@ -608,7 +608,7 @@ class Transactionv2 extends MY_Controller
'' as TrxLayananDetail,
'Y' as Tagihkan
FROM t_orderdetail
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y'
@@ -660,7 +660,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
@@ -680,7 +680,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
@@ -697,7 +697,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID NOT IN (1,3)
@@ -1147,7 +1147,7 @@ class Transactionv2 extends MY_Controller
'' as TrxLayananDetail,
'Y' as Tagihkan
FROM t_orderdetail
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y'
@@ -1199,7 +1199,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
@@ -1219,7 +1219,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
@@ -1236,7 +1236,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID NOT IN (1,3)
@@ -1943,7 +1943,7 @@ class Transactionv2 extends MY_Controller
'' as TrxLayananDetail,
'Y' as Tagihkan
FROM t_orderdetail
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y'
@@ -1995,7 +1995,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
@@ -2015,7 +2015,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
@@ -2032,7 +2032,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID NOT IN (1,3)
@@ -2442,7 +2442,7 @@ class Transactionv2 extends MY_Controller
'' as TrxLayananDetail,
'Y' as Tagihkan
FROM t_orderdetail
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y'
@@ -2494,7 +2494,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
@@ -2514,7 +2514,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
@@ -2531,7 +2531,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID NOT IN (1,3)
@@ -2887,7 +2887,7 @@ class Transactionv2 extends MY_Controller
'' as TrxLayananDetail,
'Y' as Tagihkan
FROM t_orderdetail
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND
@@ -2943,7 +2943,7 @@ class Transactionv2 extends MY_Controller
FROM `t_orderdetailorder`
JOIN t_orderdetail ON T_OrderdetailT_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID AND
T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y'
JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID
@@ -2991,7 +2991,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
@@ -3011,7 +3011,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
@@ -3028,7 +3028,7 @@ class Transactionv2 extends MY_Controller
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' AND T_TestIsPrice = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID NOT IN (1,3)

View File

@@ -490,7 +490,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -547,7 +547,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1055,7 +1055,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1111,7 +1111,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1863,7 +1863,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1919,7 +1919,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2388,7 +2388,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2443,7 +2443,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2888,7 +2888,7 @@ class Transactionv4 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'N'
AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -3801,7 +3801,7 @@ class Transactionv4 extends MY_Controller
b.M_BranchCode AS branch_code,
b.M_BranchName AS branch_name,
b.M_BranchCodeLab AS branch_code_lab,
b.M_BranchIsSteemCell AS is_stemcell,
IF(os.T_OrderStemcellID IS NOT NULL, 'Y', 'N') AS is_stemcell,
oh.T_OrderHeaderTotal AS total,
at.Ais_TransactionStatus AS Ais_TransactionStatus,
c.CorporateID AS corporate_id,
@@ -3814,6 +3814,7 @@ class Transactionv4 extends MY_Controller
FROM t_orderheader oh
JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID
JOIN m_branch b ON b.M_BranchID = oh.T_OrderHeaderM_BranchID
LEFT JOIN t_orderstemcell os ON os.T_OrderStemcellT_OrderHeaderID = oh.T_OrderHeaderID
LEFT JOIN corporate c ON c.CorporateID = oh.T_OrderHeaderCorporateID
LEFT JOIN mgm_mcu ON mgm_mcu.Mgm_McuID = oh.T_OrderHeaderMgm_McuID
LEFT JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -3866,8 +3867,11 @@ class Transactionv4 extends MY_Controller
}
if ($is_stemcell !== null && $is_stemcell !== '' && $is_stemcell !== 'A') {
$where_clauses[] = "b.M_BranchIsSteemCell = ?";
$params[] = $is_stemcell;
if ($is_stemcell === 'Y') {
$where_clauses[] = "os.T_OrderStemcellID IS NOT NULL";
} else {
$where_clauses[] = "os.T_OrderStemcellID IS NULL";
}
}
// Build WHERE
@@ -3881,6 +3885,7 @@ class Transactionv4 extends MY_Controller
FROM t_orderheader oh
JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID
JOIN m_branch b ON b.M_BranchID = oh.T_OrderHeaderM_BranchID
LEFT JOIN t_orderstemcell os ON os.T_OrderStemcellT_OrderHeaderID = oh.T_OrderHeaderID
LEFT JOIN " . $this->db_log->database . ".ais_transaction at
ON at.Ais_TransactionOrderHeaderLabNumber = oh.T_OrderHeaderLabNumber
LEFT JOIN corporate c ON c.CorporateID = oh.T_OrderHeaderCorporateID

View File

@@ -490,7 +490,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -547,7 +547,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1055,7 +1055,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1111,7 +1111,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%'
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1863,7 +1863,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -1919,7 +1919,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2391,7 +2391,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2446,7 +2446,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
@@ -2909,7 +2909,7 @@ class Transactionv5 extends MY_Controller
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
AND M_BranchIsSteemCell = 'Y'
AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID)
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID

View File

@@ -250,7 +250,7 @@ class Order extends MY_Controller
}
$userid = $this->sys_user["M_UserID"];
$sql = "SELECT M_UserLoginM_BranchID as branch_id, M_BranchCodeLab as branch_code_lab, M_BranchCodeBridging as branch_code_bridging
$sql = "SELECT M_UserLoginM_BranchID as branch_id, M_BranchCodeLab as branch_code_lab, M_BranchCodeBridging as branch_code_bridging, M_BranchIsSteemCell as is_stemcell
FROM m_user
JOIN m_branch ON M_UserLoginM_BranchID = M_BranchID AND M_BranchIsActive = 'Y'
WHERE M_UserID = $userid";
@@ -263,6 +263,7 @@ class Order extends MY_Controller
$branch_id = $dt_branch['branch_id'];
$branch_code_lab = $dt_branch['branch_code_lab'];
$branch_code_bridging = $dt_branch['branch_code_bridging'];
$branch_is_stemcell = isset($dt_branch['is_stemcell']) ? $dt_branch['is_stemcell'] : 'N';
$pre_registerid = isset($prm['preid']) ? $prm['preid'] : 0;
$header = $prm['header'];
$header['pre_register_id'] = $pre_registerid;
@@ -311,6 +312,32 @@ class Order extends MY_Controller
}
}
if ($branch_is_stemcell == 'Y') {
$test_ids_to_check = array_values(array_unique(array_map('intval', array_column($details, 't_id'))));
$test_ids_to_check = array_filter($test_ids_to_check, function($id) { return $id > 0; });
if (!empty($test_ids_to_check)) {
$ids_str = implode(',', $test_ids_to_check);
$sql_check = "SELECT T_TestID, T_TestName, T_TestNat_GroupID FROM t_test WHERE T_TestID IN ($ids_str)";
$query_check = $this->db_smartone->query($sql_check);
if (!$query_check) {
$this->sys_error_db(["status" => "ERR", "message" => "check nat_group stemcell | " . $this->db_smartone->error()["message"], "debug" => $this->db_smartone->last_query()]);
exit;
}
$rows_check = $query_check->result_array();
$invalid_tests = [];
foreach ($rows_check as $row_check) {
if ((int)$row_check['T_TestNat_GroupID'] !== 7) {
$invalid_tests[] = $row_check['T_TestName'];
}
}
if (!empty($invalid_tests)) {
$this->sys_error("Cabang dan pemeriksaan tidak sesuai. Cek pemeriksaan, harus group stemcell. Pemeriksaan tidak valid: " . implode(', ', $invalid_tests));
exit;
}
}
}
$this->db_smartone->trans_begin();
$sql = "SELECT M_DoctorID, M_DoctorName, M_DoctorPjIsDefaultPJ
@@ -384,6 +411,24 @@ class Order extends MY_Controller
exit;
}
if ($branch_is_stemcell == 'Y') {
$sql_stemcell = "INSERT INTO t_orderstemcell (
T_OrderStemcellT_OrderHeaderID,
T_OrderStemcellCreated,
T_OrderStemcellCreatedUserID
) VALUES (?, NOW(), ?)";
$query_stemcell = $this->db_smartone->query($sql_stemcell, [$header_id, $userid]);
if (!$query_stemcell) {
$this->db_smartone->trans_rollback();
$this->insert_log_error($this->db_smartone->last_query(), ['INSERT_T_ORDERSTEMCELL', 'order/save'], [
'header_id' => $header_id,
'error' => $this->db_smartone->error()
]);
$this->sys_error_db(["status" => "ERR", "message" => "error insert t_orderstemcell | " . $this->db_smartone->error()["message"], "debug" => $this->db_smartone->last_query()]);
exit;
}
}
$references = [];
if (isset($prm['reference'])) {
$references = $prm['reference'];

View File

@@ -240,7 +240,18 @@ class Preregisterappcponev5 extends MY_Controller
LEFT join terminology on attribute_path = 'Address.country' AND code = M_PatientAddressCountry
LEFT JOIN m_title ON Mcu_PreregisterPatientsM_TitleID = M_TitleID
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN form_riwayat_pasien ON Mcu_PreregisterPatientsID = FormRiwayatPasienPreregisterID AND FormRiwayatPasienIsActive = 'Y'
LEFT JOIN (
SELECT frp.*
FROM form_riwayat_pasien frp
JOIN (
SELECT FormRiwayatPasienPreregisterID, MAX(FormRiwayatPasienID) AS max_id
FROM form_riwayat_pasien
WHERE FormRiwayatPasienIsActive = 'Y'
GROUP BY FormRiwayatPasienPreregisterID
) latest_frp
ON latest_frp.FormRiwayatPasienPreregisterID = frp.FormRiwayatPasienPreregisterID
AND latest_frp.max_id = frp.FormRiwayatPasienID
) form_riwayat_pasien ON Mcu_PreregisterPatientsID = form_riwayat_pasien.FormRiwayatPasienPreregisterID
LEFT JOIN mcu_preregister_date ON Mcu_PreregisterDateMcu_PreregisterPatientsID = Mcu_PreregisterPatientsID
WHERE
Mcu_PreregisterPatientsIsActive = 'Y' AND Mcu_PreregisterPatientsMgm_McuID = {$setup['Mgm_McuID']}

View File

@@ -257,7 +257,18 @@ class Preregisterappcponev8 extends MY_Controller
LEFT join terminology on attribute_path = 'Address.country' AND code = M_PatientAddressCountry
LEFT JOIN m_title ON Mcu_PreregisterPatientsM_TitleID = M_TitleID
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN form_riwayat_pasien ON Mcu_PreregisterPatientsID = FormRiwayatPasienPreregisterID AND FormRiwayatPasienIsActive = 'Y'
LEFT JOIN (
SELECT frp.*
FROM form_riwayat_pasien frp
JOIN (
SELECT FormRiwayatPasienPreregisterID, MAX(FormRiwayatPasienID) AS max_id
FROM form_riwayat_pasien
WHERE FormRiwayatPasienIsActive = 'Y'
GROUP BY FormRiwayatPasienPreregisterID
) latest_frp
ON latest_frp.FormRiwayatPasienPreregisterID = frp.FormRiwayatPasienPreregisterID
AND latest_frp.max_id = frp.FormRiwayatPasienID
) form_riwayat_pasien ON Mcu_PreregisterPatientsID = form_riwayat_pasien.FormRiwayatPasienPreregisterID
LEFT JOIN mcu_preregister_date ON Mcu_PreregisterDateMcu_PreregisterPatientsID = Mcu_PreregisterPatientsID
LEFT JOIN (
SELECT c.*

12
sql/t_orderstemcell.sql Normal file
View File

@@ -0,0 +1,12 @@
-- Tabel untuk menyimpan flag bahwa order ini adalah order stemcell.
-- Disimpan saat order dibuat agar tidak terpengaruh perubahan flag M_BranchIsSteCell di masa mendatang.
-- Tanggal: 2026-06-30
CREATE TABLE IF NOT EXISTS t_orderstemcell (
T_OrderStemcellID INT NOT NULL AUTO_INCREMENT,
T_OrderStemcellT_OrderHeaderID INT NOT NULL,
T_OrderStemcellCreated DATETIME NOT NULL,
T_OrderStemcellCreatedUserID INT NOT NULL,
PRIMARY KEY (T_OrderStemcellID),
UNIQUE KEY uq_orderstemcell_header (T_OrderStemcellT_OrderHeaderID)
);