FarmerDeck'in staging ortamındaki ilk kararlı derlemesini yayınlıyoruz. Bu sürüm, çiftlikten tarlaya, ürün döngüsünden finansal takibe kadar günlük operasyonun tüm temel akışlarını uçtan uca içerir.
Genel Bakış
- Kişisel hesaplar için tek çiftlik modeli (
accounts.is_personal_account) üzerine kurulu çok kiracılı veri izolasyonu. - Tüm kullanıcı yazma işlemleri RLS + yardımcı fonksiyonlar (
has_role_on_account,has_permission) ile korunur. - Sunucu tarafı doğrulama
next-safe-actionile, veri erişimi isegetSupabaseServerClientüzerinden yapılır.
Çiftlik ve Parseller
- 2 adımlı onboarding sihirbazı: çiftlik bilgileri + ilk parsel.
complete_onboardingRPC'si tek işlemde çiftlik, parsel ve (opsiyonel) ekini kaydeder.- Çiftlik alanları: ad, slug, ülke kodu (ISO 3166 alpha-2), il, ilçe, enlem/boylam, saat dilimi (varsayılan
Europe/Istanbul), toplam alan. - Çiftlik başına parsel listesi ve toplam alan hesabı.
- TR için 81 il, il seçimine bağlı ilçe kademeli seçim.
Ürün Döngüsü ve Tarla Olayları
- Durum makinesi:
planned→planted→growing→harvested/failed. - Olay tipleri:
planting,irrigation,fertilization,pesticide,harvest,note. - Ürün döngüsü detayında timeline (olayların yatay çubuk üzerinde gösterimi) ve takvim görünümü.
- Hasat kaydı (
RecordHarvestSchema): tarih, miktar, birim.
Görevler
- Manuel görev oluşturma: başlık, açıklama, teslim tarihi.
- Görev kaynakları:
manual,auto_weather,auto_low_stock,auto_maintenance,auto_harvest. - Durumlar:
pending,completed,cancelled. - Dashboard'daki "Yaklaşan görevler" kartı,
v_upcoming_tasksgörünümü üzerinden 7 gün içindeki bekleyen görevleri listeler.
Ekipman ve Bakım
- Ekipman tipleri:
tractor,trailer,plow,pump,harvester,other. - Durumlar:
active,maintenance,broken,sold. - Bakım olay tipleri:
oil_change,tire,general,repair,inspection. - Bakım maliyeti girildiğinde
create_maintenance_expensetrigger'ımaintenancekategorili bir finans kaydı oluşturur vetransaction_idalanını bağlar. - 7 gün içinde bakım zamanı gelen aktif ekipmanlar için "Bakım hatırlatması" özet görevi (günde en fazla bir kez).
Stok ve Envanter
- Kategoriler:
seed,fertilizer,pesticide,feed,product,other. - Birimler:
kg,liter,bag,piece,ton. current_quantityalanıkit.update_inventory_current_quantitytrigger'ı tarafından yönetilir; istemci tarafından doğrudan güncellenemez.create_inventory_item_with_balance: Stok kartı + açılış bakiyesi tek işlemde.record_inventory_in: Stok girişi + opsiyonel gider finans kaydı (kategoriye göreseed/fertilizer/pesticide/feed/other).record_inventory_out: Stok çıkışı + parsel/ürün bağlıysa otomatikfarm_eventsolayı (kategoriye göreplanting/fertilization/pesticide/note).record_inventory_sale: Envanter çıkışı +salegelir kaydı atomik.- Saatlik pg_cron (
farmerdeck-low-stock-tasks)current_quantity <= min_thresholdolan kalemler için açıkauto_low_stockgörevi yoksa yeni görev oluşturur. v_low_stockgörünümü dashboard'daki "Düşük stok" kartında listelenir.
Finans
- Manuel gelir/gider kaydı: tür, kategori, tutar, TRY varsayılan para birimi, tarih, parsel/ürün/ekipman/envanter bağlantıları.
- Kategoriler:
seed,fertilizer,pesticide,labor,fuel,feed,maintenance,sale,other. - Dönem görünümleri: bu ay, geçen ay, bu yıl.
get_monthly_profit_lossve istemci tarafı yıllık toplam. get_parcel_profitability(parcel_id, from_date, to_date)parsel bazlı gelir/gider/net + kategori dökümü.- Otomatik finans kayıtları bakım maliyeti, stok girişi ve stok satışından üretilir;
source = 'auto_*'ile işaretlenir.
Hava Uyarıları
- Open-Meteo
/v1/forecastentegrasyonu (API anahtarı gerektirmez).revalidate: 900(15 dakika) önbellek. - 7 günlük tahmin;
temperature_2m_max,temperature_2m_min,precipitation_sum,wind_speed_10m_max,weather_code. - Uyarı kuralları: don (
temp_min <= 0), aşırı yağış (precipitation >= 30), dolu (WMO 96/99), fırtına (WMO ≥ 95), sıcak hava dalgası (temp_max >= 38). app/api/cron/weather-sync6 saatlik Vercel Cron;CRON_SECRETile korunanGETçağrısı çiftlikleri 5'li gruplar halinde paralel işler.weather_alerts_farm_risk_forecast_uidxunique index'i ile tekil uyarı garantisi.- Orta ve yüksek riskli uyarılar için
create_weather_alert_tasktrigger'ıauto_weathergörevi oluşturur veweather_alerts.task_idalanını bağlar. weather_alertstablosuauthenticatediçin salt okunur;supabase_realtimepublication'ına dahildir.
Çiftlik Davetleri ve Çiftlik-Bazlı Finans İzni
- Çiftlik sahibi (
account_idsahibi) çiftliğinemanagerveyaviewerrolünde yönetici davet eder. - Davet
farm_invitationstablosunda 7 gün geçerli UUID token ile saklanır;farm_id, emailçifti benzersizdir. EMAIL_SENDERveNEXT_PUBLIC_SITE_URLtanımlıysaassignFarmMemberActionüzerinden davet e-postası gönderilir; gönderim başarısız olursa davet kaydı otomatik silinir.farm-invitations/joinsayfasında davet kabul edilir;accept_farm_invitationRPC'si token süresini ve davet edilen e-posta ile oturum e-postasının birebir eşleşmesini doğrular.- Kabul sonrası kullanıcı
farm_memberstablosuna eklenir (veya mevcut üyenin rolü güncellenir) ve davet kaydı silinir. - Üyeler için çiftlik-bazlı finans erişim seviyesi:
none,view(finance.view),manage(finance.view+finance.manage). İzinlerfarm_member_permissionstablosunda tutulur. - Çiftlik sahibi bekleyen davetleri iptal edebilir; üyeleri çiftlikten çıkarabilir.
Veri Bütünlüğü ve Güvenlik
kit.assert_same_account_referencestrigger'ı;parcels,crop_cycles,farm_events,equipment,equipment_maintenance_events,inventory_items,inventory_transactionsveweather_alertstablolarında yabancı anahtar alanlarının aynı hesaba ait olmasını yazma anında doğrular.kit.protect_account_fieldstetikleyicisi,accountstablosundaid,is_personal_account,primary_owner_user_idveemailalanlarının istemci tarafından değiştirilmesini engeller.- Tüm tablolarda RLS etkin;
service_rolesistem yazma işlemleri için ayrılmıştır. kit.update_inventory_current_quantitytrigger'ıservice_roleile çalışır; kullanıcılarcurrent_quantityalanını doğrudan güncelleyemez.record_inventory_sale,record_inventory_in,record_inventory_outvecreate_inventory_item_with_balanceRPC'leri atomik işlemlerdir: bir adım başarısız olursa tümü geri alınır.
Bilinen Kapsam Dışı Öğeler
Bu sürüm aşağıdaki öğeleri içermez:
- Ekip üyelerinin (team accounts) FarmerDeck'e taşınması; yalnızca kişisel hesaplar için hazırdır.
- Mobil uygulama; yalnızca web uygulaması.
- Çoklu dil gövdesinin çevirisi; altyapı hazır, çeviri dosyaları ileride eklenecek.
- E-posta/SMS bildirim kanalları; e-posta yalnızca çiftlik davetlerinde kullanılır.
Doğrulama
Sürüm; 345 pgTAP veritabanı testi, Supabase DB lint ve ilgili TypeScript typecheck kontrolleriyle doğrulandı.