8.9 KiB
8.9 KiB
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 CUIDuserId(String, Foreign Key): Referensi ke tabel User untuk autentikasifarmerCode(String, Unique): Kode unik petani format YYMMDDHHMM + sequence number (16 digit)name(String): Nama lengkap petaniphone(String, Optional): Nomor telepon utamaemail(String, Optional): Email address (bisa berbeda dengan User.email)
Personal Information
birthPlace(String, Optional): Tempat kelahirandateOfBirth(DateTime, Optional): Tanggal lahirgender(Gender Enum, Optional): Jenis kelamin (MALE/FEMALE/OTHER)maritalStatus(MaritalStatus Enum, Optional): Status pernikahanspouseName(String, Optional): Nama pasangan (jika menikah)familySize(Integer, Default: 0): Jumlah anggota keluargareligionId(String, Foreign Key): Referensi ke tabel ReligionnationalityId(String, Default: "indonesia"): Kewarganegaraan
Address & Location
address(String, Optional): Alamat lengkapvillage(String, Optional): Desa/kelurahandistrict(String, Optional): KecamatansubDistrict(String, Optional): Kabupaten/kotaprovince(String, Optional): ProvinsipostalCode(String, Optional): Kode poscountryId(String, Default: "indonesia"): Negaralatitude(Float, Optional): Koordinat lintanglongitude(Float, Optional): Koordinat bujuraddressGeoJson(JSON, Optional): Data lokasi dalam format GeoJSON
Documentation & Attachments
profilePhotoUrl(String, Optional): URL foto profilidCardFrontUrl(String, Optional): URL foto KTP bagian depanidCardBackUrl(String, Optional): URL foto KTP bagian belakang
Verification System
isVerified(Boolean, Default: false): Status verifikasiverificationDate(DateTime, Optional): Tanggal verifikasiverifiedBy(String, Optional): ID admin yang memverifikasiverificationNotes(String, Optional): Catatan verifikasi
Agricultural Background
farmingExperience(Integer, Optional): Pengalaman bertani (tahun)farmingStartDate(DateTime, Optional): Tanggal mulai bertanieducationLevelId(String, Foreign Key): Tingkat pendidikanoccupation(String, Optional): Pekerjaan utama selain bertanimonthlyIncome(Decimal, Optional): Estimasi pendapatan bulananlandOwnership(LandOwnership Enum, Optional): Status kepemilikan lahanprimaryCrop(String, Optional): Komoditas utamafarmingMethods(String Array): Metode bertani (organic, conventional, etc.)internetAccess(Boolean, Default: true): Akses internet
Emergency Contact
emergencyContactName(String, Optional): Nama kontak daruratemergencyContactPhone(String, Optional): Nomor telepon kontak daruratemergencyContactRelation(String, Optional): Hubungan dengan kontak darurat
Status & Metadata
status(FarmerStatus Enum, Default: ACTIVE): Status petaninotes(String, Optional): Catatan tambahanjoinedAt(DateTime, Default: now()): Tanggal bergabungcreatedAt(DateTime, Default: now()): Tanggal dibuatupdatedAt(DateTime, Auto-update): Tanggal terakhir diupdatecreatedBy(String, Optional): ID user yang membuat recordupdatedBy(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 petaniuserId: Relasi dengan userstatus: Filter berdasarkan statusjoinedAt: Sorting berdasarkan tanggal bergabung
Geographic Indexes
latitude, longitude: Pencarian berdasarkan lokasi geografis
Business Rules
Validation Rules
-
Unique Constraints:
farmerCodeharus unik dalam sistemuserIdharus unik (one-to-one dengan User)
-
Required Fields:
name: Wajib diisiuserId: Wajib diisi (foreign key)
-
Optional but Important:
phone: Sangat disarankan untuk komunikasiemail: 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