diff --git a/farm_model_documentation.md b/farm_model_documentation.md new file mode 100644 index 0000000..f7072b7 --- /dev/null +++ b/farm_model_documentation.md @@ -0,0 +1,420 @@ +# Farm Model Documentation + +## Overview +Model Farm adalah entitas inti dalam sistem manajemen lahan pertanian yang menyimpan informasi detail tentang lahan/kebun yang dikelola oleh petani. Model ini berfungsi sebagai pusat data geografis, karakteristik fisik, infrastruktur, dan metadata lahan pertanian dalam ekosistem Happy Farmer. + +## Business Context +Model Farm berfungsi sebagai: +- **Land Registry**: Registrasi dan dokumentasi lahan pertanian +- **Geographic Information System**: Penyimpanan data geografis dan pemetaan +- **Infrastructure Management**: Tracking fasilitas dan infrastruktur lahan +- **Production Planning**: Basis untuk perencanaan produksi dan budgeting +- **Asset Management**: Pengelolaan aset lahan sebagai investasi +- **Compliance Tracking**: Dokumentasi legal dan sertifikasi lahan + +## Model Structure + +### Primary Fields + +#### **Identification & Basic Info** +- **`id`** (String, Primary Key): Unique identifier menggunakan CUID +- **`farmerId`** (String, Foreign Key): Referensi ke petani pemilik/pengelola +- **`farmCode`** (String, Unique): Kode unik farm untuk identifikasi +- **`name`** (String, Required): Nama farm/kebun +- **`address`** (String, Optional): Alamat lengkap farm +- **`village`** (String, Optional): Desa/kelurahan lokasi farm +- **`district`** (String, Optional): Kecamatan lokasi farm +- **`province`** (String, Optional): Provinsi lokasi farm +- **`postalCode`** (String, Optional): Kode pos area farm + +#### **Geographic Data** +- **`area`** (Decimal, Optional): Luas lahan dalam hektar +- **`latitude`** (Float, Optional): Koordinat lintang +- **`longitude`** (Float, Optional): Koordinat bujur +- **`boundaries`** (JSON, Optional): Polygon boundaries dalam format GeoJSON +- **`elevation`** (Float, Optional): Ketinggian di atas permukaan laut (meter) + +#### **Soil & Environmental Characteristics** +- **`soilType`** (String, Optional): Jenis tanah (lempung, pasir, dll) +- **`soilPH`** (Float, Optional): Tingkat keasaman tanah (pH) +- **`waterSource`** (WaterSource Enum, Optional): Sumber air utama +- **`irrigationType`** (IrrigationType Enum, Optional): Sistem irigasi yang digunakan +- **`slope`** (SlopeType Enum, Optional): Tingkat kemiringan lahan +- **`climate`** (ClimateType Enum, Optional): Jenis iklim daerah + +#### **Infrastructure & Facilities** +- **`hasElectricity`** (Boolean, Default: false): Ketersediaan listrik +- **`hasWaterAccess`** (Boolean, Default: false): Akses air bersih +- **`hasStorageFacility`** (Boolean, Default: false): Fasilitas penyimpanan +- **`hasProcessingUnit`** (Boolean, Default: false): Unit pengolahan +- **`accessRoadType`** (RoadType Enum, Optional): Jenis akses jalan + +#### **Visual Documentation** +- **`mainPhotoUrl`** (String, Optional): URL foto utama farm +- **`aerialPhotoUrl`** (String, Optional): URL foto udara/drone +- **`soilPhotoUrl`** (String, Optional): URL foto sampel tanah + +#### **Legal & Ownership** +- **`ownershipType`** (FarmOwnership Enum, Optional): Status kepemilikan lahan +- **`landCertificateNumber`** (String, Optional): Nomor sertifikat tanah +- **`landCertificateUrl`** (String, Optional): URL dokumen sertifikat + +#### **Agricultural Information** +- **`establishedYear`** (Integer, Optional): Tahun pendirian/mulai dikelola +- **`totalInvestment`** (Decimal, Optional): Total investasi pada farm +- **`annualProduction`** (Decimal, Optional): Estimasi produksi tahunan (kg) +- **`mainCrops`** (String Array): Komoditas utama yang ditanam +- **`farmingSystem`** (FarmingSystem Enum, Optional): Sistem pertanian yang digunakan +- **`organicCertified`** (Boolean, Default: false): Status sertifikasi organik + +#### **Metadata** +- **`description`** (String, Optional): Deskripsi detail farm +- **`notes`** (String, Optional): Catatan tambahan +- **`isActive`** (Boolean, Default: true): Status aktif farm +- **`createdAt`** (DateTime, Default: now()): Tanggal pembuatan record +- **`updatedAt`** (DateTime, Auto-update): Tanggal terakhir diupdate + +## Enums Definition + +### WaterSource +- **RAIN_FED**: Mengandalkan air hujan +- **IRRIGATION_CANAL**: Saluran irigasi +- **WELL**: Sumur +- **RIVER**: Sungai +- **POND**: Kolam/embung +- **GROUNDWATER**: Air tanah +- **SPRING**: Mata air +- **MIXED**: Kombinasi sumber air + +### IrrigationType +- **FLOOD**: Irigasi banjir +- **SPRINKLER**: Sistem sprinkler +- **DRIP**: Irigasi tetes +- **FURROW**: Alur/parit +- **MANUAL**: Manual/tradisional +- **NONE**: Tidak ada irigasi + +### SlopeType +- **FLAT**: Datar +- **GENTLE**: Landai +- **MODERATE**: Sedang +- **STEEP**: Curam +- **VERY_STEEP**: Sangat curam + +### ClimateType +- **TROPICAL_WET**: Tropis basah +- **TROPICAL_DRY**: Tropis kering +- **SUBTROPICAL**: Subtropis +- **TEMPERATE**: Sedang +- **HIGHLAND**: Dataran tinggi + +### RoadType +- **PAVED**: Jalan beraspal +- **GRAVEL**: Jalan kerikil +- **DIRT**: Jalan tanah +- **FOOTPATH**: Jalan setapak +- **NO_ACCESS**: Tidak ada akses + +### FarmOwnership +- **PRIVATE_OWNED**: Milik pribadi +- **LEASED**: Sewa +- **SHARECROPPED**: Bagi hasil +- **COOPERATIVE**: Koperasi +- **GOVERNMENT**: Pemerintah +- **COMMUNAL**: Komunal +- **FAMILY_INHERITED**: Warisan keluarga + +### FarmingSystem +- **MONOCULTURE**: Monokultur +- **POLYCULTURE**: Polikultur +- **MIXED_FARMING**: Pertanian campuran +- **ORGANIC**: Organik +- **CONVENTIONAL**: Konvensional +- **INTEGRATED**: Terintegrasi +- **PERMACULTURE**: Permaculture +- **AGROFORESTRY**: Agroforestri + +## Relationships + +### One-to-One Relationships +- **Farmer**: Setiap farm dimiliki/dikelola oleh satu petani + +### One-to-Many Relationships +- **Plot**: Satu farm dapat dibagi menjadi beberapa plot +- **Harvest**: Recording hasil panen dari farm +- **FarmAttachment**: Dokumentasi dan foto farm +- **WeatherData**: Data cuaca spesifik farm +- **WeatherForecast**: Prediksi cuaca untuk farm +- **FarmInput**: Input pertanian yang digunakan +- **InputSchedule**: Jadwal penggunaan input +- **LaborRecord**: Catatan tenaga kerja +- **LaborSchedule**: Jadwal kerja +- **EquipmentUsage**: Penggunaan alat dan mesin +- **PestDiseaseRecord**: Catatan hama dan penyakit +- **FinancialRecord**: Catatan keuangan farm +- **SoilTest**: Tes laboratorium tanah + +## Database Indexes + +### Primary Indexes +- **`farmCode`**: Pencarian berdasarkan kode farm +- **`farmerId`**: Relasi dengan petani +- **`isActive`**: Filter farm aktif +- **`establishedYear`**: Sorting berdasarkan tahun pendirian + +### Geographic Indexes +- **`latitude, longitude`**: Spatial queries dan mapping +- **Spatial Index**: Untuk GeoJSON boundaries (database-specific) + +## Business Rules + +### Validation Rules +1. **Unique Constraints**: + - `farmCode` harus unik dalam sistem + - `farmerId + name` kombinasi yang unik per petani + +2. **Required Fields**: + - `farmerId`: Wajib ada (foreign key) + - `name`: Wajib diisi untuk identifikasi + +3. **Geographic Validation**: + - Latitude: -90 to 90 + - Longitude: -180 to 180 + - Area: > 0 jika diisi + - Boundaries: Valid GeoJSON polygon + +4. **Business Logic**: + - `establishedYear` tidak boleh di masa depan + - `annualProduction` harus >= 0 + - `totalInvestment` harus >= 0 + +### Status Management +- Farm dapat di-deactivate tanpa menghapus data +- Deactivated farm tidak dapat memiliki aktivitas baru +- Historical data tetap tersimpan untuk analytics + +## Use Cases + +### 1. Farm Registration +**Actor**: Petani/Admin +**Flow**: +1. Input informasi dasar farm (nama, lokasi) +2. Upload atau input koordinat GPS +3. Input karakteristik tanah dan lingkungan +4. Dokumentasi dengan foto +5. Input informasi legal (sertifikat) +6. Aktivasi farm + +### 2. Farm Mapping & GIS +**Actor**: Admin/Analyst +**Flow**: +1. View farm locations pada peta +2. Analyze geographic distribution +3. Overlay dengan data cuaca/iklim +4. Identify clusters dan patterns +5. Generate geographic reports + +### 3. Infrastructure Assessment +**Actor**: Field Officer/Admin +**Flow**: +1. Survey infrastruktur existing +2. Update fasilitas yang tersedia +3. Identify infrastructure gaps +4. Plan improvement programs +5. Track infrastructure development + +### 4. Production Planning +**Actor**: Petani/Advisor +**Flow**: +1. Analyze farm characteristics +2. Determine suitable crops +3. Plan planting schedule +4. Estimate production capacity +5. Budget planning dan resource allocation + +### 5. Environmental Monitoring +**Actor**: Environmentalist/Researcher +**Flow**: +1. Track soil health parameters +2. Monitor water usage patterns +3. Assess climate impact +4. Analyze biodiversity +5. Generate sustainability reports + +## Integration Points + +### Internal Systems +- **Farmer Management**: Owner relationship +- **Plot Management**: Land subdivision +- **Weather System**: Location-based weather data +- **Financial System**: Investment dan revenue tracking +- **Equipment Management**: Usage pada farm specific +- **Harvest Management**: Production tracking + +### External Systems +- **GIS Platforms**: Mapping dan spatial analysis +- **Weather Services**: Real-time weather data +- **Satellite Imagery**: Aerial monitoring +- **Government Systems**: Land certification integration +- **Insurance Systems**: Risk assessment +- **Bank Systems**: Collateral valuation + +## Data Privacy & Security + +### Sensitive Data +- Exact coordinates dan boundaries +- Legal documents (certificates) +- Financial information (investment, production) +- Infrastructure details + +### Security Measures +- Role-based access untuk geographic data +- Encryption untuk sensitive coordinates +- Audit trails untuk data changes +- Backup dan disaster recovery + +## Performance Considerations + +### Query Optimization +- Spatial indexes untuk geographic queries +- Composite indexes untuk common filters +- Materialized views untuk analytics +- Caching untuk frequently accessed farms + +### Scalability +- Geographic partitioning berdasarkan region +- Read replicas untuk mapping queries +- CDN untuk farm photos +- Efficient spatial data storage + +## Analytics & Reporting + +### Key Metrics +- **Total Farm Area**: Aggregate luas lahan +- **Geographic Distribution**: Sebaran lokasi farm +- **Infrastructure Penetration**: Tingkat infrastruktur +- **Production Capacity**: Kapasitas produksi total +- **Organic Certification Rate**: Persentase sertifikasi organik + +### Reports +- **Farm Directory**: Katalog farm dengan details +- **Geographic Analysis**: Distribution dan clustering +- **Infrastructure Assessment**: Gap analysis +- **Production Summary**: Kapasitas dan actual production +- **Environmental Impact**: Sustainability metrics + +## Quality Assurance + +### Data Validation +- GPS coordinates validation +- GeoJSON polygon validation +- Realistic area calculations +- Consistent address hierarchy + +### Regular Audits +- Farm visits untuk verification +- Photo updates berkala +- Infrastructure assessment +- Production capacity review + +## Future Enhancements + +### Planned Features +1. **Smart Mapping**: + - AI-powered boundary detection + - Satellite imagery integration + - Real-time farm monitoring + - Precision agriculture mapping + +2. **IoT Integration**: + - Sensor data collection + - Automated irrigation systems + - Weather station integration + - Equipment tracking + +3. **Sustainability Tracking**: + - Carbon footprint calculation + - Water usage monitoring + - Biodiversity assessment + - Soil health tracking + +4. **Advanced Analytics**: + - Predictive modeling + - Yield optimization + - Risk assessment + - Market intelligence + +### Integration Roadmap +- **Drone Integration**: Aerial surveying dan monitoring +- **Blockchain**: Land registry dan ownership verification +- **AI/ML**: Predictive analytics dan optimization +- **Mobile Apps**: Field data collection +- **Government APIs**: Legal compliance integration + +## Sample Farm Profiles + +### Small-Scale Rice Farm +```json +{ + "name": "Sawah Pak Budi", + "area": 0.5, + "soilType": "Clay loam", + "waterSource": "IRRIGATION_CANAL", + "irrigationType": "FLOOD", + "mainCrops": ["Rice"], + "farmingSystem": "CONVENTIONAL", + "hasElectricity": false, + "accessRoadType": "DIRT" +} +``` + +### Organic Vegetable Farm +```json +{ + "name": "Green Valley Organic", + "area": 2.0, + "soilType": "Sandy loam", + "waterSource": "WELL", + "irrigationType": "DRIP", + "mainCrops": ["Tomato", "Lettuce", "Spinach"], + "farmingSystem": "ORGANIC", + "organicCertified": true, + "hasElectricity": true, + "hasStorageFacility": true +} +``` + +### Highland Coffee Plantation +```json +{ + "name": "Arabica Hills", + "area": 5.0, + "elevation": 1200, + "climate": "HIGHLAND", + "slope": "MODERATE", + "mainCrops": ["Coffee"], + "farmingSystem": "AGROFORESTRY", + "establishedYear": 2010, + "accessRoadType": "GRAVEL" +} +``` + +## Compliance & Certification + +### Legal Requirements +- Land certificate validation +- Environmental compliance +- Water usage permits +- Organic certification (if applicable) + +### Documentation Standards +- Standardized photo requirements +- GPS accuracy standards +- Boundary documentation +- Infrastructure documentation + +### Audit Trail +- All changes logged dengan timestamp +- User attribution untuk modifications +- Historical versions maintained +- Compliance tracking automated \ No newline at end of file diff --git a/farmer_model_documentation.md b/farmer_model_documentation.md new file mode 100644 index 0000000..8e2e1d4 --- /dev/null +++ b/farmer_model_documentation.md @@ -0,0 +1,258 @@ +# Farmer Model Documentation + +## Overview +The Farmer model adalah entitas inti dalam sistem Happy Farmer yang menyimpan informasi lengkap tentang petani yang tergabung dalam platform. Model ini dirancang untuk mendukung manajemen data petani yang komprehensif, mulai dari informasi pribadi hingga aktivitas pertanian. + +## Business Context +Model Farmer berfungsi sebagai: +- **Central Profile**: Profil utama petani dalam ekosistem Happy Farmer +- **Data Hub**: Pusat data yang menghubungkan semua aktivitas pertanian +- **Verification System**: Sistem untuk memverifikasi identitas dan kredibilitas petani +- **Business Intelligence**: Sumber data untuk analisis bisnis dan decision making + +## Model Structure + +### Primary Fields + +#### **Identification & Basic Info** +- **`id`** (String, Primary Key): Unique identifier menggunakan CUID +- **`userId`** (String, Foreign Key): Referensi ke tabel User untuk autentikasi +- **`farmerCode`** (String, Unique): Kode unik petani format YYMMDDHHMM + sequence number (16 digit) +- **`name`** (String): Nama lengkap petani +- **`phone`** (String, Optional): Nomor telepon utama +- **`email`** (String, Optional): Email address (bisa berbeda dengan User.email) + +#### **Personal Information** +- **`birthPlace`** (String, Optional): Tempat kelahiran +- **`dateOfBirth`** (DateTime, Optional): Tanggal lahir +- **`gender`** (Gender Enum, Optional): Jenis kelamin (MALE/FEMALE/OTHER) +- **`maritalStatus`** (MaritalStatus Enum, Optional): Status pernikahan +- **`spouseName`** (String, Optional): Nama pasangan (jika menikah) +- **`familySize`** (Integer, Default: 0): Jumlah anggota keluarga +- **`religionId`** (String, Foreign Key): Referensi ke tabel Religion +- **`nationalityId`** (String, Default: "indonesia"): Kewarganegaraan + +#### **Address & Location** +- **`address`** (String, Optional): Alamat lengkap +- **`village`** (String, Optional): Desa/kelurahan +- **`district`** (String, Optional): Kecamatan +- **`subDistrict`** (String, Optional): Kabupaten/kota +- **`province`** (String, Optional): Provinsi +- **`postalCode`** (String, Optional): Kode pos +- **`countryId`** (String, Default: "indonesia"): Negara +- **`latitude`** (Float, Optional): Koordinat lintang +- **`longitude`** (Float, Optional): Koordinat bujur +- **`addressGeoJson`** (JSON, Optional): Data lokasi dalam format GeoJSON + +#### **Documentation & Attachments** +- **`profilePhotoUrl`** (String, Optional): URL foto profil +- **`idCardFrontUrl`** (String, Optional): URL foto KTP bagian depan +- **`idCardBackUrl`** (String, Optional): URL foto KTP bagian belakang + +#### **Verification System** +- **`isVerified`** (Boolean, Default: false): Status verifikasi +- **`verificationDate`** (DateTime, Optional): Tanggal verifikasi +- **`verifiedBy`** (String, Optional): ID admin yang memverifikasi +- **`verificationNotes`** (String, Optional): Catatan verifikasi + +#### **Agricultural Background** +- **`farmingExperience`** (Integer, Optional): Pengalaman bertani (tahun) +- **`farmingStartDate`** (DateTime, Optional): Tanggal mulai bertani +- **`educationLevelId`** (String, Foreign Key): Tingkat pendidikan +- **`occupation`** (String, Optional): Pekerjaan utama selain bertani +- **`monthlyIncome`** (Decimal, Optional): Estimasi pendapatan bulanan +- **`landOwnership`** (LandOwnership Enum, Optional): Status kepemilikan lahan +- **`primaryCrop`** (String, Optional): Komoditas utama +- **`farmingMethods`** (String Array): Metode bertani (organic, conventional, etc.) +- **`internetAccess`** (Boolean, Default: true): Akses internet + +#### **Emergency Contact** +- **`emergencyContactName`** (String, Optional): Nama kontak darurat +- **`emergencyContactPhone`** (String, Optional): Nomor telepon kontak darurat +- **`emergencyContactRelation`** (String, Optional): Hubungan dengan kontak darurat + +#### **Status & Metadata** +- **`status`** (FarmerStatus Enum, Default: ACTIVE): Status petani +- **`notes`** (String, Optional): Catatan tambahan +- **`joinedAt`** (DateTime, Default: now()): Tanggal bergabung +- **`createdAt`** (DateTime, Default: now()): Tanggal dibuat +- **`updatedAt`** (DateTime, Auto-update): Tanggal terakhir diupdate +- **`createdBy`** (String, Optional): ID user yang membuat record +- **`updatedBy`** (String, Optional): ID user yang terakhir mengupdate + +## Enums Definition + +### FarmerStatus +- **ACTIVE**: Petani aktif dan dapat bertransaksi +- **INACTIVE**: Petani tidak aktif sementara +- **SUSPENDED**: Petani disuspen karena pelanggaran +- **PENDING_VERIFICATION**: Menunggu verifikasi +- **BLACKLISTED**: Petani di-blacklist + +### LandOwnership +- **OWNER**: Pemilik lahan +- **TENANT**: Penyewa lahan +- **SHARECROPPER**: Bagi hasil +- **COOPERATIVE_MEMBER**: Anggota koperasi +- **GOVERNMENT_LEASE**: Sewa dari pemerintah +- **FAMILY_LAND**: Lahan keluarga +- **OTHER**: Lainnya + +## Relationships + +### One-to-One Relationships +- **User**: Setiap farmer memiliki satu user account +- **Religion**: Referensi ke agama (optional) +- **Country**: Referensi ke negara (nationality dan country) +- **EducationLevel**: Referensi ke tingkat pendidikan + +### One-to-Many Relationships +- **FarmerIdentity**: Dokumen identitas petani +- **FarmerBankAccount**: Rekening bank petani +- **FarmerVehicle**: Kendaraan yang dimiliki +- **Farm**: Lahan pertanian yang dikelola +- **FarmerTraining**: Pelatihan yang diikuti +- **FarmerCertification**: Sertifikasi yang dimiliki +- **Procurement**: Transaksi pembelian +- **Harvest**: Hasil panen +- **Contract**: Kontrak dengan buyer +- **Equipment**: Peralatan pertanian +- **Asset**: Aset yang dimiliki +- **FinancialRecord**: Catatan keuangan +- **LaborRecord**: Catatan tenaga kerja +- **Reviews**: Ulasan dari buyer + +## Database Indexes + +### Primary Indexes +- `farmerCode`: Pencarian berdasarkan kode petani +- `userId`: Relasi dengan user +- `status`: Filter berdasarkan status +- `joinedAt`: Sorting berdasarkan tanggal bergabung + +### Geographic Indexes +- `latitude, longitude`: Pencarian berdasarkan lokasi geografis + +## Business Rules + +### Validation Rules +1. **Unique Constraints**: + - `farmerCode` harus unik dalam sistem + - `userId` harus unik (one-to-one dengan User) + +2. **Required Fields**: + - `name`: Wajib diisi + - `userId`: Wajib diisi (foreign key) + +3. **Optional but Important**: + - `phone`: Sangat disarankan untuk komunikasi + - `email`: Untuk notifikasi dan komunikasi + - Lokasi (latitude/longitude): Untuk mapping dan logistik + +### Status Transitions +``` +PENDING_VERIFICATION → ACTIVE (setelah verifikasi) +ACTIVE → INACTIVE (temporary suspension) +ACTIVE → SUSPENDED (violation) +ACTIVE → BLACKLISTED (serious violation) +SUSPENDED → ACTIVE (reinstatement) +``` + +## Use Cases + +### 1. Farmer Registration +- Admin atau sistem membuat record Farmer baru +- Status awal: PENDING_VERIFICATION +- Upload dokumen identitas +- Verifikasi oleh admin +- Status berubah menjadi ACTIVE + +### 2. Profile Management +- Update informasi pribadi +- Manage dokumen dan attachments +- Update informasi pertanian +- Maintain emergency contacts + +### 3. Verification Process +- Upload dokumen identitas +- Admin review dan verifikasi +- Update status verifikasi +- Catat siapa yang memverifikasi dan kapan + +### 4. Business Operations +- Tracking aktivitas pertanian +- Manajemen kontrak dan procurement +- Financial record keeping +- Performance analytics + +## Integration Points + +### External Systems +- **Payment Systems**: Integrasi dengan bank accounts +- **Mapping Services**: Menggunakan koordinat GPS +- **Communication**: SMS/Email notifications +- **Document Management**: File storage untuk attachments + +### Internal Systems +- **User Management**: Autentikasi dan otorisasi +- **Farm Management**: Manajemen lahan dan produksi +- **Procurement**: Transaksi pembelian +- **Financial**: Tracking keuangan +- **Training**: Sistem pelatihan +- **Certification**: Manajemen sertifikasi + +## Data Privacy & Security + +### Sensitive Data +- Personal information (birth date, family size) +- Financial information (income, bank accounts) +- Identity documents (KTP photos) +- Contact information + +### Security Measures +- Enkripsi untuk data sensitif +- Access control berdasarkan role +- Audit trail untuk perubahan data +- Regular backup dan disaster recovery + +## Performance Considerations + +### Query Optimization +- Index pada field yang sering digunakan untuk filter +- Pagination untuk list queries +- Caching untuk data yang sering diakses + +### Data Archival +- Soft delete untuk maintain referential integrity +- Archive old records untuk performance +- Purge strategy untuk GDPR compliance + +## Reporting & Analytics + +### Key Metrics +- Farmer acquisition rate +- Verification completion rate +- Geographic distribution +- Activity levels +- Financial performance + +### Reports +- Farmer demographics +- Geographic analysis +- Performance dashboards +- Compliance reports + +## Future Enhancements + +### Planned Features +- Multi-language support +- Advanced analytics +- AI-powered recommendations +- Integration with IoT devices +- Blockchain for traceability + +### Scalability Considerations +- Database sharding by region +- Read replicas for reporting +- Microservices architecture +- Event-driven updates \ No newline at end of file diff --git a/farmer_training_model_documentation.md b/farmer_training_model_documentation.md new file mode 100644 index 0000000..5f231cb --- /dev/null +++ b/farmer_training_model_documentation.md @@ -0,0 +1,313 @@ +# FarmerTraining Model Documentation + +## Overview +Model FarmerTraining adalah junction table yang menghubungkan petani dengan program pelatihan, berfungsi sebagai sistem tracking untuk enrollment, progress, dan completion pelatihan. Model ini memungkinkan manajemen pembelajaran yang personal dan terstruktur untuk setiap petani. + +## Business Context +Model FarmerTraining berfungsi sebagai: +- **Enrollment Management**: Pendaftaran petani ke program pelatihan +- **Progress Tracking**: Monitoring kemajuan pembelajaran setiap petani +- **Performance Assessment**: Evaluasi hasil dan pencapaian pelatihan +- **Assignment System**: Penugasan pelatihan oleh admin kepada petani +- **Compliance Tracking**: Memastikan petani memenuhi requirement pelatihan + +## Model Structure + +### Primary Fields + +#### **Identification & Relationships** +- **`id`** (String, Primary Key): Unique identifier menggunakan CUID +- **`farmerId`** (String, Foreign Key): Referensi ke petani yang mengikuti pelatihan +- **`trainingId`** (String, Foreign Key): Referensi ke program pelatihan yang diikuti + +#### **Status & Progress Tracking** +- **`status`** (TrainingStatus Enum, Default: ENROLLED): Status pelatihan petani +- **`progress`** (Integer, Default: 0): Persentase kemajuan pelatihan (0-100) +- **`score`** (Float, Optional): Nilai/skor yang diperoleh petani +- **`completedAt`** (DateTime, Optional): Tanggal penyelesaian pelatihan + +#### **Assignment Management** +- **`assignedBy`** (String, Optional): ID admin yang menugaskan pelatihan +- **`assignedAt`** (DateTime, Optional): Tanggal penugasan +- **`assignmentReason`** (String, Optional): Alasan penugasan pelatihan +- **`deadline`** (DateTime, Optional): Batas waktu penyelesaian pelatihan + +#### **Metadata** +- **`createdAt`** (DateTime, Default: now()): Tanggal enrollment +- **`updatedAt`** (DateTime, Auto-update): Tanggal terakhir diupdate + +## Enums Definition + +### TrainingStatus +- **ENROLLED**: Petani telah mendaftar/ditugaskan pelatihan +- **IN_PROGRESS**: Petani sedang mengikuti pelatihan +- **COMPLETED**: Petani telah menyelesaikan pelatihan +- **DROPPED**: Petani keluar dari pelatihan sebelum selesai + +## Database Constraints + +### Unique Constraints +- **`farmerId + trainingId`**: Satu petani hanya dapat memiliki satu record per training +- Mencegah duplicate enrollment + +### Indexes +- **`farmerId`**: Untuk query berdasarkan petani +- **`trainingId`**: Untuk query berdasarkan pelatihan +- **`status`**: Untuk filtering berdasarkan status +- **`completedAt`**: Untuk sorting berdasarkan tanggal completion +- **`progress`**: Untuk analytics dan reporting +- **`assignedBy`**: Untuk tracking assignment oleh admin +- **`assignedAt`**: Untuk chronological analysis +- **`deadline`**: Untuk monitoring deadline + +## Business Rules + +### Enrollment Rules +1. **Self-Enrollment**: Petani dapat mendaftar sendiri ke pelatihan terbuka +2. **Admin Assignment**: Admin dapat menugaskan pelatihan kepada petani +3. **Prerequisite Check**: Sistem harus memvalidasi prerequisite sebelum enrollment +4. **Capacity Limit**: Enrollment dibatasi oleh `maxParticipants` dari Training + +### Status Transitions +``` +ENROLLED → IN_PROGRESS (petani mulai mengikuti) +IN_PROGRESS → COMPLETED (petani selesai dengan success) +IN_PROGRESS → DROPPED (petani keluar sebelum selesai) +ENROLLED → DROPPED (petani tidak mulai dalam periode tertentu) +``` + +### Progress Rules +- Progress dimulai dari 0% saat enrollment +- Progress diupdate berdasarkan completion modul/section +- Progress 100% secara otomatis mengubah status ke COMPLETED +- Score hanya dapat diisi untuk status COMPLETED + +### Assignment Rules +- Admin dapat menugaskan pelatihan wajib kepada petani +- Deadline dapat ditetapkan untuk assignment +- Assignment reason wajib diisi untuk tracking compliance +- Notifikasi otomatis dikirim saat assignment + +## Use Cases + +### 1. Self-Enrollment +**Actor**: Petani +**Flow**: +1. Petani browse training catalog +2. Pilih training yang diinginkan +3. Check prerequisites (jika ada) +4. Enrollment dengan status ENROLLED +5. Sistem create record FarmerTraining +6. Notifikasi confirmation dikirim + +### 2. Admin Assignment +**Actor**: Admin +**Flow**: +1. Admin pilih petani yang akan ditugaskan +2. Pilih training yang wajib diikuti +3. Set deadline dan reason +4. Sistem create record dengan status ENROLLED +5. Notifikasi assignment dikirim ke petani +6. Tracking compliance dimulai + +### 3. Progress Tracking +**Actor**: Sistem/Petani +**Flow**: +1. Petani mulai mengikuti training +2. Status berubah ke IN_PROGRESS +3. Progress diupdate setiap completion milestone +4. Sistem tracking time spent dan engagement +5. Analytics diupdate real-time + +### 4. Training Completion +**Actor**: Petani/Sistem +**Flow**: +1. Petani menyelesaikan semua modul +2. Progress mencapai 100% +3. Status berubah ke COMPLETED +4. CompletedAt diset ke timestamp saat ini +5. Score diinput (jika ada assessment) +6. Certificate generation (jika applicable) +7. Completion notification dikirim + +### 5. Compliance Monitoring +**Actor**: Admin +**Flow**: +1. Monitor training assignments dengan deadline +2. Identify petani yang overdue +3. Send reminder notifications +4. Escalate jika masih non-compliant +5. Generate compliance reports + +## Integration Points + +### Internal Systems +- **Training Model**: Referensi ke program pelatihan +- **Farmer Model**: Referensi ke data petani +- **Notification System**: Automated notifications +- **Certificate System**: Issuing certificates upon completion +- **Analytics System**: Progress dan performance metrics + +### External Systems +- **Learning Management System (LMS)**: Sync progress data +- **Assessment Tools**: Import scores dan evaluations +- **Email/SMS System**: Notifications dan reminders +- **Mobile App**: Real-time progress sync + +## Analytics & Reporting + +### Key Metrics +- **Enrollment Rate**: Jumlah enrollment per training +- **Completion Rate**: Persentase completion per training +- **Average Progress**: Rata-rata progress per training +- **Time to Complete**: Waktu rata-rata untuk menyelesaikan +- **Drop-out Rate**: Persentase yang dropped +- **Assignment Compliance**: Tingkat compliance untuk assigned training + +### Reports +- **Individual Progress**: Progress report per petani +- **Training Effectiveness**: Completion rate per training +- **Compliance Dashboard**: Status assignment dan deadline +- **Performance Analytics**: Score distribution dan trends +- **Engagement Metrics**: Activity dan participation levels + +## Performance Considerations + +### Query Optimization +- Composite index pada `farmerId + trainingId` +- Partial index pada active enrollments +- Materialized views untuk complex analytics +- Caching untuk frequently accessed data + +### Scalability +- Partition berdasarkan created date +- Archive completed training records +- Optimize for read-heavy workloads +- Use read replicas untuk reporting + +## Data Privacy & Security + +### Sensitive Data +- Training progress dan scores +- Assignment reasons +- Performance metrics +- Compliance status + +### Security Measures +- Access control berdasarkan role +- Audit logging untuk status changes +- Data encryption untuk sensitive fields +- Regular security audits + +## Notification Management + +### Automated Notifications +- **Enrollment Confirmation**: Saat enrollment berhasil +- **Assignment Notification**: Saat ditugaskan training +- **Progress Milestones**: Saat mencapai progress tertentu +- **Deadline Reminders**: Menjelang deadline assignment +- **Completion Celebration**: Saat menyelesaikan training +- **Overdue Alerts**: Saat melewati deadline + +### Notification Channels +- **In-App**: Notifications dalam aplikasi +- **Email**: Detailed notifications via email +- **SMS**: Critical reminders via SMS +- **Push Notifications**: Mobile app notifications +- **WhatsApp**: Informal reminders + +## Quality Assurance + +### Data Integrity +- Validation rules untuk progress (0-100) +- Referential integrity dengan Training dan Farmer +- Status transition validation +- Duplicate prevention + +### Business Logic Validation +- Prerequisite checking +- Capacity limit enforcement +- Deadline validation +- Score range validation + +## Future Enhancements + +### Planned Features +1. **Adaptive Learning**: + - Personalized learning paths + - Difficulty adjustment berdasarkan performance + - Intelligent content recommendation + - Predictive analytics untuk success + +2. **Social Learning**: + - Peer comparison dan leaderboards + - Group assignments dan collaboration + - Mentorship matching + - Community discussions + +3. **Advanced Analytics**: + - Machine learning untuk prediction + - Behavior analysis + - Engagement pattern recognition + - ROI measurement + +4. **Mobile-First Experience**: + - Offline learning capabilities + - Mobile-optimized assessments + - Voice-based interactions + - Augmented reality training + +### Integration Roadmap +- **Advanced LMS**: Full-featured learning platform +- **AI-Powered Recommendations**: Personalized learning +- **Blockchain Certificates**: Verifiable credentials +- **Virtual Reality**: Immersive training experiences +- **IoT Integration**: Real-world application tracking + +## Sample Scenarios + +### Scenario 1: Mandatory Training Assignment +``` +Admin assigns "Pesticide Safety Training" to all farmers +- assignedBy: "admin_001" +- deadline: 30 days from assignment +- assignmentReason: "Compliance requirement" +- Automated reminders at 7, 3, 1 days before deadline +``` + +### Scenario 2: Self-Directed Learning +``` +Farmer enrolls in "Organic Farming Basics" +- Self-enrollment without assignment +- No deadline constraint +- Progress tracking untuk personal development +- Optional assessment at completion +``` + +### Scenario 3: Prerequisite Chain +``` +Farmer completes "Basic Crop Management" → unlocks "Advanced Pest Control" +- System automatically checks prerequisites +- Enables enrollment untuk advanced training +- Tracks learning progression +``` + +## Success Metrics + +### Individual Level +- Training completion rate per farmer +- Average score per training +- Time to complete training +- Engagement level (time spent, interactions) + +### Training Level +- Overall completion rate +- Average score distribution +- Drop-out rate analysis +- Effectiveness measurement + +### System Level +- Total training hours delivered +- Farmer capacity building index +- Knowledge retention rate +- Business impact measurement \ No newline at end of file diff --git a/plot_model_documentation.md b/plot_model_documentation.md new file mode 100644 index 0000000..d8d869a --- /dev/null +++ b/plot_model_documentation.md @@ -0,0 +1,341 @@ +# Plot Model Documentation + +## Overview +Model Plot adalah subdivision dari Farm yang merepresentasikan area tanam spesifik dalam satu lahan pertanian. Plot berfungsi sebagai unit terkecil dalam manajemen pertanian untuk tracking detail produksi, tanaman, dan aktivitas pertanian yang lebih granular. + +## Business Context +Model Plot berfungsi sebagai: +- **Production Unit**: Unit terkecil untuk tracking produksi dan hasil +- **Crop Management**: Manajemen spesifik per jenis tanaman +- **Resource Allocation**: Alokasi input dan sumber daya per area +- **Performance Analysis**: Analisis performa per plot untuk optimization +- **Rotation Planning**: Perencanaan rotasi tanaman +- **Precision Agriculture**: Implementasi pertanian presisi + +## Model Structure + +### Primary Fields + +#### **Identification & Basic Info** +- **`id`** (String, Primary Key): Unique identifier menggunakan CUID +- **`farmId`** (String, Foreign Key): Referensi ke farm induk +- **`name`** (String, Required): Nama plot untuk identifikasi +- **`area`** (Decimal, Optional): Luas plot dalam hektar +- **`description`** (String, Optional): Deskripsi detail plot + +#### **Crop Information** +- **`productId`** (String, Foreign Key, Optional): Jenis produk/komoditas yang ditanam +- **`variantId`** (String, Foreign Key, Optional): Varietas spesifik yang ditanam +- **`plantedDate`** (DateTime, Optional): Tanggal penanaman terakhir + +#### **Geographic Data** +- **`boundaries`** (JSON, Optional): Boundaries plot dalam format GeoJSON polygon + +#### **Status & Metadata** +- **`isActive`** (Boolean, Default: true): Status aktif plot +- **`createdAt`** (DateTime, Default: now()): Tanggal pembuatan +- **`updatedAt`** (DateTime, Auto-update): Tanggal terakhir diupdate + +## Relationships + +### Many-to-One Relationships +- **Farm**: Setiap plot belongs to satu farm +- **Product**: Plot dapat dikaitkan dengan satu jenis produk +- **ProductVariant**: Plot dapat specify varietas tertentu + +### One-to-Many Relationships +- **Harvest**: Plot dapat memiliki multiple harvest records +- **WeatherData**: Data cuaca spesifik untuk plot +- **WeatherForecast**: Prediksi cuaca untuk plot +- **FarmInput**: Input yang digunakan pada plot +- **InputSchedule**: Jadwal input untuk plot +- **LaborRecord**: Catatan kerja pada plot +- **LaborSchedule**: Jadwal kerja pada plot +- **EquipmentUsage**: Penggunaan alat pada plot +- **PestDiseaseRecord**: Catatan hama/penyakit pada plot +- **FinancialRecord**: Catatan keuangan per plot +- **SoilTest**: Tes tanah spesifik plot +- **PlotSeason**: Manajemen musim tanam per plot + +## Database Indexes + +### Primary Indexes +- **`farmId`**: Relasi dengan farm +- **`productId, variantId`**: Pencarian berdasarkan crop +- **`plantedDate`**: Sorting berdasarkan waktu tanam +- **`isActive`**: Filter plot aktif + +## Business Rules + +### Validation Rules +1. **Area Constraints**: + - Area plot tidak boleh melebihi area farm + - Total area semua plot dalam farm tidak boleh > area farm + - Area harus > 0 jika diisi + +2. **Crop Consistency**: + - ProductVariant harus sesuai dengan Product + - Satu plot hanya satu jenis crop pada satu waktu + - PlantedDate tidak boleh di masa depan + +3. **Geographic Rules**: + - Plot boundaries harus dalam farm boundaries + - Plot tidak boleh overlap dengan plot lain dalam farm yang sama + +### Business Logic +- Plot dapat kosong (fallow) tanpa crop assignment +- History crop rotation dapat dilihat dari PlotSeason +- Deactivated plot tidak dapat menerima input baru + +## Use Cases + +### 1. Plot Creation & Setup +**Actor**: Petani/Farm Manager +**Flow**: +1. Define plot boundaries dalam farm +2. Assign nama yang descriptive +3. Calculate atau input area +4. Set initial crop jika sudah ditanam +5. Aktivasi plot untuk operations + +### 2. Crop Planting Management +**Actor**: Petani +**Flow**: +1. Select plot yang akan ditanam +2. Choose product dan variant +3. Set planting date +4. Update plot record +5. Create PlotSeason record +6. Schedule initial inputs + +### 3. Production Tracking +**Actor**: Petani/Field Officer +**Flow**: +1. Monitor crop development per plot +2. Record inputs dan activities +3. Track labor dan equipment usage +4. Monitor pest/disease issues +5. Record harvest results + +### 4. Crop Rotation Planning +**Actor**: Agronomist/Petani +**Flow**: +1. Analyze historical PlotSeason data +2. Plan next season crops +3. Consider soil health dan nutrient balance +4. Schedule land preparation +5. Update plot assignments + +### 5. Performance Analysis +**Actor**: Data Analyst/Manager +**Flow**: +1. Compare productivity across plots +2. Analyze input efficiency per plot +3. Identify high/low performing areas +4. Generate recommendations +5. Optimize resource allocation + +## Integration Points + +### Internal Systems +- **Farm Management**: Parent-child relationship +- **Product Catalog**: Crop selection +- **Season Management**: Temporal crop tracking +- **Input Management**: Resource allocation +- **Harvest Tracking**: Production recording +- **Financial System**: Plot-level costing + +### External Systems +- **Satellite Imagery**: Plot monitoring +- **Weather Services**: Micro-climate data +- **Soil Testing Labs**: Plot-specific analysis +- **Precision Agriculture**: Variable rate applications +- **Drone Services**: Plot surveillance + +## Data Management + +### Geographic Data +- GeoJSON polygons untuk plot boundaries +- Coordinate validation terhadap farm boundaries +- Area calculation dari polygon coordinates +- Spatial indexing untuk efficient queries + +### Historical Data +- Maintain crop history melalui PlotSeason +- Track input usage over time +- Production trends analysis +- Soil health evolution + +## Performance Considerations + +### Query Optimization +- Index pada farmId untuk farm-level queries +- Composite index pada productId+variantId +- Spatial index untuk geographic queries +- Materialized views untuk aggregations + +### Scalability +- Plot data umumnya tidak terlalu large +- Efficient spatial data storage +- Optimized untuk farm-level rollups +- Caching untuk frequently accessed plots + +## Analytics & Reporting + +### Key Metrics +- **Yield per Plot**: Produktivitas per unit area +- **Input Efficiency**: ROI per plot +- **Crop Performance**: Comparison across plots +- **Resource Utilization**: Labor, equipment, inputs +- **Profitability Analysis**: Revenue vs costs per plot + +### Reports +- **Plot Performance Dashboard**: Real-time metrics +- **Crop Rotation Report**: Historical patterns +- **Input Usage Analysis**: Resource optimization +- **Yield Comparison**: Plot benchmarking +- **Profitability Analysis**: Financial performance + +## Quality Assurance + +### Data Integrity +- Referential integrity dengan Farm +- Valid GeoJSON boundaries +- Realistic area calculations +- Consistent crop assignments + +### Validation Rules +- Plot boundaries within farm boundaries +- No overlapping plots dalam same farm +- Valid product-variant combinations +- Reasonable planting dates + +## Future Enhancements + +### Planned Features +1. **Precision Agriculture**: + - Variable rate application zones + - Yield mapping integration + - Soil variation mapping + - Micro-climate monitoring + +2. **AI-Powered Insights**: + - Optimal crop selection recommendations + - Yield prediction per plot + - Input optimization suggestions + - Disease/pest early warning + +3. **IoT Integration**: + - Sensor-based monitoring + - Automated irrigation per plot + - Real-time soil monitoring + - Equipment tracking per plot + +4. **Advanced Analytics**: + - Machine learning untuk optimization + - Predictive modeling + - Comparative analysis + - Benchmark studies + +## Sample Plot Configurations + +### Rice Plot Setup +```json +{ + "name": "Sawah A1", + "farmId": "farm_123", + "area": 0.25, + "productId": "rice_001", + "variantId": "ir64_variant", + "plantedDate": "2024-01-15", + "description": "Quarter hectare rice plot, north section" +} +``` + +### Vegetable Rotation Plot +```json +{ + "name": "Veggie Plot B", + "farmId": "farm_456", + "area": 0.1, + "productId": "tomato_001", + "variantId": "cherry_tomato", + "plantedDate": "2024-02-01", + "description": "Small intensive vegetable plot for rotation" +} +``` + +### Tree Crop Plot +```json +{ + "name": "Coffee Section 1", + "farmId": "farm_789", + "area": 1.0, + "productId": "coffee_001", + "variantId": "arabica_typica", + "plantedDate": "2020-03-15", + "description": "Mature coffee trees, 4 years old" +} +``` + +## Crop Rotation Management + +### Rotation Patterns +- **Sequential Cropping**: Different crops per season +- **Intercropping**: Multiple crops simultaneously +- **Fallow Periods**: Rest periods untuk soil recovery +- **Cover Crops**: Soil improvement crops + +### Planning Considerations +- Soil nutrient management +- Pest and disease cycles +- Market demand patterns +- Input cost optimization +- Labor availability + +## Environmental Monitoring + +### Plot-Level Tracking +- Soil health indicators +- Water usage efficiency +- Input application rates +- Yield sustainability +- Environmental impact + +### Compliance Monitoring +- Organic certification requirements +- Chemical application limits +- Water usage regulations +- Environmental protection standards + +## Risk Management + +### Production Risks +- Weather-related losses +- Pest and disease outbreaks +- Market price fluctuations +- Input cost variations + +### Mitigation Strategies +- Diversified cropping patterns +- Insurance coverage per plot +- Early warning systems +- Adaptive management practices + +## Mobile Field Data Collection + +### Field App Features +- GPS-based plot identification +- Real-time data entry +- Photo documentation +- Voice notes capability +- Offline data sync + +### Data Collection Types +- Daily observations +- Input applications +- Labor activities +- Equipment usage +- Problem incidents + +This documentation provides comprehensive guidance for Business Analysts to understand the Plot model's role in precision farm management and its integration with the broader Happy Farmer ecosystem. \ No newline at end of file diff --git a/training_model_documentation.md b/training_model_documentation.md new file mode 100644 index 0000000..1b7d482 --- /dev/null +++ b/training_model_documentation.md @@ -0,0 +1,317 @@ +# Training Model Documentation + +## Overview +Model Training adalah komponen inti dalam sistem manajemen pelatihan Happy Farmer yang berfungsi sebagai blueprint untuk program-program pelatihan yang dapat diikuti oleh petani. Model ini dirancang untuk mendukung upaya peningkatan kapasitas dan keterampilan petani dalam berbagai aspek pertanian modern. + +## Business Context +Model Training berfungsi sebagai: +- **Knowledge Repository**: Penyimpan konten pelatihan dan materi pembelajaran +- **Curriculum Management**: Pengelolaan kurikulum pelatihan yang terstruktur +- **Capacity Building**: Alat untuk meningkatkan kemampuan petani +- **Quality Assurance**: Standarisasi program pelatihan +- **Performance Tracking**: Basis untuk tracking progress dan hasil pelatihan + +## Model Structure + +### Primary Fields + +#### **Identification & Basic Info** +- **`id`** (String, Primary Key): Unique identifier menggunakan CUID +- **`title`** (String, Required): Judul pelatihan yang akan ditampilkan +- **`description`** (String, Optional): Deskripsi singkat tentang pelatihan +- **`content`** (String, Optional): Konten detail pelatihan (dapat berupa HTML, Markdown, atau text) + +#### **Classification & Organization** +- **`category`** (String, Required): Kategori pelatihan + - Contoh: "Crop Management", "Pest Control", "Financial Management", "Technology", "Marketing" +- **`duration`** (Integer, Optional): Durasi pelatihan dalam menit +- **`level`** (String, Optional): Level kesulitan pelatihan + - **beginner**: Untuk petani pemula + - **intermediate**: Untuk petani dengan pengalaman menengah + - **advanced**: Untuk petani berpengalaman atau expert + +#### **Prerequisites & Requirements** +- **`prerequisites`** (String, Optional): Syarat atau pelatihan yang harus diselesaikan sebelumnya +- **`maxParticipants`** (Integer, Optional): Jumlah maksimum peserta yang dapat mengikuti pelatihan + +#### **Administrative Fields** +- **`createdBy`** (String, Optional): ID admin yang membuat pelatihan +- **`isActive`** (Boolean, Default: true): Status aktif pelatihan +- **`createdAt`** (DateTime, Default: now()): Tanggal pembuatan +- **`updatedAt`** (DateTime, Auto-update): Tanggal terakhir diupdate + +## Training Categories + +### Primary Categories +1. **Crop Management** + - Teknik penanaman + - Pemilihan varietas + - Pengelolaan lahan + - Rotasi tanaman + +2. **Pest Control** + - Identifikasi hama dan penyakit + - Pengendalian hama terpadu + - Penggunaan pestisida yang aman + - Metode organik + +3. **Financial Management** + - Pengelolaan keuangan usaha tani + - Akuntansi sederhana + - Analisis biaya produksi + - Perencanaan investasi + +4. **Technology & Innovation** + - Penggunaan aplikasi pertanian + - Teknologi irigasi + - Mesin dan peralatan modern + - Sistem informasi pasar + +5. **Marketing & Business** + - Strategi pemasaran + - Kualitas dan grading + - Negosiasi harga + - Kemitraan dengan buyer + +6. **Sustainable Agriculture** + - Pertanian organik + - Konservasi tanah dan air + - Biodiversitas + - Perubahan iklim + +## Relationships + +### One-to-Many Relationships +- **FarmerTraining**: Satu training dapat diikuti oleh banyak petani + - Tracking enrollment, progress, dan completion + - Scoring dan evaluasi + - Assignment dan deadline management + +## Business Rules + +### Validation Rules +1. **Required Fields**: + - `title`: Wajib diisi dan harus deskriptif + - `category`: Wajib diisi untuk klasifikasi + +2. **Optional but Important**: + - `description`: Sangat disarankan untuk memberikan overview + - `duration`: Penting untuk planning dan scheduling + - `level`: Membantu petani memilih pelatihan yang sesuai + +3. **Business Logic**: + - Training hanya dapat diikuti jika `isActive = true` + - `maxParticipants` membatasi jumlah peserta jika diset + - `prerequisites` harus dicek sebelum enrollment + +### Content Management Rules +- Content dapat berupa text, HTML, atau Markdown +- Mendukung multimedia (images, videos) melalui referensi URL +- Versioning untuk updates konten +- Approval workflow untuk konten baru + +## Use Cases + +### 1. Training Creation +**Actor**: Admin/Training Manager +**Flow**: +1. Admin membuat training baru +2. Mengisi title, description, dan category +3. Menentukan level dan prerequisites +4. Upload atau input content +5. Set duration dan max participants +6. Aktivasi training + +### 2. Training Catalog Management +**Actor**: Admin +**Flow**: +1. View semua training yang tersedia +2. Filter berdasarkan category, level, atau status +3. Edit training content dan metadata +4. Activate/deactivate training +5. Monitor enrollment dan completion rates + +### 3. Training Discovery +**Actor**: Petani/Admin +**Flow**: +1. Browse training catalog +2. Filter berdasarkan category atau level +3. View training details dan prerequisites +4. Check availability dan enrollment status +5. Enroll ke training yang dipilih + +### 4. Training Analytics +**Actor**: Admin/Manager +**Flow**: +1. View training performance metrics +2. Analyze enrollment vs completion rates +3. Identify popular training categories +4. Track training effectiveness +5. Generate reports untuk decision making + +## Integration Points + +### Internal Systems +- **FarmerTraining**: Enrollment dan progress tracking +- **User Management**: Creator dan access control +- **Notification System**: Training announcements +- **Reporting System**: Analytics dan performance metrics + +### External Systems +- **Learning Management System (LMS)**: Untuk delivery konten +- **Video Platforms**: Untuk multimedia content +- **Assessment Tools**: Untuk evaluasi dan testing +- **Certificate Management**: Untuk issuing certificates + +## Data Management + +### Content Storage +- **Text Content**: Stored dalam database +- **Media Files**: Stored di cloud storage (S3, GCS) +- **Documents**: PDF, presentations via cloud storage +- **Interactive Content**: Link ke external platforms + +### Backup & Recovery +- Regular backup untuk training content +- Version control untuk content changes +- Disaster recovery plan +- Data archival strategy + +## Performance Considerations + +### Query Optimization +- Index pada `category` untuk filtering +- Index pada `isActive` untuk active training queries +- Index pada `createdAt` untuk sorting +- Full-text search pada `title` dan `description` + +### Scalability +- Content caching untuk popular trainings +- CDN untuk media files +- Database partitioning berdasarkan category +- Load balancing untuk high traffic + +## Quality Assurance + +### Content Standards +- Structured content format +- Clear learning objectives +- Appropriate difficulty progression +- Cultural sensitivity +- Language consistency + +### Review Process +- Content review sebelum publikasi +- Subject matter expert validation +- Regular content updates +- Feedback incorporation + +## Analytics & Reporting + +### Key Metrics +- **Enrollment Rate**: Jumlah pendaftar per training +- **Completion Rate**: Persentase yang menyelesaikan training +- **Popular Categories**: Kategori paling diminati +- **Duration Analysis**: Efektivitas durasi training +- **Success Rate**: Tingkat keberhasilan per level + +### Reports +- Training catalog summary +- Enrollment trends +- Completion analytics +- Category performance +- Creator productivity + +## Security & Access Control + +### Data Protection +- Role-based access untuk training creation +- Content encryption untuk sensitive material +- Audit logs untuk content changes +- Backup security + +### Privacy Considerations +- Training participation privacy +- Content intellectual property +- Data retention policies +- GDPR compliance + +## Future Enhancements + +### Planned Features +1. **Interactive Content**: + - Video-based training + - Interactive simulations + - Gamification elements + - Virtual reality experiences + +2. **AI-Powered Features**: + - Personalized training recommendations + - Adaptive learning paths + - Automated content generation + - Intelligent assessment + +3. **Mobile Learning**: + - Offline content access + - Mobile-optimized content + - Push notifications + - Progress synchronization + +4. **Social Learning**: + - Discussion forums + - Peer-to-peer learning + - Expert mentorship + - Community challenges + +### Integration Roadmap +- **Advanced LMS**: Full-featured learning management +- **Assessment Engine**: Comprehensive testing and evaluation +- **Certification System**: Digital badges dan certificates +- **Mobile App**: Native mobile learning experience +- **Analytics Dashboard**: Advanced reporting dan insights + +## Sample Training Categories + +### Technical Skills +- Modern farming techniques +- Irrigation system management +- Soil health management +- Crop rotation strategies +- Harvest timing optimization + +### Business Skills +- Farm business planning +- Market analysis +- Financial planning +- Record keeping +- Customer relationship management + +### Technology Adoption +- Mobile app usage +- Weather monitoring tools +- GPS and mapping +- E-commerce platforms +- Digital payment systems + +### Sustainability +- Organic farming practices +- Water conservation +- Integrated pest management +- Carbon footprint reduction +- Biodiversity conservation + +## Content Delivery Methods + +### Formats Supported +- **Text-based**: Articles, guides, manuals +- **Video**: Instructional videos, demonstrations +- **Interactive**: Quizzes, simulations, games +- **Audio**: Podcasts, voice instructions +- **Documents**: PDFs, presentations, worksheets + +### Delivery Channels +- **Web Platform**: Browser-based access +- **Mobile App**: Native mobile experience +- **Offline Mode**: Downloaded content +- **SMS/USSD**: For basic content delivery +- **WhatsApp**: Micro-learning modules \ No newline at end of file diff --git a/user_stories_farmer_crud.md b/user_stories_farmer_crud.md new file mode 100644 index 0000000..4cafcde --- /dev/null +++ b/user_stories_farmer_crud.md @@ -0,0 +1,117 @@ +# User Stories untuk CRUD Farmer di Mobile Phone + +## Admin Login + +### US-001: Admin Login +- **Sebagai** admin aplikasi Happy Farmer +- **Saya ingin** login ke aplikasi mobile menggunakan username/email dan password +- **Sehingga** saya dapat mengakses dashboard admin untuk mengelola data farmer + +**Kriteria Penerimaan:** +- Admin dapat memasukkan username/email dan password +- Sistem memvalidasi kredensial admin +- Jika berhasil, admin diarahkan ke dashboard utama +- Jika gagal, muncul pesan error yang jelas +- Session admin tersimpan untuk akses berikutnya + +## CRUD Farmer Operations + +### US-002: Lihat Daftar Farmer (Read) +- **Sebagai** admin yang sudah login +- **Saya ingin** melihat daftar semua farmer yang terdaftar +- **Sehingga** saya dapat memantau dan mengelola data farmer + +**Kriteria Penerimaan:** +- Menampilkan list farmer dengan informasi: nama, email, nomor telepon, lokasi +- Fitur pencarian berdasarkan nama atau email +- Pagination untuk daftar yang panjang +- Sorting berdasarkan nama, tanggal registrasi + +### US-003: Tambah Farmer Baru (Create) +- **Sebagai** admin yang sudah login +- **Saya ingin** menambah farmer baru ke dalam sistem +- **Sehingga** farmer dapat mulai menggunakan aplikasi + +**Kriteria Penerimaan:** +- Form input dengan field: nama, email, password, nomor telepon, alamat, tanggal lahir +- Validasi email unik dan format yang benar +- Validasi nomor telepon yang valid +- Konfirmasi setelah berhasil menambah farmer +- Error handling jika gagal menyimpan data + +### US-004: Lihat Detail Farmer (Read Detail) +- **Sebagai** admin yang sudah login +- **Saya ingin** melihat informasi lengkap seorang farmer +- **Sehingga** saya dapat memahami profil farmer secara detail + +**Kriteria Penerimaan:** +- Menampilkan semua informasi farmer termasuk foto profil +- Riwayat aktivitas farmer (training, kontrak, dll) +- Status aktif/non-aktif farmer +- Tombol untuk edit dan delete farmer + +### US-005: Edit Data Farmer (Update) +- **Sebagai** admin yang sudah login +- **Saya ingin** mengubah informasi farmer yang sudah ada +- **Sehingga** data farmer selalu akurat dan terkini + +**Kriteria Penerimaan:** +- Form pre-filled dengan data farmer yang akan diedit +- Validasi sama seperti saat create farmer +- Konfirmasi sebelum menyimpan perubahan +- Log perubahan untuk audit trail +- Update informasi updatedBy dan updatedAt + +### US-006: Hapus Farmer (Delete) +- **Sebagai** admin yang sudah login +- **Saya ingin** menghapus farmer dari sistem +- **Sehingga** data yang tidak relevan tidak tersimpan + +**Kriteria Penerimaan:** +- Konfirmasi sebelum menghapus (dialog/popup) +- Peringatan jika farmer memiliki data terkait (kontrak, training) +- Soft delete untuk menjaga integritas data +- Log aktivitas penghapusan + +## User Stories Tambahan + +### US-007: Logout Admin +- **Sebagai** admin yang sudah login +- **Saya ingin** logout dari aplikasi +- **Sehingga** session saya aman dan tidak dapat diakses orang lain + +### US-008: Filter dan Pencarian Farmer +- **Sebagai** admin yang sudah login +- **Saya ingin** memfilter farmer berdasarkan kriteria tertentu +- **Sehingga** saya dapat dengan mudah menemukan farmer yang dicari + +**Kriteria Penerimaan:** +- Filter berdasarkan status (aktif/non-aktif) +- Filter berdasarkan lokasi/wilayah +- Filter berdasarkan tanggal registrasi +- Kombinasi multiple filter + +## Prioritas Pengembangan + +1. **Epic 1: Authentication & Authorization** + - US-001: Admin Login + - US-007: Logout Admin + +2. **Epic 2: Farmer Management - Basic CRUD** + - US-002: Lihat Daftar Farmer + - US-003: Tambah Farmer Baru + - US-004: Lihat Detail Farmer + - US-005: Edit Data Farmer + - US-006: Hapus Farmer + +3. **Epic 3: Advanced Features** + - US-008: Filter dan Pencarian Farmer + +## Catatan Teknis + +- Semua operasi CRUD harus menggunakan API yang sudah didefinisikan +- Implementasi menggunakan state management yang sesuai (Redux/Context API) +- UI/UX harus responsive dan user-friendly +- Validasi client-side dan server-side +- Error handling yang comprehensive +- Loading states untuk semua operasi async \ No newline at end of file