From 16dfb435307546696a5936595c35c02aa9026fb4 Mon Sep 17 00:00:00 2001 From: khantey1998 Date: Wed, 4 Mar 2026 09:38:30 +0700 Subject: [PATCH] feat: more seed data --- dashboard/database/seeders/DatabaseSeeder.php | 7 +- .../LongitudinalSurveillanceSeeder.php | 83 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 dashboard/database/seeders/LongitudinalSurveillanceSeeder.php diff --git a/dashboard/database/seeders/DatabaseSeeder.php b/dashboard/database/seeders/DatabaseSeeder.php index e844670..3171ac6 100644 --- a/dashboard/database/seeders/DatabaseSeeder.php +++ b/dashboard/database/seeders/DatabaseSeeder.php @@ -11,6 +11,11 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - $this->call(SurveillanceDataSeeder::class); + $this->call( + [ + SurveillanceSeeder::class, + LongitudinalSurveillanceSeeder::class, + ] + ); } } diff --git a/dashboard/database/seeders/LongitudinalSurveillanceSeeder.php b/dashboard/database/seeders/LongitudinalSurveillanceSeeder.php new file mode 100644 index 0000000..9877230 --- /dev/null +++ b/dashboard/database/seeders/LongitudinalSurveillanceSeeder.php @@ -0,0 +1,83 @@ +copy(); + + while ($current <= $end) { + + foreach ($surveillances as $surveillance) { + + // seasonal influenza peak (Nov–Feb) + $month = $current->month; + $seasonFactor = in_array($month, [11, 12, 1, 2]) ? 1.5 : 1; + + // covid surge 2020–2022 + $covidFactor = ($current->year <= 2022) ? 1.8 : 1; + + $baseCases = rand(5, 15); + $weeklyCases = (int) ($baseCases * $seasonFactor * $covidFactor); + + for ($i = 0; $i < $weeklyCases; $i++) { + + $labCode = strtoupper($surveillance->code) . + '-' . $current->format('Y') . + '-' . uniqid(); + + DB::table('analytic.surveillance_cases')->insert([ + 'lab_code' => $labCode, + 'is_newcase' => 1, + 'sentinel_site_name' => 'Sentinel A', + 'site_province_name' => $provinces[array_rand($provinces)], + 'surveillance_id' => $surveillance->id, + 'year_data' => $current->year, + 'week_data' => $current->week, + 'case_date' => $current->copy(), + 'patient_age_inday' => rand(100, 25000), + 'patient_sex' => rand(0, 1) ? 'M' : 'F', + 'is_alive' => rand(0, 10) > 1 ? 1 : 0, + 'patient_privince' => $provinces[array_rand($provinces)] + ]); + + $pathogen = rand(0, 1) + ? 'Influenza A' + : 'SARS-CoV-2'; + + $isPositive = rand(0, 100) < 35 ? 1 : 0; + + DB::table('analytic.case_lab_results')->insert([ + 'lab_code' => $labCode, + 'is_positive' => $isPositive, + 'pathogen_name' => $pathogen, + 'subtype' => null, + 'indicator' => null + ]); + } + } + + $current->addWeek(); + } + } +} \ No newline at end of file