# Farm Depreciation Manual Inputs Import Command ini dipakai untuk bulk import data ke tabel `farm_depreciation_manual_inputs` dari file Excel (`.xlsx`). ## Command ```bash go run ./cmd/import-farm-depreciation-manual-inputs --file [--sheet ] [--apply] ``` ## Flags - `--file` (required): path file `.xlsx`. - `--sheet` (optional): nama sheet. Jika tidak diisi, command pakai sheet pertama. - `--apply` (optional): default `false` (dry-run). Jika `true`, command menulis ke database. ## Mode - Dry-run (default): - parsing dan validasi semua baris. - validasi `project_flock_id` terhadap farm aktif kategori `LAYING`. - menampilkan `PLAN` + daftar error. - tidak menulis data. - Apply (`--apply`): - semua validasi tetap dijalankan dulu. - jika ada 1 error, proses dihentikan. - jika valid, upsert dijalankan dalam 1 transaksi (fail-fast). - setelah upsert, snapshot di `farm_depreciation_snapshots` dihapus mulai `cutover_date` untuk `project_flock_id` terkait. ## Format Excel Template tersedia di: - `docs/templates/farm_depreciation_manual_inputs.xlsx` Header wajib ada di baris 1 (case-insensitive, trim-spaces): - `project_flock_id` (required, integer > 0) - `total_cost` (required, numeric >= 0) - `cutover_date` (required, format `YYYY-MM-DD`) - `note` (optional, max 1000 karakter) Catatan: - Dalam 1 file tidak boleh ada duplikat `project_flock_id`. - `project_flock_id` harus mengarah ke `project_flocks` yang `deleted_at IS NULL` dan `category = LAYING`. ## Contoh Dry-run: ```bash env DB_HOST=127.0.0.1 DB_PORT=5432 DB_NAME=lti DB_USER=postgres DB_PASSWORD=postgres \ go run ./cmd/import-farm-depreciation-manual-inputs \ --file docs/templates/farm_depreciation_manual_inputs.xlsx ``` Apply: ```bash env DB_HOST=127.0.0.1 DB_PORT=5432 DB_NAME=lti DB_USER=postgres DB_PASSWORD=postgres \ go run ./cmd/import-farm-depreciation-manual-inputs \ --file /path/to/farm_depreciation_manual_inputs.xlsx \ --sheet manual_inputs \ --apply ``` ## Error Umum - `required header is missing`: header wajib tidak ditemukan. - `must be a positive integer`: `project_flock_id` bukan integer valid. - `must be greater than or equal to 0`: `total_cost` negatif. - `must follow format YYYY-MM-DD`: `cutover_date` tidak sesuai format. - `duplicate value ...`: `project_flock_id` duplikat dalam file yang sama. - `must reference an active LAYING project_flock`: farm tidak valid untuk import ini.