where('TestSiteID', $testSiteID) ->where('EndDate', null) ->orderBy('Display', 'ASC') ->findAll(); } /** * Get formatted numeric reference ranges with labels * * @param int $testSiteID * @return array */ public function getFormattedByTestSiteID($testSiteID) { $rows = $this->getActiveByTestSiteID($testSiteID); return array_map(function ($r) { return [ 'RefNumID' => $r['RefNumID'], 'NumRefType' => $r['NumRefType'], 'NumRefTypeLabel' => $r['NumRefType'] ? \App\Libraries\ValueSet::getLabel('numeric_ref_type', $r['NumRefType']) : '', 'RangeType' => $r['RangeType'], 'RangeTypeLabel' => $r['RangeType'] ? \App\Libraries\ValueSet::getLabel('range_type', $r['RangeType']) : '', 'SpcType' => $r['SpcType'], 'Sex' => $r['Sex'], 'SexLabel' => $r['Sex'] ? \App\Libraries\ValueSet::getLabel('gender', $r['Sex']) : '', 'LowSign' => $r['LowSign'], 'LowSignLabel' => $r['LowSign'] ? \App\Libraries\ValueSet::getLabel('math_sign', $r['LowSign']) : '', 'HighSign' => $r['HighSign'], 'HighSignLabel' => $r['HighSign'] ? \App\Libraries\ValueSet::getLabel('math_sign', $r['HighSign']) : '', 'High' => $r['High'] !== null ? (float) $r['High'] : null, 'Low' => $r['Low'] !== null ? (float) $r['Low'] : null, 'AgeStart' => (int) $r['AgeStart'], 'AgeEnd' => (int) $r['AgeEnd'], 'Flag' => $r['Flag'], 'Interpretation' => $r['Interpretation'], 'Notes' => $r['Notes'], ]; }, $rows ?? []); } /** * Disable all numeric reference ranges for a test * * @param int $testSiteID * @return void */ public function disableByTestSiteID($testSiteID) { $this->where('TestSiteID', $testSiteID) ->set('EndDate', date('Y-m-d H:i:s')) ->update(); } /** * Batch insert numeric reference ranges * * @param int $testSiteID * @param int $siteID * @param array $ranges * @return void */ public function batchInsert($testSiteID, $siteID, $ranges) { foreach ($ranges as $index => $range) { $this->insert([ 'TestSiteID' => $testSiteID, 'SiteID' => $siteID, 'SpcType' => $range['SpcType'] ?? 'GEN', 'NumRefType' => $range['NumRefType'], 'RangeType' => $range['RangeType'], 'Sex' => $range['Sex'], 'AgeStart' => (int) ($range['AgeStart'] ?? 0), 'AgeEnd' => (int) ($range['AgeEnd'] ?? 150), 'LowSign' => !empty($range['LowSign']) ? $range['LowSign'] : null, 'Low' => !empty($range['Low']) ? (float) $range['Low'] : null, 'HighSign' => !empty($range['HighSign']) ? $range['HighSign'] : null, 'High' => !empty($range['High']) ? (float) $range['High'] : null, 'Flag' => $range['Flag'] ?? null, 'Interpretation'=> $range['Interpretation'] ?? null, 'Notes' => $range['Notes'] ?? null, 'Display' => $index, 'CreateDate' => date('Y-m-d H:i:s'), ]); } } }