259 lines
7.8 KiB
Markdown
259 lines
7.8 KiB
Markdown
# 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
|