diff --git a/app/Database/Seeds/SpecimenSeeder.php b/app/Database/Seeds/SpecimenSeeder.php index b034355..28fe12c 100644 --- a/app/Database/Seeds/SpecimenSeeder.php +++ b/app/Database/Seeds/SpecimenSeeder.php @@ -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); diff --git a/app/Models/Location/LocationModel.php b/app/Models/Location/LocationModel.php index e2dbadb..ea3f67c 100644 --- a/app/Models/Location/LocationModel.php +++ b/app/Models/Location/LocationModel.php @@ -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") diff --git a/app/Models/Organization/AccountModel.php b/app/Models/Organization/AccountModel.php index 24d1018..8adce97 100644 --- a/app/Models/Organization/AccountModel.php +++ b/app/Models/Organization/AccountModel.php @@ -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') diff --git a/app/Models/Patient/PatientModel.php b/app/Models/Patient/PatientModel.php index 95dc6a5..6b54590 100644 --- a/app/Models/Patient/PatientModel.php +++ b/app/Models/Patient/PatientModel.php @@ -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') diff --git a/public/api-docs.yaml b/public/api-docs.yaml index f8620f9..d3a11a5 100644 --- a/public/api-docs.yaml +++ b/public/api-docs.yaml @@ -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 diff --git a/seeds/MinimalMasterDataSeeder.php b/seeds/MinimalMasterDataSeeder.php deleted file mode 100644 index d05d287..0000000 --- a/seeds/MinimalMasterDataSeeder.php +++ /dev/null @@ -1,100 +0,0 @@ - 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"; - } -}