getTestIDs(); if (empty($testIDs)) { echo "Error: No test definitions found. Please run TestSeeder first.\n"; return; } // Get container definitions $containers = $this->db->table('containerdef')->get()->getResultArray(); if (empty($containers)) { echo "Error: No container definitions found. Please run SpecimenSeeder first.\n"; return; } // ======================================== // ORDER 1: Patient 1 - Complete Blood Count (CBC) // ======================================== $orderID1 = '001' . date('ymd', strtotime('-2 days')) . '00001'; $internalOID1 = $this->createOrder([ 'OrderID' => $orderID1, 'PlacerID' => 'PLC001', 'InternalPID' => 1, 'SiteID' => '1', 'PVADTID' => 2, 'ReqApp' => 'HIS', 'Priority' => 'R', 'TrnDate' => $twoDaysAgo, 'EffDate' => $twoDaysAgo, 'CreateDate' => $twoDaysAgo ]); echo "Created Order 1: {$orderID1} (InternalOID: {$internalOID1})\n"; // Create specimen for CBC (EDTA tube - ConDefID = 9) $specimenID1 = $orderID1 . '-S01'; $internalSID1 = $this->createSpecimen([ 'SID' => $specimenID1, 'SiteID' => '1', 'OrderID' => $internalOID1, 'ConDefID' => 9, 'Qty' => 1, 'Unit' => 'tube', 'GenerateBy' => 'ORDER', 'CreateDate' => $twoDaysAgo ]); // Create specimen status progression $this->createSpecimenStatus($specimenID1, $internalOID1, 'PENDING', $twoDaysAgo); $this->createSpecimenStatus($specimenID1, $internalOID1, 'COLLECTED', date('Y-m-d H:i:s', strtotime('-2 days +30 minutes'))); $this->createSpecimenStatus($specimenID1, $internalOID1, 'RECEIVED', date('Y-m-d H:i:s', strtotime('-2 days +1 hour'))); $this->createSpecimenStatus($specimenID1, $internalOID1, 'PROCESSING', date('Y-m-d H:i:s', strtotime('-2 days +2 hours'))); $this->createSpecimenStatus($specimenID1, $internalOID1, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +8 hours'))); echo " Created Specimen: {$specimenID1} (EDTA)\n"; // Create CBC test results $cbcTests = [ ['code' => 'HB', 'result' => '14.2'], ['code' => 'HCT', 'result' => '42.5'], ['code' => 'RBC', 'result' => '4.85'], ['code' => 'WBC', 'result' => '7.2'], ['code' => 'PLT', 'result' => '285'], ['code' => 'MCV', 'result' => '87.6'], ['code' => 'MCH', 'result' => '29.3'], ['code' => 'MCHC', 'result' => '33.4'], ]; foreach ($cbcTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID1, 'InternalSID' => $internalSID1, 'SID' => $specimenID1, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => $test['result'], 'SampleType' => 'Whole Blood', 'ResultDateTime' => date('Y-m-d H:i:s', strtotime('-1 day +8 hours')), 'CreateDate' => date('Y-m-d H:i:s', strtotime('-1 day +8 hours')) ]); } } echo " Created " . count($cbcTests) . " CBC results\n"; // Create order status $this->createOrderStatus($internalOID1, 'ORDERED', $twoDaysAgo); $this->createOrderStatus($internalOID1, 'SPECIMEN_COLLECTED', date('Y-m-d H:i:s', strtotime('-2 days +30 minutes'))); $this->createOrderStatus($internalOID1, 'IN_LAB', date('Y-m-d H:i:s', strtotime('-2 days +2 hours'))); $this->createOrderStatus($internalOID1, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +8 hours'))); $this->createOrderStatus($internalOID1, 'REPORTED', date('Y-m-d H:i:s', strtotime('-1 day +9 hours'))); // Create order comment $this->createOrderComment($internalOID1, 'Routine CBC ordered for annual checkup', $twoDaysAgo); // ======================================== // ORDER 2: Patient 2 - Lipid Profile + Liver Function // ======================================== $orderID2 = '001' . date('ymd', strtotime('-1 day')) . '00002'; $internalOID2 = $this->createOrder([ 'OrderID' => $orderID2, 'PlacerID' => 'PLC002', 'InternalPID' => 2, 'SiteID' => '1', 'PVADTID' => 3, 'ReqApp' => 'HIS', 'Priority' => 'R', 'TrnDate' => $yesterday, 'EffDate' => $yesterday, 'CreateDate' => $yesterday ]); echo "\nCreated Order 2: {$orderID2} (InternalOID: {$internalOID2})\n"; // Create specimen for Lipid/Liver (SST tube - ConDefID = 1) $specimenID2 = $orderID2 . '-S01'; $internalSID2 = $this->createSpecimen([ 'SID' => $specimenID2, 'SiteID' => '1', 'OrderID' => $internalOID2, 'ConDefID' => 1, 'Qty' => 1, 'Unit' => 'tube', 'GenerateBy' => 'ORDER', 'CreateDate' => $yesterday ]); $this->createSpecimenStatus($specimenID2, $internalOID2, 'PENDING', $yesterday); $this->createSpecimenStatus($specimenID2, $internalOID2, 'COLLECTED', date('Y-m-d H:i:s', strtotime('-1 day +30 minutes'))); $this->createSpecimenStatus($specimenID2, $internalOID2, 'RECEIVED', date('Y-m-d H:i:s', strtotime('-1 day +2 hours'))); $this->createSpecimenStatus($specimenID2, $internalOID2, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +6 hours'))); echo " Created Specimen: {$specimenID2} (SST)\n"; // Create Lipid Profile results $lipidTests = [ ['code' => 'CHOL', 'result' => '195'], ['code' => 'TG', 'result' => '145'], ['code' => 'HDL', 'result' => '55'], ['code' => 'LDL', 'result' => '115'], ]; foreach ($lipidTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID2, 'InternalSID' => $internalSID2, 'SID' => $specimenID2, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => $test['result'], 'SampleType' => 'Serum', 'ResultDateTime' => date('Y-m-d H:i:s', strtotime('-1 day +6 hours')), 'CreateDate' => date('Y-m-d H:i:s', strtotime('-1 day +6 hours')) ]); } } // Create Liver Function results $liverTests = [ ['code' => 'SGOT', 'result' => '28'], ['code' => 'SGPT', 'result' => '32'], ]; foreach ($liverTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID2, 'InternalSID' => $internalSID2, 'SID' => $specimenID2, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => $test['result'], 'SampleType' => 'Serum', 'ResultDateTime' => date('Y-m-d H:i:s', strtotime('-1 day +6 hours')), 'CreateDate' => date('Y-m-d H:i:s', strtotime('-1 day +6 hours')) ]); } } echo " Created " . (count($lipidTests) + count($liverTests)) . " chemistry results\n"; // Create order status $this->createOrderStatus($internalOID2, 'ORDERED', $yesterday); $this->createOrderStatus($internalOID2, 'SPECIMEN_COLLECTED', date('Y-m-d H:i:s', strtotime('-1 day +30 minutes'))); $this->createOrderStatus($internalOID2, 'IN_LAB', date('Y-m-d H:i:s', strtotime('-1 day +2 hours'))); $this->createOrderStatus($internalOID2, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +6 hours'))); // ======================================== // ORDER 3: Patient 3 - Renal Function + Glucose (URGENT) // ======================================== $orderID3 = '001' . date('ymd', strtotime('-1 day')) . '00003'; $internalOID3 = $this->createOrder([ 'OrderID' => $orderID3, 'PlacerID' => 'PLC003', 'InternalPID' => 3, 'SiteID' => '1', 'PVADTID' => 4, 'ReqApp' => 'EMR', 'Priority' => 'U', 'TrnDate' => $yesterday, 'EffDate' => $yesterday, 'CreateDate' => $yesterday ]); echo "\nCreated Order 3: {$orderID3} (InternalOID: {$internalOID3}) [URGENT]\n"; // Create specimen for Renal/Glucose (SST tube) $specimenID3 = $orderID3 . '-S01'; $internalSID3 = $this->createSpecimen([ 'SID' => $specimenID3, 'SiteID' => '1', 'OrderID' => $internalOID3, 'ConDefID' => 1, 'Qty' => 1, 'Unit' => 'tube', 'GenerateBy' => 'ORDER', 'CreateDate' => $yesterday ]); $this->createSpecimenStatus($specimenID3, $internalOID3, 'PENDING', $yesterday); $this->createSpecimenStatus($specimenID3, $internalOID3, 'COLLECTED', date('Y-m-d H:i:s', strtotime('-1 day +20 minutes'))); $this->createSpecimenStatus($specimenID3, $internalOID3, 'RECEIVED', date('Y-m-d H:i:s', strtotime('-1 day +30 minutes'))); $this->createSpecimenStatus($specimenID3, $internalOID3, 'PROCESSING', date('Y-m-d H:i:s', strtotime('-1 day +45 minutes'))); $this->createSpecimenStatus($specimenID3, $internalOID3, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +2 hours'))); echo " Created Specimen: {$specimenID3} (SST)\n"; // Create Renal Function results $renalTests = [ ['code' => 'CREA', 'result' => '1.1'], ['code' => 'UREA', 'result' => '18'], ]; foreach ($renalTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID3, 'InternalSID' => $internalSID3, 'SID' => $specimenID3, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => $test['result'], 'SampleType' => 'Serum', 'ResultDateTime' => date('Y-m-d H:i:s', strtotime('-1 day +2 hours')), 'CreateDate' => date('Y-m-d H:i:s', strtotime('-1 day +2 hours')) ]); } } // Create Glucose result if (isset($testIDs['GLU'])) { $this->createPatRes([ 'OrderID' => $internalOID3, 'InternalSID' => $internalSID3, 'SID' => $specimenID3, 'TestSiteID' => $testIDs['GLU'], 'TestSiteCode' => 'GLU', 'Result' => '95', 'SampleType' => 'Serum', 'ResultDateTime' => date('Y-m-d H:i:s', strtotime('-1 day +2 hours')), 'CreateDate' => date('Y-m-d H:i:s', strtotime('-1 day +2 hours')) ]); } echo " Created " . (count($renalTests) + 1) . " urgent chemistry results\n"; // Create order status (fast-tracked for urgent) $this->createOrderStatus($internalOID3, 'ORDERED', $yesterday); $this->createOrderStatus($internalOID3, 'SPECIMEN_COLLECTED', date('Y-m-d H:i:s', strtotime('-1 day +20 minutes'))); $this->createOrderStatus($internalOID3, 'IN_LAB', date('Y-m-d H:i:s', strtotime('-1 day +30 minutes'))); $this->createOrderStatus($internalOID3, 'COMPLETED', date('Y-m-d H:i:s', strtotime('-1 day +2 hours'))); $this->createOrderStatus($internalOID3, 'REPORTED', date('Y-m-d H:i:s', strtotime('-1 day +2 hours +15 minutes'))); // Create order comment $this->createOrderComment($internalOID3, 'STAT order for suspected kidney dysfunction. Patient has diabetes history.', $yesterday); // ======================================== // ORDER 4: Patient 1 - Urinalysis (PENDING) // ======================================== $orderID4 = '001' . date('ymd') . '00004'; $internalOID4 = $this->createOrder([ 'OrderID' => $orderID4, 'PlacerID' => 'PLC004', 'InternalPID' => 1, 'SiteID' => '1', 'PVADTID' => 2, 'ReqApp' => 'HIS', 'Priority' => 'R', 'TrnDate' => $now, 'EffDate' => $now, 'CreateDate' => $now ]); echo "\nCreated Order 4: {$orderID4} (InternalOID: {$internalOID4})\n"; // Create urine specimen (Pot Urin - ConDefID = 12) $specimenID4 = $orderID4 . '-S01'; $internalSID4 = $this->createSpecimen([ 'SID' => $specimenID4, 'SiteID' => '1', 'OrderID' => $internalOID4, 'ConDefID' => 12, 'Qty' => 1, 'Unit' => 'container', 'GenerateBy' => 'ORDER', 'CreateDate' => $now ]); $this->createSpecimenStatus($specimenID4, $internalOID4, 'PENDING', $now); echo " Created Specimen: {$specimenID4} (Urine)\n"; // Create Urinalysis results (pending - use current time for ResultDateTime) $urineTests = [ ['code' => 'UCOLOR'], ['code' => 'UGLUC'], ['code' => 'UPROT'], ['code' => 'PH'], ]; foreach ($urineTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID4, 'InternalSID' => $internalSID4, 'SID' => $specimenID4, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => null, 'SampleType' => 'Urine', 'ResultDateTime' => $now, 'CreateDate' => $now ]); } } echo " Created " . count($urineTests) . " pending urinalysis results\n"; // Create order status $this->createOrderStatus($internalOID4, 'ORDERED', $now); // ======================================== // ORDER 5: Patient 3 - Multiple tubes (CBC + Chemistry) // ======================================== $orderID5 = '001' . date('ymd') . '00005'; $internalOID5 = $this->createOrder([ 'OrderID' => $orderID5, 'PlacerID' => 'PLC005', 'InternalPID' => 3, 'SiteID' => '1', 'PVADTID' => 4, 'ReqApp' => 'HIS', 'Priority' => 'R', 'TrnDate' => $now, 'EffDate' => $now, 'CreateDate' => $now ]); echo "\nCreated Order 5: {$orderID5} (InternalOID: {$internalOID5}) [Multi-container]\n"; // Create EDTA specimen for CBC $specimenID5a = $orderID5 . '-S01'; $internalSID5a = $this->createSpecimen([ 'SID' => $specimenID5a, 'SiteID' => '1', 'OrderID' => $internalOID5, 'ConDefID' => 9, 'Qty' => 1, 'Unit' => 'tube', 'GenerateBy' => 'ORDER', 'CreateDate' => $now ]); $this->createSpecimenStatus($specimenID5a, $internalOID5, 'PENDING', $now); echo " Created Specimen: {$specimenID5a} (EDTA)\n"; // Create SST specimen for Chemistry $specimenID5b = $orderID5 . '-S02'; $internalSID5b = $this->createSpecimen([ 'SID' => $specimenID5b, 'SiteID' => '1', 'OrderID' => $internalOID5, 'ConDefID' => 1, 'Qty' => 1, 'Unit' => 'tube', 'GenerateBy' => 'ORDER', 'CreateDate' => $now ]); $this->createSpecimenStatus($specimenID5b, $internalOID5, 'PENDING', $now); echo " Created Specimen: {$specimenID5b} (SST)\n"; // Create pending results for CBC foreach ($cbcTests as $test) { if (isset($testIDs[$test['code']])) { $this->createPatRes([ 'OrderID' => $internalOID5, 'InternalSID' => $internalSID5a, 'SID' => $specimenID5a, 'TestSiteID' => $testIDs[$test['code']], 'TestSiteCode' => $test['code'], 'Result' => null, 'SampleType' => 'Whole Blood', 'ResultDateTime' => $now, 'CreateDate' => $now ]); } } // Create pending results for Chemistry $chemTests = ['GLU', 'CREA', 'UREA', 'SGOT', 'SGPT']; foreach ($chemTests as $testCode) { if (isset($testIDs[$testCode])) { $this->createPatRes([ 'OrderID' => $internalOID5, 'InternalSID' => $internalSID5b, 'SID' => $specimenID5b, 'TestSiteID' => $testIDs[$testCode], 'TestSiteCode' => $testCode, 'Result' => null, 'SampleType' => 'Serum', 'ResultDateTime' => $now, 'CreateDate' => $now ]); } } echo " Created " . (count($cbcTests) + count($chemTests)) . " pending results\n"; // Create order status $this->createOrderStatus($internalOID5, 'ORDERED', $now); // ======================================== // SUMMARY // ======================================== echo "\n"; echo "========================================\n"; echo "ORDER SEEDING COMPLETED SUCCESSFULLY!\n"; echo "========================================\n"; echo "Orders Created: 5\n"; echo " - Order 1: CBC (Complete Blood Count) - COMPLETED\n"; echo " - Order 2: Lipid + Liver Profile - COMPLETED\n"; echo " - Order 3: Renal + Glucose - COMPLETED (URGENT)\n"; echo " - Order 4: Urinalysis - PENDING\n"; echo " - Order 5: CBC + Chemistry - PENDING (Multi-container)\n"; echo "----------------------------------------\n"; echo "Specimens Created: 6\n"; echo " - SST tubes: 4\n"; echo " - EDTA tubes: 2\n"; echo " - Urine containers: 1\n"; echo "----------------------------------------\n"; echo "Patient Results: 29 total\n"; echo " - With results: 16\n"; echo " - Pending: 13\n"; echo "========================================\n"; } private function getTestIDs(): array { $tests = $this->db->table('testdefsite') ->select('TestSiteID, TestSiteCode') ->where('EndDate IS NULL') ->get() ->getResultArray(); $testIDs = []; foreach ($tests as $test) { $testIDs[$test['TestSiteCode']] = $test['TestSiteID']; } return $testIDs; } private function createOrder(array $data): int { $this->db->table('ordertest')->insert($data); return $this->db->insertID(); } private function createSpecimen(array $data): int { $this->db->table('specimen')->insert($data); return $this->db->insertID(); } private function createSpecimenStatus(string $specimenID, int $orderID, string $status, string $dateTime): void { $this->db->table('specimenstatus')->insert([ 'SID' => $specimenID, 'OrderID' => $orderID, 'SpcStatus' => $status, 'CreateDate' => $dateTime ]); } private function createPatRes(array $data): void { $this->db->table('patres')->insert($data); } private function createOrderStatus(int $orderID, string $status, string $dateTime): void { $this->db->table('orderstatus')->insert([ 'InternalOID' => $orderID, 'OrderStatus' => $status, 'CreateDate' => $dateTime ]); } private function createOrderComment(int $orderID, string $comment, string $dateTime): void { $this->db->table('ordercom')->insert([ 'InternalOID' => $orderID, 'Comment' => $comment, 'CreateDate' => $dateTime ]); } }