# Training Model Documentation ## Overview Model Training adalah sistem manajemen pelatihan untuk petani yang mencakup pengelolaan konten, penjadwalan, undangan, dan tracking kehadiran. Sistem ini mendukung pelatihan individu maupun kelompok dengan dokumentasi lengkap. ## Core Purpose - **Content Management**: Mengelola materi dan konten pelatihan - **Scheduling**: Penjadwalan pelatihan dengan lokasi dan waktu - **Invitation System**: Sistem undangan untuk petani - **Attendance Tracking**: Pelacakan kehadiran dan partisipasi - **Documentation**: Penyimpanan foto, video, dan dokumen pelatihan ## Model Structure ### Training (Core Model) ``` id String @id @default(cuid()) title String // Judul pelatihan description String? // Deskripsi pelatihan content String? // Materi/konten pelatihan category String // Kategori: "Pest Control", "Organic Farming", dll duration Int? // Durasi dalam menit level String? // Level: "beginner", "intermediate", "advanced" prerequisites String? // Syarat untuk mengikuti pelatihan maxParticipants Int? // Batas maksimal peserta createdBy String? // ID admin yang membuat // Scheduling & Location scheduledDate DateTime? // Tanggal pelatihan startTime DateTime? // Waktu mulai endTime DateTime? // Waktu selesai locationType TrainingLocationType // Jenis lokasi pelatihan location String? // Nama lokasi locationAddress String? // Alamat lengkap locationGPS Json? // Koordinat GPS // Group Management batchName String? // Nama batch pelatihan targetGroup String? // Target peserta kelompokTaniIds String[] // ID kelompok tani isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ``` ### Training Location Types - **VILLAGE_HALL**: Balai desa - **FARM_FIELD**: Pelatihan di kebun/ladang - **FARMER_HOME**: Rumah petani - **COOPERATIVE**: Kantor koperasi - **GOVERNMENT_OFFICE**: Kantor pemerintah - **ONLINE**: Pelatihan virtual - **OTHER**: Lokasi lainnya ### Training Levels - **beginner**: Untuk petani pemula - **intermediate**: Petani dengan pengalaman menengah - **advanced**: Petani berpengalaman ### Popular Categories - Crop Management (Pengelolaan tanaman) - Pest Control (Pengendalian hama) - Financial Management (Manajemen keuangan) - Technology & Innovation (Teknologi pertanian) - Marketing & Business (Pemasaran) - Sustainable Agriculture (Pertanian berkelanjutan) ## Relationships ### 1. FarmerTraining (Many-to-Many) **Purpose**: Tracking enrollment dan progress petani dalam pelatihan ``` farmerId String // ID petani trainingId String // ID pelatihan status TrainingStatus // ENROLLED, IN_PROGRESS, COMPLETED, DROPPED progress Int @default(0) // Progress 0-100% score Float? // Nilai hasil pelatihan completedAt DateTime? // Tanggal selesai assignedBy String? // Admin yang menugaskan deadline DateTime? // Batas waktu penyelesaian ``` ### 2. TrainingInvitation (One-to-Many) **Purpose**: Sistem undangan untuk petani ``` trainingId String // ID pelatihan farmerId String // ID petani yang diundang invitedBy String? // Admin yang mengundang invitedAt DateTime // Waktu undangan dikirim message String? // Pesan khusus undangan responseStatus AttendanceStatus // INVITED, CONFIRMED, CANCELLED respondedAt DateTime? // Waktu respon petani reminderSent Boolean // Status pengingat ``` ### 3. TrainingAttendance (One-to-Many) **Purpose**: Pelacakan kehadiran real-time ``` trainingId String // ID pelatihan farmerId String // ID petani attendanceStatus AttendanceStatus // INVITED, CONFIRMED, ATTENDED, ABSENT checkInTime DateTime? // Waktu check-in checkOutTime DateTime? // Waktu check-out participationScore Float? // Nilai partisipasi 1-5 completedTasks Boolean // Status penyelesaian tugas feedback String? // Feedback petani ``` ### 4. TrainingDocument (One-to-Many) **Purpose**: Penyimpanan dokumentasi pelatihan ``` trainingId String // ID pelatihan title String // Judul dokumen fileUrl String // URL file fileName String // Nama file documentType String? // Type: "photo", "video", "certificate", "handout" category String? // Kategori: "documentation", "material", "evaluation" uploadedBy String? // ID pengunggah takenAt DateTime? // Waktu pengambilan foto/video gpsLocation Json? // Koordinat GPS isVerified Boolean // Status verifikasi isPublic Boolean // Akses publik ``` ## Business Rules ### Training Management 1. **Title dan category** wajib diisi 2. **maxParticipants** membatasi jumlah peserta 3. **prerequisites** harus dipenuhi sebelum enrollment 4. **isActive = false** menonaktifkan pelatihan ### Invitation System 1. Satu undangan per petani per pelatihan 2. Reminder dapat dikirim berkali-kali 3. Status response dapat diubah petani ### Attendance Tracking 1. Check-in/out hanya bisa dilakukan saat pelatihan aktif 2. Participation score 1-5 untuk evaluasi 3. Feedback wajib untuk completed attendance ### Documentation 1. File verification diperlukan untuk dokumen penting 2. GPS location otomatis tersimpan saat upload 3. Public access mengatur visibilitas dokumen ## Use Cases ### 1. Create Training Program ``` 1. Admin creates training dengan title, category, description 2. Set schedule (date, time, location) 3. Define target group dan max participants 4. Upload training materials 5. Activate training ``` ### 2. Invite Farmers ``` 1. Admin selects training program 2. Choose farmers atau farmer groups 3. Send bulk invitations 4. Track responses dan send reminders ``` ### 3. Conduct Training ``` 1. Admin starts training session 2. Check-in farmers attendance 3. Record participation scores 4. Upload documentation (photos, videos) 5. Check-out farmers ``` ### 4. Training Analytics ``` 1. View enrollment vs completion rates 2. Track farmer progress across trainings 3. Analyze popular categories 4. Generate attendance reports ``` ## Key Features ### Group Training Support - **Batch Management**: Pelatihan dapat dikelompokkan dalam batch - **Group Invitations**: Undangan massal untuk kelompok tani - **Location Management**: Fleksibilitas lokasi pelatihan ### Real-time Tracking - **Live Attendance**: Check-in/out real-time - **Progress Monitoring**: Tracking progress individual - **Instant Documentation**: Upload foto/video langsung ### Comprehensive Documentation - **Multi-media Support**: Foto, video, dokumen - **GPS Integration**: Lokasi otomatis tersimpan - **Verification System**: Kontrol kualitas dokumentasi ## Performance Optimization ### Database Indexes - Training: `category`, `level`, `scheduledDate`, `isActive` - FarmerTraining: `farmerId`, `trainingId`, `status`, `progress` - TrainingInvitation: `trainingId`, `farmerId`, `responseStatus` - TrainingAttendance: `trainingId`, `farmerId`, `attendanceStatus` - TrainingDocument: `trainingId`, `documentType`, `isVerified` ### Query Patterns - Filter by category dan level untuk discovery - Search by farmer untuk individual tracking - Date range queries untuk scheduling - Status-based filtering untuk monitoring ## Integration Points ### Internal Systems - **Farmer Management**: Enrollment dan progress tracking - **User Authentication**: Access control - **Notification System**: Alerts dan reminders - **File Management**: Document storage ### External Systems - **Cloud Storage**: Media file storage - **SMS/WhatsApp**: Invitation delivery - **GPS Services**: Location tracking - **Video Conferencing**: Online training support