roadmap/model_documentation/farmer_model_documentation.md

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 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