Update seeders and models, remove MinimalMasterDataSeeder, update API docs

This commit is contained in:
mahdahar 2026-02-13 16:51:24 +07:00
parent 5085b8270f
commit f30755c830
6 changed files with 33 additions and 123 deletions

View File

@ -13,20 +13,20 @@ class SpecimenSeeder extends Seeder {
// containerdef
$data = [
['ConCode' => '1', 'ConName' => 'SST', 'ConDesc' => 'Evacuated blood collection tube, gel separator', 'Additive' => "66", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '11', 'ConName' => 'Plain', 'ConDesc' => 'Evacuated blood collection tube, no additive/metal-free', 'Additive' => "67", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '12', 'ConName' => '2Hr PP', 'ConDesc' => 'Evacuated blood collection tube, untuk Glukosa 2 Jam PP', 'Additive' => "68", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '13', 'ConName' => 'Glukosa Sewaktu', 'ConDesc' => 'Evacuated blood collection tube, untuk Glukosa Sewaktu', 'Additive' => "69", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '14', 'ConName' => 'GTT 30 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 30 menit', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '15', 'ConName' => 'GTT 60 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 60 menit', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '16', 'ConName' => 'GTT 120 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 90 menit', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '20', 'ConName' => 'RST', 'ConDesc' => 'Evacuated blood collection tube, thrombin/clot activator/gel separator', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '101', 'ConName' => 'EDTA - Hematologi', 'ConDesc' => 'Evacuated blood collection tube, K2EDTA/aprotinin', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '150', 'ConName' => 'Citrate - Koagulasi', 'ConDesc' => 'Evacuated blood collection tube, untuk koagulasi', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '200', 'ConName' => 'Aliquot', 'ConDesc' => 'General specimen container, no additive, non-sterile. Untuk aliquot', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '290', 'ConName' => 'Pot Urin', 'ConDesc' => 'Non-sterile urine specimen container IVD', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '295', 'ConName' => 'Urine Container', 'ConDesc' => 'Urine specimen container', 'Additive' => "71", 'ConClass' => '80', 'CreateDate' => "$now"],
['ConCode' => '900', 'ConName' => 'Packing Pengiriman', 'ConDesc' => 'Specimen Transport Packaging', 'Additive' => "71", 'ConClass' => '81', 'CreateDate' => "$now"],
['ConCode' => '1', 'ConName' => 'SST', 'ConDesc' => 'Evacuated blood collection tube, gel separator', 'Additive' => "Hep", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '11', 'ConName' => 'Plain', 'ConDesc' => 'Evacuated blood collection tube, no additive/metal-free', 'Additive' => "EDTA", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '12', 'ConName' => '2Hr PP', 'ConDesc' => 'Evacuated blood collection tube, untuk Glukosa 2 Jam PP', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '13', 'ConName' => 'Glukosa Sewaktu', 'ConDesc' => 'Evacuated blood collection tube, untuk Glukosa Sewaktu', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '14', 'ConName' => 'GTT 30 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 30 menit', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '15', 'ConName' => 'GTT 60 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 60 menit', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '16', 'ConName' => 'GTT 120 menit', 'ConDesc' => 'Evacuated blood collection tube, untuk GTT 90 menit', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '20', 'ConName' => 'RST', 'ConDesc' => 'Evacuated blood collection tube, thrombin/clot activator/gel separator', 'Additive' => "NaF", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '101', 'ConName' => 'EDTA - Hematologi', 'ConDesc' => 'Evacuated blood collection tube, K2EDTA/aprotinin', 'Additive' => "NaCtrt", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '150', 'ConName' => 'Citrate - Koagulasi', 'ConDesc' => 'Evacuated blood collection tube, untuk koagulasi', 'Additive' => "NaCtrt", 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '200', 'ConName' => 'Aliquot', 'ConDesc' => 'General specimen container, no additive, non-sterile. Untuk aliquot', 'Additive' => null, 'ConClass' => 'Sec', 'CreateDate' => "$now"],
['ConCode' => '290', 'ConName' => 'Pot Urin', 'ConDesc' => 'Non-sterile urine specimen container IVD', 'Additive' => null, 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '295', 'ConName' => 'Urine Container', 'ConDesc' => 'Urine specimen container', 'Additive' => null, 'ConClass' => 'Pri', 'CreateDate' => "$now"],
['ConCode' => '900', 'ConName' => 'Packing Pengiriman', 'ConDesc' => 'Specimen Transport Packaging', 'Additive' => null, 'ConClass' => 'Sec', 'CreateDate' => "$now"],
];
$this->db->table('containerdef')->insertBatch($data);

View File

@ -27,7 +27,7 @@ class LocationModel extends BaseModel {
public function getLocation($LocationID) {
$row = $this->select("location.*, la.Street1, la.Street2, la.PostCode, la.GeoLocationSystem, la.GeoLocationData,
prop.AreaGeoID as ProvinceID, prop.AreaName as Province, city.AreaGeoID as CityID, city.AreaName as City, site.SiteID, site.SiteName")
la.Province as Province, prop.AreaName as ProvinceLabel, la.City as City, city.AreaName as CityLabel, site.SiteID, site.SiteName")
->join("locationaddress la", "location.LocationID=la.LocationID", "left")
->join("areageo prop", "la.Province=prop.AreaGeoID", "left")
->join("areageo city", "la.City=city.AreaGeoID", "left")

View File

@ -33,7 +33,7 @@ class AccountModel extends BaseModel {
public function getAccount($AccountID) {
$row = $this->select('account.*, pa.AccountName as ParentName, areageo.AreaName, areageo.AreaGeoID,
city.AreaName as CityName, city.AreaGeoID as City, prov.AreaName as ProvName, prov.AreaGeoID as Prov')
account.City as City, city.AreaName as CityLabel, account.Province as Province, prov.AreaName as ProvinceLabel')
->join('account pa', 'pa.AccountID=account.Parent', 'left')
->join('areageo', 'areageo.AreaCode=account.AreaCode', 'left')
->join('areageo city', 'city.AreaGeoID=account.City', 'left')

View File

@ -56,10 +56,10 @@ class PatientModel extends BaseModel {
patidt.IdentifierType,
patidt.Identifier,
patatt.Address,
areageo1.AreaGeoID as ProvinceID,
areageo1.AreaName as Province,
areageo2.AreaGeoID as CityID,
areageo2.AreaName as City
patient.Province as Province,
areageo1.AreaName as ProvinceLabel,
patient.City as City,
areageo2.AreaName as CityLabel
")
->join('patcom', 'patcom.InternalPID = patient.InternalPID', 'left')

View File

@ -281,14 +281,24 @@ components:
items:
$ref: '#/components/schemas/PatAttEntry'
Province:
type: integer
description: Province AreaGeoID (foreign key to areageo table)
ProvinceLabel:
type: string
description: Province area code
description: Province name (resolved from areageo)
City:
type: integer
description: City AreaGeoID (foreign key to areageo table)
CityLabel:
type: string
description: City area code
description: City name (resolved from areageo)
Country:
type: string
maxLength: 100
maxLength: 10
description: Country ISO 3-letter code (e.g., IDN, USA)
CountryLabel:
type: string
description: Country name (resolved from valueset)
Race:
type: string
maxLength: 100

View File

@ -1,100 +0,0 @@
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class MinimalMasterDataSeeder extends Seeder {
public function run() {
$db = \Config\Database::connect();
$orderStatuses = [
['VID' => 1, 'VSetID' => 11, 'VValue' => 'ORD', 'VDesc' => 'Ordered', 'VOrder' => 1],
['VID' => 2, 'VSetID' => 11, 'VValue' => 'SCH', 'VDesc' => 'Scheduled', 'VOrder' => 2],
['VID' => 3, 'VSetID' => 11, 'VValue' => 'ANA', 'VDesc' => 'Analysis', 'VOrder' => 3],
['VID' => 4, 'VSetID' => 11, 'VValue' => 'VER', 'VDesc' => 'Verified', 'VOrder' => 4],
['VID' => 5, 'VSetID' => 11, 'VValue' => 'REV', 'VDesc' => 'Reviewed', 'VOrder' => 5],
['VID' => 6, 'VSetID' => 11, 'VValue' => 'REP', 'VDesc' => 'Reported', 'VOrder' => 6],
];
$priorities = [
['VID' => 1, 'VSetID' => 10, 'VValue' => 'S', 'VDesc' => 'Stat', 'VOrder' => 1],
['VID' => 2, 'VSetID' => 10, 'VValue' => 'A', 'VDesc' => 'ASAP', 'VOrder' => 2],
['VID' => 3, 'VSetID' => 10, 'VValue' => 'R', 'VDesc' => 'Routine', 'VOrder' => 3],
['VID' => 4, 'VSetID' => 10, 'VValue' => 'P', 'VDesc' => 'Preop', 'VOrder' => 4],
];
$specimenTypes = [
['VID' => 1, 'VSetID' => 29, 'VValue' => 'BLD', 'VDesc' => 'Blood', 'VOrder' => 1],
['VID' => 2, 'VSetID' => 29, 'VValue' => 'SER', 'VDesc' => 'Serum', 'VOrder' => 2],
['VID' => 3, 'VSetID' => 29, 'VValue' => 'PLAS', 'VDesc' => 'Plasma', 'VOrder' => 3],
['VID' => 4, 'VSetID' => 29, 'VValue' => 'UR', 'VDesc' => 'Urine', 'VOrder' => 4],
['VID' => 5, 'VSetID' => 29, 'VValue' => 'CSF', 'VDesc' => 'Cerebrospinal Fluid', 'VOrder' => 5],
];
$testTypes = [
['VID' => 1, 'VSetID' => 27, 'VValue' => 'TEST', 'VDesc' => 'Test', 'VOrder' => 1],
['VID' => 2, 'VSetID' => 27, 'VValue' => 'PARAM', 'VDesc' => 'Parameter', 'VOrder' => 2],
['VID' => 3, 'VSetID' => 27, 'VValue' => 'CALC', 'VDesc' => 'Calculated Test', 'VOrder' => 3],
['VID' => 4, 'VSetID' => 27, 'VValue' => 'GROUP', 'VDesc' => 'Group Test', 'VOrder' => 4],
['VID' => 5, 'VSetID' => 27, 'VValue' => 'TITLE', 'VDesc' => 'Title', 'VOrder' => 5],
];
$genders = [
['VID' => 1, 'VSetID' => 3, 'VValue' => '1', 'VDesc' => 'Female', 'VOrder' => 1],
['VID' => 2, 'VSetID' => 3, 'VValue' => '2', 'VDesc' => 'Male', 'VOrder' => 2],
['VID' => 3, 'VSetID' => 3, 'VValue' => '3', 'VDesc' => 'Unknown', 'VOrder' => 3],
];
foreach ($orderStatuses as $row) {
$exists = $db->table('valueset')->where('VSetID', $row['VSetID'])->where('VValue', $row['VValue'])->get()->getRow();
if (!$exists) {
$db->table('valueset')->insert($row);
}
}
foreach ($priorities as $row) {
$exists = $db->table('valueset')->where('VSetID', $row['VSetID'])->where('VValue', $row['VValue'])->get()->getRow();
if (!$exists) {
$db->table('valueset')->insert($row);
}
}
foreach ($specimenTypes as $row) {
$exists = $db->table('valueset')->where('VSetID', $row['VSetID'])->where('VValue', $row['VValue'])->get()->getRow();
if (!$exists) {
$db->table('valueset')->insert($row);
}
}
foreach ($testTypes as $row) {
$exists = $db->table('valueset')->where('VSetID', $row['VSetID'])->where('VValue', $row['VValue'])->get()->getRow();
if (!$exists) {
$db->table('valueset')->insert($row);
}
}
foreach ($genders as $row) {
$exists = $db->table('valueset')->where('VSetID', $row['VSetID'])->where('VValue', $row['VValue'])->get()->getRow();
if (!$exists) {
$db->table('valueset')->insert($row);
}
}
$counterExists = $db->table('counter')->where('CounterName', 'ORDER')->get()->getRow();
if (!$counterExists) {
$db->table('counter')->insert(['CounterName' => 'ORDER', 'CounterValue' => 1]);
}
$siteExists = $db->table('site')->where('SiteCode', '00')->get()->getRow();
if (!$siteExists) {
$db->table('site')->insert([
'SiteCode' => '00',
'SiteName' => 'Main Laboratory',
'SiteType' => 'PHL',
'CreateDate' => date('Y-m-d H:i:s')
]);
}
echo "Minimal master data seeded successfully.\n";
}
}