2025-11-26 16:53:14 +07:00
< ? php
namespace App\Database\Seeds ;
use CodeIgniter\Database\Seeder ;
2026-01-13 16:48:43 +07:00
use App\Libraries\ValueSet ;
class TestSeeder extends Seeder
{
2026-02-27 16:31:55 +07:00
private array $entityTypes = [];
private function loadEntityTypes () : void
{
if ( empty ( $this -> entityTypes )) {
$json = file_get_contents ( APPPATH . 'Libraries/Data/entity_type.json' );
$data = json_decode ( $json , true );
foreach ( $data [ 'values' ] as $item ) {
$this -> entityTypes [ $item [ 'key' ]] = $item [ 'key' ];
}
}
}
private function getEntityType ( string $name ) : ? string
{
$this -> loadEntityTypes ();
return $this -> entityTypes [ $name ] ? ? null ;
}
2026-01-13 16:48:43 +07:00
private function getKey ( string $lookupName , string $key ) : ? string
{
$data = ValueSet :: getRaw ( $lookupName );
if ( $data === null ) return null ;
foreach ( $data as $item ) {
if (( $item [ 'key' ] ? ? '' ) === $key ) {
return $item [ 'key' ];
}
}
return null ;
}
2025-11-26 16:53:14 +07:00
2026-01-13 16:48:43 +07:00
public function run ()
{
2025-11-26 16:53:14 +07:00
$now = date ( 'Y-m-d H:i:s' );
2025-12-16 13:43:06 +07:00
2026-01-13 16:48:43 +07:00
$tIDs = [];
2026-02-26 16:48:10 +07:00
$testMapHeaders = []; // Store TestMapID by mapping key
$testMapDetails = []; // Store detail records
// Helper to get or create TestMap header ID
$getTestMapID = function ( $testSiteID , $hostType , $hostID , $clientType , $clientID ) use ( & $testMapHeaders , & $now ) {
$key = " { $hostType } _ { $hostID } _ { $clientType } _ { $clientID } " ;
if ( ! isset ( $testMapHeaders [ $key ])) {
$data = [
'TestSiteID' => $testSiteID ,
'HostType' => $hostType ,
'HostID' => $hostID ,
'ClientType' => $clientType ,
'ClientID' => $clientID ,
'CreateDate' => $now
];
$this -> db -> table ( 'testmap' ) -> insert ( $data );
$testMapHeaders [ $key ] = $this -> db -> insertID ();
}
return $testMapHeaders [ $key ];
};
2025-12-16 13:43:06 +07:00
// ========================================
2026-03-10 16:40:37 +07:00
// DEPARTMENT 1 - HEMATOLOGY (Discipline 1)
// Order: GROUP (<100) → PARAM (<100) → TEST (100+) → CALC (100+)
2025-12-16 13:43:06 +07:00
// ========================================
2026-03-10 16:40:37 +07:00
// GROUP: CBC (Complete Blood Count)
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'CBC' , 'TestSiteName' => 'Complete Blood Count' , 'TestType' => 'GROUP' , 'Description' => 'Darah Lengkap' , 'SeqScr' => '10' , 'SeqRpt' => '10' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'ResultType' => 'NORES' , 'RefType' => 'NOREF' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'CBC' ] = $this -> db -> insertID ();
// PARAM: (none for Hematology)
// TEST: Hematology Tests
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'HB' , 'TestSiteName' => 'Hemoglobin' , 'TestType' => 'TEST' , 'Description' => '' , 'SeqScr' => '100' , 'SeqRpt' => '100' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'g/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'HB' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'HCT' , 'TestSiteName' => 'Hematocrit' , 'TestType' => 'TEST' , 'Description' => '' , 'SeqScr' => '110' , 'SeqRpt' => '110' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => '%' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'HCT' ] = $this -> db -> insertID ();
2025-11-26 16:53:14 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'RBC' , 'TestSiteName' => 'Red Blood Cell' , 'TestType' => 'TEST' , 'Description' => 'Eritrosit' , 'SeqScr' => '120' , 'SeqRpt' => '120' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'x10^6/uL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '2' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'RBC' ] = $this -> db -> insertID ();
2025-11-26 16:53:14 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'WBC' , 'TestSiteName' => 'White Blood Cell' , 'TestType' => 'TEST' , 'Description' => 'Leukosit' , 'SeqScr' => '130' , 'SeqRpt' => '130' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'x10^3/uL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '2' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'WBC' ] = $this -> db -> insertID ();
2025-11-26 16:53:14 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'PLT' , 'TestSiteName' => 'Platelet' , 'TestType' => 'TEST' , 'Description' => 'Trombosit' , 'SeqScr' => '140' , 'SeqRpt' => '140' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'x10^3/uL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'PLT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'MCV' , 'TestSiteName' => 'MCV' , 'TestType' => 'TEST' , 'Description' => 'Mean Corpuscular Volume' , 'SeqScr' => '150' , 'SeqRpt' => '150' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'fL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'MCV' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'MCH' , 'TestSiteName' => 'MCH' , 'TestType' => 'TEST' , 'Description' => 'Mean Corpuscular Hemoglobin' , 'SeqScr' => '160' , 'SeqRpt' => '160' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'pg' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'MCH' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'MCHC' , 'TestSiteName' => 'MCHC' , 'TestType' => 'TEST' , 'Description' => 'Mean Corpuscular Hemoglobin Concentration' , 'SeqScr' => '170' , 'SeqRpt' => '170' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '1' , 'DepartmentID' => '1' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '500' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'g/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'CBC Analyzer' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'MCHC' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// Add CBC members now that tests are defined
$this -> db -> table ( 'testdefgrp' ) -> insertBatch ([
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'HB' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'HCT' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'RBC' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'WBC' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'PLT' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'MCV' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'MCH' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'CBC' ], 'Member' => $tIDs [ 'MCHC' ], 'CreateDate' => " $now " ]
]);
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// CALC: (none for Hematology)
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// ========================================
// DEPARTMENT 2 - CHEMISTRY (Discipline 2)
// Order: GROUP (<100) → PARAM (<100) → TEST (100+) → CALC (100+)
// ========================================
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// GROUP: LIPID, LFT, RFT
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'LIPID' , 'TestSiteName' => 'Lipid Profile' , 'TestType' => 'GROUP' , 'Description' => 'Profil Lipid' , 'SeqScr' => '10' , 'SeqRpt' => '10' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'ResultType' => 'NORES' , 'RefType' => 'NOREF' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'LIPID' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'LFT' , 'TestSiteName' => 'Liver Function Test' , 'TestType' => 'GROUP' , 'Description' => 'Fungsi Hati' , 'SeqScr' => '20' , 'SeqRpt' => '20' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'ResultType' => 'NORES' , 'RefType' => 'NOREF' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'LFT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'RFT' , 'TestSiteName' => 'Renal Function Test' , 'TestType' => 'GROUP' , 'Description' => 'Fungsi Ginjal' , 'SeqScr' => '30' , 'SeqRpt' => '30' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'ResultType' => 'NORES' , 'RefType' => 'NOREF' , 'CreateDate' => " $now " ];
2025-11-26 16:53:14 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'RFT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// PARAM: (none for Chemistry)
// TEST: Chemistry Tests
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'GLU' , 'TestSiteName' => 'Glucose' , 'TestType' => 'TEST' , 'Description' => 'Glukosa Sewaktu' , 'SeqScr' => '100' , 'SeqRpt' => '100' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '0.0555' , 'Unit2' => 'mmol/L' , 'Decimal' => '0' , 'Method' => 'Hexokinase' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'GLU' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'CREA' , 'TestSiteName' => 'Creatinine' , 'TestType' => 'TEST' , 'Description' => 'Kreatinin' , 'SeqScr' => '110' , 'SeqRpt' => '110' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '88.4' , 'Unit2' => 'umol/L' , 'Decimal' => '2' , 'Method' => 'Enzymatic' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'CREA' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'UREA' , 'TestSiteName' => 'Blood Urea Nitrogen' , 'TestType' => 'TEST' , 'Description' => 'BUN' , 'SeqScr' => '120' , 'SeqRpt' => '120' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'Urease-GLDH' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'UREA' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'SGOT' , 'TestSiteName' => 'AST (SGOT)' , 'TestType' => 'TEST' , 'Description' => 'Aspartate Aminotransferase' , 'SeqScr' => '130' , 'SeqRpt' => '130' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'U/L' , 'Factor' => '0.017' , 'Unit2' => 'ukat/L' , 'Decimal' => '0' , 'Method' => 'IFCC' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'SGOT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'SGPT' , 'TestSiteName' => 'ALT (SGPT)' , 'TestType' => 'TEST' , 'Description' => 'Alanine Aminotransferase' , 'SeqScr' => '140' , 'SeqRpt' => '140' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'U/L' , 'Factor' => '0.017' , 'Unit2' => 'ukat/L' , 'Decimal' => '0' , 'Method' => 'IFCC' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'SGPT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'CHOL' , 'TestSiteName' => 'Total Cholesterol' , 'TestType' => 'TEST' , 'Description' => 'Kolesterol Total' , 'SeqScr' => '150' , 'SeqRpt' => '150' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => 'Enzymatic' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'CHOL' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'TG' , 'TestSiteName' => 'Triglycerides' , 'TestType' => 'TEST' , 'Description' => 'Trigliserida' , 'SeqScr' => '160' , 'SeqRpt' => '160' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => 'GPO-PAP' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'TG' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'HDL' , 'TestSiteName' => 'HDL Cholesterol' , 'TestType' => 'TEST' , 'Description' => 'Kolesterol HDL' , 'SeqScr' => '170' , 'SeqRpt' => '170' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => 'Direct' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'HDL' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'LDL' , 'TestSiteName' => 'LDL Cholesterol' , 'TestType' => 'TEST' , 'Description' => 'Kolesterol LDL' , 'SeqScr' => '180' , 'SeqRpt' => '180' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '300' , 'ReqQtyUnit' => 'uL' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => 'Direct' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$tIDs [ 'LDL' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// CALC: Chemistry Calculated Tests
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'EGFR' , 'TestSiteName' => 'eGFR (CKD-EPI)' , 'TestType' => 'CALC' , 'Description' => 'Estimated Glomerular Filtration Rate' , 'SeqScr' => '190' , 'SeqRpt' => '190' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '0' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'EGFR' ] = $this -> db -> insertID ();
2026-02-23 05:11:23 +07:00
$data = [ 'TestSiteID' => $tIDs [ 'EGFR' ], 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'FormulaInput' => 'CREA,AGE,GENDER' , 'FormulaCode' => 'CKD_EPI(CREA,AGE,GENDER)' , 'RefType' => 'RANGE' , 'Unit1' => 'mL/min/1.73m2' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefcal' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'LDLCALC' , 'TestSiteName' => 'LDL Cholesterol (Calculated)' , 'TestType' => 'CALC' , 'Description' => 'Friedewald formula: TC - HDL - (TG/5)' , 'SeqScr' => '200' , 'SeqRpt' => '200' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '0' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'LDLCALC' ] = $this -> db -> insertID ();
2026-02-23 05:11:23 +07:00
$data = [ 'TestSiteID' => $tIDs [ 'LDLCALC' ], 'DisciplineID' => '2' , 'DepartmentID' => '2' , 'FormulaInput' => 'CHOL,HDL,TG' , 'FormulaCode' => 'CHOL - HDL - (TG/5)' , 'RefType' => 'RANGE' , 'Unit1' => 'mg/dL' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefcal' ) -> insert ( $data );
2026-03-10 16:40:37 +07:00
// Add Chemistry Group members now that tests are defined
2025-12-17 10:06:05 +07:00
$this -> db -> table ( 'testdefgrp' ) -> insertBatch ([
2025-12-29 12:55:31 +07:00
[ 'TestSiteID' => $tIDs [ 'LIPID' ], 'Member' => $tIDs [ 'CHOL' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'LIPID' ], 'Member' => $tIDs [ 'TG' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'LIPID' ], 'Member' => $tIDs [ 'HDL' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'LIPID' ], 'Member' => $tIDs [ 'LDL' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'LIPID' ], 'Member' => $tIDs [ 'LDLCALC' ], 'CreateDate' => " $now " ]
2025-12-17 10:06:05 +07:00
]);
2025-12-16 13:43:06 +07:00
2025-12-17 10:06:05 +07:00
$this -> db -> table ( 'testdefgrp' ) -> insertBatch ([
2025-12-29 12:55:31 +07:00
[ 'TestSiteID' => $tIDs [ 'LFT' ], 'Member' => $tIDs [ 'SGOT' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'LFT' ], 'Member' => $tIDs [ 'SGPT' ], 'CreateDate' => " $now " ]
2025-12-17 10:06:05 +07:00
]);
2025-12-16 13:43:06 +07:00
2025-12-17 10:06:05 +07:00
$this -> db -> table ( 'testdefgrp' ) -> insertBatch ([
2025-12-29 12:55:31 +07:00
[ 'TestSiteID' => $tIDs [ 'RFT' ], 'Member' => $tIDs [ 'UREA' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'RFT' ], 'Member' => $tIDs [ 'CREA' ], 'CreateDate' => " $now " ],
[ 'TestSiteID' => $tIDs [ 'RFT' ], 'Member' => $tIDs [ 'EGFR' ], 'CreateDate' => " $now " ]
2025-12-17 10:06:05 +07:00
]);
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
// ========================================
// DEPARTMENT 4 - URINALYSIS (Discipline 4)
// Order: GROUP (<100) → PARAM (<100) → TEST (100+) → CALC (100+)
// ========================================
// GROUP: (none for Urinalysis in current setup)
// PARAM: (none for Urinalysis)
// TEST: Urinalysis Tests
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'UCOLOR' , 'TestSiteName' => 'Urine Color' , 'TestType' => 'TEST' , 'Description' => 'Warna Urine' , 'SeqScr' => '100' , 'SeqRpt' => '100' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '4' , 'DepartmentID' => '4' , 'ResultType' => 'VSET' , 'RefType' => 'VSET' , 'VSet' => '1001' , 'ReqQty' => '10' , 'ReqQtyUnit' => 'mL' , 'Unit1' => '' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '' , 'Method' => 'Visual' , 'CreateDate' => " $now " ];
2025-12-16 13:43:06 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'UCOLOR' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'UGLUC' , 'TestSiteName' => 'Urine Glucose' , 'TestType' => 'TEST' , 'Description' => 'Glukosa Urine' , 'SeqScr' => '110' , 'SeqRpt' => '110' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '4' , 'DepartmentID' => '4' , 'ResultType' => 'VSET' , 'RefType' => 'VSET' , 'VSet' => '1002' , 'ReqQty' => '10' , 'ReqQtyUnit' => 'mL' , 'Unit1' => '' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '' , 'Method' => 'Dipstick' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'UGLUC' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'UPROT' , 'TestSiteName' => 'Urine Protein' , 'TestType' => 'TEST' , 'Description' => 'Protein Urine' , 'SeqScr' => '120' , 'SeqRpt' => '120' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '4' , 'DepartmentID' => '4' , 'ResultType' => 'VSET' , 'RefType' => 'VSET' , 'VSet' => '1003' , 'ReqQty' => '10' , 'ReqQtyUnit' => 'mL' , 'Unit1' => '' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '' , 'Method' => 'Dipstick' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'UPROT' ] = $this -> db -> insertID ();
2025-12-16 13:43:06 +07:00
2026-03-10 16:40:37 +07:00
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'PH' , 'TestSiteName' => 'Urine pH' , 'TestType' => 'TEST' , 'Description' => 'pH Urine' , 'SeqScr' => '130' , 'SeqRpt' => '130' , 'IndentLeft' => '1' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '1' , 'DisciplineID' => '4' , 'DepartmentID' => '4' , 'ResultType' => 'NMRIC' , 'RefType' => 'RANGE' , 'VSet' => '' , 'ReqQty' => '10' , 'ReqQtyUnit' => 'mL' , 'Unit1' => '' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => 'Dipstick' , 'CreateDate' => " $now " ];
2025-11-27 14:15:10 +07:00
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
2025-12-17 10:06:05 +07:00
$tIDs [ 'PH' ] = $this -> db -> insertID ();
2026-02-24 06:11:18 +07:00
2026-03-10 16:40:37 +07:00
// CALC: (none for Urinalysis)
// ========================================
// DEPARTMENT 10 - GENERAL (Discipline 10)
// Order: GROUP (<100) → PARAM (<100) → TEST (100+) → CALC (100+)
// ========================================
// GROUP: (none for General)
// PARAM: General Parameters (< 100)
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'HEIGHT' , 'TestSiteName' => 'Height' , 'TestType' => 'PARAM' , 'Description' => 'Tinggi Badan' , 'SeqScr' => '10' , 'SeqRpt' => '10' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '0' , 'CountStat' => '0' , 'DisciplineID' => '10' , 'DepartmentID' => '' , 'ResultType' => 'NMRIC' , 'RefType' => '' , 'VSet' => '' , 'ReqQty' => '' , 'ReqQtyUnit' => '' , 'Unit1' => 'cm' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => '' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'HEIGHT' ] = $this -> db -> insertID ();
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'WEIGHT' , 'TestSiteName' => 'Weight' , 'TestType' => 'PARAM' , 'Description' => 'Berat Badan' , 'SeqScr' => '20' , 'SeqRpt' => '20' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '0' , 'CountStat' => '0' , 'DisciplineID' => '10' , 'DepartmentID' => '' , 'ResultType' => 'NMRIC' , 'RefType' => '' , 'VSet' => '' , 'ReqQty' => '' , 'ReqQtyUnit' => '' , 'Unit1' => 'kg' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'Method' => '' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'WEIGHT' ] = $this -> db -> insertID ();
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'AGE' , 'TestSiteName' => 'Age' , 'TestType' => 'PARAM' , 'Description' => 'Usia' , 'SeqScr' => '30' , 'SeqRpt' => '30' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '0' , 'CountStat' => '0' , 'DisciplineID' => '10' , 'DepartmentID' => '' , 'ResultType' => 'NMRIC' , 'RefType' => '' , 'VSet' => '' , 'ReqQty' => '' , 'ReqQtyUnit' => '' , 'Unit1' => 'years' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => '' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'AGE' ] = $this -> db -> insertID ();
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'SYSTL' , 'TestSiteName' => 'Systolic BP' , 'TestType' => 'PARAM' , 'Description' => 'Tekanan Darah Sistolik' , 'SeqScr' => '40' , 'SeqRpt' => '40' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '0' , 'CountStat' => '0' , 'DisciplineID' => '10' , 'DepartmentID' => '' , 'ResultType' => 'NMRIC' , 'RefType' => '' , 'VSet' => '' , 'ReqQty' => '' , 'ReqQtyUnit' => '' , 'Unit1' => 'mmHg' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => '' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'SYSTL' ] = $this -> db -> insertID ();
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'DIASTL' , 'TestSiteName' => 'Diastolic BP' , 'TestType' => 'PARAM' , 'Description' => 'Tekanan Darah Diastolik' , 'SeqScr' => '50' , 'SeqRpt' => '50' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '0' , 'CountStat' => '0' , 'DisciplineID' => '10' , 'DepartmentID' => '' , 'ResultType' => 'NMRIC' , 'RefType' => '' , 'VSet' => '' , 'ReqQty' => '' , 'ReqQtyUnit' => '' , 'Unit1' => 'mmHg' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '0' , 'Method' => '' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'DIASTL' ] = $this -> db -> insertID ();
// TEST: (none for General)
// CALC: BMI (>= 100)
$data = [ 'SiteID' => '1' , 'TestSiteCode' => 'BMI' , 'TestSiteName' => 'Body Mass Index' , 'TestType' => 'CALC' , 'Description' => 'Indeks Massa Tubuh - weight/(height^2)' , 'SeqScr' => '100' , 'SeqRpt' => '100' , 'IndentLeft' => '0' , 'VisibleScr' => '1' , 'VisibleRpt' => '1' , 'CountStat' => '0' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefsite' ) -> insert ( $data );
$tIDs [ 'BMI' ] = $this -> db -> insertID ();
$data = [ 'TestSiteID' => $tIDs [ 'BMI' ], 'DisciplineID' => '10' , 'DepartmentID' => '' , 'FormulaInput' => 'WEIGHT,HEIGHT' , 'FormulaCode' => 'WEIGHT / ((HEIGHT/100) * (HEIGHT/100))' , 'RefType' => 'RANGE' , 'Unit1' => 'kg/m2' , 'Factor' => '' , 'Unit2' => '' , 'Decimal' => '1' , 'CreateDate' => " $now " ];
$this -> db -> table ( 'testdefcal' ) -> insert ( $data );
2026-02-24 06:11:18 +07:00
// ========================================
// TEST MAP - Specimen Mapping
// ========================================
// Get container IDs (inserted by SpecimenSeeder in order)
$conSST = 1 ; // SST (Serum Separator Tube)
$conEDTA = 9 ; // EDTA - Hematology
$conCitrate = 10 ; // Citrate - Koagulasi
$conPotUrin = 12 ; // Pot Urin
$conUrine = 13 ; // Urine Container
// Workstation IDs from OrganizationSeeder
$wsHAuto = 1 ; // Hematologi Auto
$wsCAuto = 3 ; // Kimia Auto
$wsIAuto = 6 ; // Imunologi Auto
$wsUAuto = 8 ; // Urin Auto
2026-02-24 16:53:36 +07:00
// Equipment IDs from OrganizationSeeder
$instHematology = 1 ; // Sysmex XN-1000
$instChemistry = 2 ; // Roche Cobas C501
$instImmunology = 3 ; // Architect i2000
$instUrinalysis = 4 ; // Urisys 1100
2026-02-26 16:48:10 +07:00
// Helper to get or create TestMap header ID (relationship only)
$getTestMapID = function ( $hostType , $hostID , $clientType , $clientID ) use ( & $testMapHeaders , & $now ) {
$key = " { $hostType } _ { $hostID } _ { $clientType } _ { $clientID } " ;
if ( ! isset ( $testMapHeaders [ $key ])) {
$data = [
'HostType' => $hostType ,
'HostID' => $hostID ,
'ClientType' => $clientType ,
'ClientID' => $clientID ,
'CreateDate' => $now
];
$this -> db -> table ( 'testmap' ) -> insert ( $data );
$testMapHeaders [ $key ] = $this -> db -> insertID ();
}
return $testMapHeaders [ $key ];
};
2026-02-24 16:53:36 +07:00
2026-02-26 16:48:10 +07:00
// Helper to add detail record
$addDetail = function ( $testMapID , $hostTestCode , $hostTestName , $conDefID , $clientTestCode , $clientTestName ) use ( & $testMapDetails , & $now ) {
$testMapDetails [] = [
'TestMapID' => $testMapID ,
'HostTestCode' => $hostTestCode ,
'HostTestName' => $hostTestName ,
'ConDefID' => $conDefID ,
'ClientTestCode' => $clientTestCode ,
'ClientTestName' => $clientTestName ,
2026-02-24 16:53:36 +07:00
'CreateDate' => $now
];
2026-02-26 16:48:10 +07:00
};
2026-02-24 16:53:36 +07:00
2026-03-10 16:40:37 +07:00
// Test mappings configuration
2026-02-26 16:48:10 +07:00
$testMappings = [
// Hematology: Site → HAUTO → Sysmex (EDTA)
[
'tests' => [ 'HB' , 'HCT' , 'RBC' , 'WBC' , 'PLT' , 'MCV' , 'MCH' , 'MCHC' ],
'panels' => [ 'CBC' ],
'siteToWs' => [ 'ws' => $wsHAuto , 'con' => null ],
'wsToInst' => [ 'ws' => $wsHAuto , 'inst' => $instHematology , 'con' => $conEDTA ],
],
// Chemistry: Site → CAUTO → Cobas (SST)
[
'tests' => [ 'GLU' , 'CREA' , 'UREA' , 'SGOT' , 'SGPT' , 'CHOL' , 'TG' , 'HDL' , 'LDL' ],
'panels' => [ 'LIPID' , 'LFT' , 'RFT' ],
'siteToWs' => [ 'ws' => $wsCAuto , 'con' => null ],
'wsToInst' => [ 'ws' => $wsCAuto , 'inst' => $instChemistry , 'con' => $conSST ],
],
// Calculated: Site → CAUTO → Cobas (SST)
[
'tests' => [ 'EGFR' , 'LDLCALC' ],
'panels' => [],
'siteToWs' => [ 'ws' => $wsCAuto , 'con' => null ],
'wsToInst' => [ 'ws' => $wsCAuto , 'inst' => $instChemistry , 'con' => $conSST ],
],
// Urinalysis: Site → UAUTO → Urisys (Pot Urin)
[
'tests' => [ 'UCOLOR' , 'UGLUC' , 'UPROT' , 'PH' ],
'panels' => [],
'siteToWs' => [ 'ws' => $wsUAuto , 'con' => null ],
'wsToInst' => [ 'ws' => $wsUAuto , 'inst' => $instUrinalysis , 'con' => $conPotUrin ],
],
// BMI: Site → CAUTO (no instrument mapping - calculated)
[
'tests' => [ 'BMI' ],
'panels' => [],
'siteToWs' => [ 'ws' => $wsCAuto , 'con' => null ],
'wsToInst' => null ,
],
];
2026-02-27 16:31:55 +07:00
// Load entity types for mapping
$entitySite = $this -> getEntityType ( 'SITE' ) ? ? 'SITE' ;
$entityWst = $this -> getEntityType ( 'WST' ) ? ? 'WST' ;
$entityInst = $this -> getEntityType ( 'INST' ) ? ? 'INST' ;
2026-02-26 16:48:10 +07:00
foreach ( $testMappings as $mapping ) {
2026-03-10 16:40:37 +07:00
// Site → Workstation mapping
2026-02-27 16:31:55 +07:00
$testMapSiteWsID = $getTestMapID ( $entitySite , '1' , $entityWst , ( string ) $mapping [ 'siteToWs' ][ 'ws' ]);
2026-02-26 16:48:10 +07:00
foreach ( $mapping [ 'tests' ] as $testCode ) {
$addDetail ( $testMapSiteWsID , $testCode , $testCode , $mapping [ 'siteToWs' ][ 'con' ], $testCode , $testCode );
}
foreach ( $mapping [ 'panels' ] as $panelCode ) {
$addDetail ( $testMapSiteWsID , $panelCode , $panelCode , $mapping [ 'siteToWs' ][ 'con' ], $panelCode , $panelCode );
}
2026-03-10 16:40:37 +07:00
// Workstation → Instrument mapping
2026-02-26 16:48:10 +07:00
if ( $mapping [ 'wsToInst' ] !== null ) {
2026-02-27 16:31:55 +07:00
$testMapWsInstID = $getTestMapID ( $entityWst , ( string ) $mapping [ 'wsToInst' ][ 'ws' ], $entityInst , ( string ) $mapping [ 'wsToInst' ][ 'inst' ]);
2026-02-26 16:48:10 +07:00
foreach ( $mapping [ 'tests' ] as $testCode ) {
$addDetail ( $testMapWsInstID , $testCode , $testCode , $mapping [ 'wsToInst' ][ 'con' ], $testCode , $testCode );
}
foreach ( $mapping [ 'panels' ] as $panelCode ) {
$addDetail ( $testMapWsInstID , $panelCode , $panelCode , $mapping [ 'wsToInst' ][ 'con' ], $panelCode , $panelCode );
}
}
2026-02-24 16:53:36 +07:00
}
2026-02-26 16:48:10 +07:00
// Insert all testmapdetail records
if ( ! empty ( $testMapDetails )) {
$this -> db -> table ( 'testmapdetail' ) -> insertBatch ( $testMapDetails );
2026-02-24 16:53:36 +07:00
}
2026-01-13 16:48:43 +07:00
}
2026-01-05 07:21:12 +07:00
}