Files
ChatbotAI/database/seeders/KnowledgeItemSeeder.php
2026-05-18 08:56:23 +08:00

157 lines
8.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace Database\Seeders;
use App\Models\Category;
use App\Models\KnowledgeItem;
use Illuminate\Database\Seeder;
class KnowledgeItemSeeder extends Seeder
{
/**
* Sample FAQ untuk development dan demo awal.
* Data ini bukan fakta sebenar — untuk tujuan ujian sahaja.
*/
public function run(): void
{
$items = [
// ── Pelesenan ─────────────────────────────────────────────────
[
'category_slug' => 'pelesenan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah dokumen yang diperlukan untuk memohon lesen perniagaan baru?',
'content' => "Untuk memohon lesen perniagaan baru, pemohon perlu menyediakan dokumen berikut:\n\n" .
"1. Salinan kad pengenalan pemohon (MyKad)\n" .
"2. Borang permohonan yang telah dilengkapkan\n" .
"3. Salinan geran tanah atau perjanjian sewaan premis\n" .
"4. Pelan lantai premis perniagaan\n" .
"5. Sijil pendaftaran perniagaan (SSM)\n" .
"6. Gambar premis dari dalam dan luar\n\n" .
"Sila hubungi Bahagian Pelesenan untuk maklumat lanjut.",
'tags' => ['lesen', 'perniagaan', 'permohonan', 'dokumen'],
'is_active' => true,
],
[
'category_slug' => 'pelesenan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Berapa lama masa yang diperlukan untuk kelulusan lesen perniagaan?',
'content' => "Proses kelulusan lesen perniagaan biasanya mengambil masa 14 hingga 30 hari bekerja " .
"bergantung kepada jenis lesen dan kelengkapan dokumen yang dikemukakan.\n\n" .
"Pemohon boleh semak status permohonan melalui kaunter Bahagian Pelesenan atau " .
"menghubungi talian hotline kami.",
'tags' => ['lesen', 'tempoh', 'kelulusan'],
'is_active' => true,
],
// ── Cukai ─────────────────────────────────────────────────────
[
'category_slug' => 'cukai',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bila tarikh akhir pembayaran cukai taksiran?',
'content' => "Cukai taksiran perlu dibayar dalam dua penggal:\n\n" .
"• Penggal pertama: 28 Februari setiap tahun\n" .
"• Penggal kedua: 31 Ogos setiap tahun\n\n" .
"Bayaran lewat akan dikenakan denda atau caj penalti. " .
"Pembayaran boleh dibuat di kaunter, atas talian, atau melalui bank.",
'tags' => ['cukai', 'taksiran', 'tarikh', 'bayaran'],
'is_active' => true,
],
// ── WiFi Johor ────────────────────────────────────────────────
[
'category_slug' => 'wifi-johor',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bagaimana cara untuk sambung ke WiFi Johor?',
'content' => "Cara menyambung ke WiFi Johor:\n\n" .
"1. Hidupkan WiFi pada peranti anda\n" .
"2. Pilih rangkaian 'WiFi Johor' atau 'WiFiJohor'\n" .
"3. Buka pelayar web — halaman log masuk akan muncul\n" .
"4. Daftar menggunakan nombor telefon atau e-mel\n" .
"5. Masukkan OTP yang diterima\n" .
"6. Anda kini boleh menggunakan internet percuma\n\n" .
"WiFi Johor tersedia di taman awam, perpustakaan, dan bangunan kerajaan terpilih.",
'tags' => ['wifi', 'johor', 'internet', 'sambung'],
'is_active' => true,
],
// ── Penguatkuasaan ────────────────────────────────────────────
[
'category_slug' => 'penguatkuasaan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bagaimana cara untuk membuat aduan berkaitan penguatkuasaan?',
'content' => "Aduan berkaitan penguatkuasaan boleh dibuat melalui cara berikut:\n\n" .
"1. Kaunter aduan di Jabatan Penguatkuasaan\n" .
"2. Hotline: 07-XXX XXXX (Isnin-Jumaat, 8pagi-5ptg)\n" .
"3. E-mel: penguatkuasaan@majlis.gov.my\n" .
"4. Sistem aduan atas talian\n\n" .
"Sertakan maklumat berikut dalam aduan:\n" .
"• Nama dan nombor telefon pengadu\n" .
"• Lokasi kejadian\n" .
"• Tarikh dan masa kejadian\n" .
"• Penerangan ringkas masalah",
'tags' => ['aduan', 'penguatkuasaan', 'prosedur'],
'is_active' => true,
],
// ── Sewaan Gerai ──────────────────────────────────────────────
[
'category_slug' => 'sewaan-gerai-majlis',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah syarat untuk menyewa gerai majlis?',
'content' => "Syarat-syarat untuk menyewa gerai majlis:\n\n" .
"1. Pemohon mestilah warganegara Malaysia\n" .
"2. Berumur 18 tahun ke atas\n" .
"3. Tiada tunggakan dengan pihak majlis\n" .
"4. Mempunyai lesen perniagaan yang sah (jika berniaga)\n" .
"5. Menandatangani perjanjian sewaan\n\n" .
"Kadar sewa bergantung kepada lokasi dan jenis gerai. " .
"Sila rujuk jadual kadar sewa yang terkini di kaunter.",
'tags' => ['gerai', 'sewa', 'syarat', 'permohonan'],
'is_active' => true,
],
// ── Lain-lain ─────────────────────────────────────────────────
[
'category_slug' => 'lain-lain',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah waktu operasi pejabat majlis?',
'content' => "Waktu operasi pejabat majlis adalah seperti berikut:\n\n" .
"• Isnin Khamis: 8:00 pagi 5:00 petang\n" .
"• Jumaat: 8:00 pagi 12:00 tengah hari (tutup 12:15 2:45 ptg)\n" .
"• Sabtu, Ahad, dan Cuti Umum: Tutup\n\n" .
"Perkhidmatan kaunter ditutup 15 minit sebelum masa tutup pejabat.",
'tags' => ['waktu', 'operasi', 'pejabat', 'jadual'],
'is_active' => true,
],
];
$count = 0;
foreach ($items as $data) {
$slug = $data['category_slug'];
unset($data['category_slug']);
$category = Category::where('slug', $slug)->first();
if (!$category) {
$this->command->warn(" Kategori '{$slug}' tidak dijumpai. Skip.");
continue;
}
KnowledgeItem::updateOrCreate(
[
'category_id' => $category->id,
'title' => $data['title'],
],
array_merge($data, [
'category_id' => $category->id,
'language' => 'ms',
'is_public' => true,
])
);
$count++;
}
$this->command->info("{$count} knowledge items (sample FAQ) berjaya dibuat.");
}
}