Cara Kerja & Alur Data

Dasbor ini itu ujungnya pipa data analitik yang utuh. Sengaja dibangun pakai perkakas standar industri biar alurnya kelihatan semua, bukan cuma grafik doang.

Sumber data (gratis semua)

Sumber Isinya apa Kunci
Open-Meteo Archive cuaca harian per kebun — suhu, hujan, angin, lengas tanah, ET0, kelembapan tanpa kunci
Open-Meteo Forecast ramalan 7 hari per kebun (variabel sama) tanpa kunci
Frankfurter (ECB) kurs acuan harian USD → IDR tanpa kunci
Nager.Date kalender tanggal merah Indonesia tanpa kunci
World Bank Pink Sheet harga bulanan sawit & minyak kedelai tanpa kunci

Tiap sedot data dicoba live dulu (3x retry), gagal ya pakai data cadangan yang deterministik — jadi pipa dan CI-nya selalu bisa jalan offline. Yang penting nggak diam-diam: ingestion/load_raw.py nulis ingestion_manifest.json per sumber (live vs synthetic), dan job terjadwal GitHub Actions ngasih warning kalau ada yang cadangan. Mau galak? --require-live biar langsung gagal aja.

Lapisan olahan (dbt)

  • mentah (DuckLake) — mentahan API mendarat di katalog DuckLake (palm_lake/): file parquet + snapshot ACID. Tiap sedotan harian = satu snapshot.
  • staging (stg_*) — satu model bersih per sumber
  • intermediate (int_*) — logika bisnis: tulang tanggal, harga & kurs dimajuin harian (ASOF join), aturan agronomi via macro agronomy_signals bareng-bareng
  • mart ramalan (fct_estate_forecast_7day) — perencana 7 hari per kebun (H+1..7), harga dianggap stagnan
  • lapisan semantik — definisi metrik baku (_marts__semantic.yml) dikompilasi jadi view sl_metrics_daily
  • mart — bintang Kimball: dim_date (flag weekend + libur), dim_region, fct_estate_operations_daily (incremental), fct_commodity_price_daily (dikontrak)

Praktik yang dipamerkan

  • 4 sumber beda rupa + cek kesegaran sumber
  • raw DuckLake nyuapin warehouse DuckDB
  • Modelling berlapis + seeds
  • Materialisasi incremental + snapshot SCD2 harga
  • Kontrak model, tes kualitas data, unit test dbt
  • CI/CD: dbt build tiap push/PR + refresh harian 00:00 UTC

Perencana 7 hari

Perencana 7 Hari pakai aturan agronomi yang sama ke jendela ramalan (H+1 → H+7). Harga dianggap stagnan di angka terakhir — jujur mana yang ramalan mana yang fakta.

Tambah kebunmu sendiri (khusus Indonesia)

Wilayah nggak di-hardcode — daftarnya di seeds/region_profile.csv. Cara nambah kebunmu:

  1. Tambah satu baris ke seeds/region_profile.csv (region_key, planted_hectares, yield_t_ha, estate_manager, latitude, longitude, island) plus baris biaya pasangannya di seeds/cost_assumptions.csv. Koordinat wajib dan harus di dalam Indonesia (lat −11…6, lon 95…141) — di luar itu ditolak mentah-mentah.
  2. Jalanin python ingestion/load_raw.py (baca daftar itu; --regions lain.csv atau PALM_REGIONS=lain.csv buat override) terus dbt build --profiles-dir ..
  3. Build-nya gagal berisik kalau ada kebun yang belum ada baris biayanya (assert_margin_covers_all_regions).

Keputusan yang dibantu

Cuaca hari ini + harga sawit rupiah → kebun mana yang gas mupuk, manen, nyemprot, dan sehari panen yang bagus itu cuannya berapa? Hari panen efektif syarat tambahannya: timnya masuk (bukan weekend/tanggal merah).

Otomatisasi & pantauan

  • Jadwal: dua workflow jalan tiap push/pull_request, plus schedule: cron '0 0 * * *' (00:00 UTC) dan tombol manual workflow_dispatch.
  • E2E terjadwal: workflow Pages ngerjain semuanya — pip install → dbt deps → python ingestion/load_raw.py → dbt build → freshness → cp palm.duckdb → npm run build → deploy ke gh-pages.
  • Pantauan: tiap jalan, manifest + status kesegaran ditempel ke ringkasan Actions; kalau jadwal gagal, dibikinin Issue otomatis (nggak dobel-dobel).

Sumber: github.com/itw-code/palm-analytics-dbt