$model?->jenis_koperasi]; } public function dependencies(): array { $when = fn (string $field, array $values, string $source = 'form') => [ 'field' => $field, 'values' => $values, 'source' => $source, ]; $simpanPinjam = $when('jenis_koperasi', [JenisKoperasi::SIMPAN_PINJAM->value], 'profile'); $komoditas = array_map(fn ($case) => $case->value, array_filter( KomoditasAgregasiKoperasi::cases(), fn ($case) => $case !== KomoditasAgregasiKoperasi::TIDAK_TERLIBAT, )); $agregasi = $when('agregasi_komoditas', $komoditas); return [ 'tahun_ad_art' => [$when('ad_art', [StatusAdArtKoperasi::LENGKAP->value])], 'layanan_lainnya' => [$when('layanan_koperasi', [LayananKoperasi::LAINNYA->value])], 'format_pembukuan' => [$when('status_pembukuan', [StatusPembukuanKoperasi::SUDAH->value])], 'pertemuan_lainnya' => [$when('pertemuan_rutin', [FrekuensiPertemuanKoperasi::LAINNYA->value])], 'kasus_kredit_macet' => [$simpanPinjam], 'sanksi_kredit_macet' => [$simpanPinjam], 'efektivitas_sanksi' => [$simpanPinjam, $when('sanksi_kredit_macet', [KetersediaanKoperasi::ADA->value])], 'faktor_manajemen_lainnya' => [$when('faktor_manajemen', [FaktorManajemenKoperasi::LAINNYA->value])], 'agregasi_komoditas' => [$when('keterlibatan_rantai_nilai', [PeranRantaiNilaiKoperasi::AGREGASI->value])], 'agregasi_komoditas_lainnya' => [$when('agregasi_komoditas', [KomoditasAgregasiKoperasi::LAINNYA->value])], 'fasilitas_koperasi' => [$agregasi], 'fasilitas_lainnya' => [$when('fasilitas_koperasi', [FasilitasKoperasi::LAINNYA->value])], 'pengolahan_lanjutan' => [$agregasi], 'detail_pengolahan_lanjutan' => [$when('pengolahan_lanjutan', [JawabanYaTidakKoperasi::YA->value])], 'cara_penentuan_harga' => [$agregasi], 'kontrak_offtaker' => [$agregasi], 'kontrak_komoditas' => [$when('kontrak_offtaker', [KetersediaanKoperasi::ADA->value])], 'standar_sortasi' => [$when('praktik_sortasi', [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value])], 'cara_pengeringan' => [$when('praktik_pengeringan', [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value])], 'model_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])], 'proses_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])], 'harga_premium_rupiah' => [$this->postHarvestCondition()], 'harga_premium_persen' => [$this->postHarvestCondition()], ]; } public function requiredFields(): array { return [ 'tahun_ad_art', 'layanan_lainnya', 'format_pembukuan', 'pertemuan_lainnya', 'efektivitas_sanksi', 'faktor_manajemen_lainnya', 'agregasi_komoditas', 'agregasi_komoditas_lainnya', 'fasilitas_lainnya', 'detail_pengolahan_lanjutan', 'kontrak_komoditas', 'standar_sortasi', 'cara_pengeringan', 'model_fermentasi', 'proses_fermentasi', ]; } protected function arrayFields(): array { return ['agregasi_komoditas', 'fasilitas_koperasi', 'model_fermentasi']; } public function sectionFields(BagianOperasionalKoperasi $section): array { return match ($section) { BagianOperasionalKoperasi::PENGELOLAAN => [ 'ad_art', 'tahun_ad_art', 'layanan_koperasi', 'layanan_lainnya', 'pelatihan_produksi', 'pelatihan_pascapanen', 'pelatihan_pengolahan', 'pelatihan_keuangan', 'pelatihan_pemasaran', 'pelatihan_lainnya', 'status_pembukuan', 'format_pembukuan', 'pertemuan_rutin', 'pertemuan_lainnya', 'kasus_kredit_macet', 'sanksi_kredit_macet', 'efektivitas_sanksi', 'faktor_manajemen', 'faktor_manajemen_lainnya', ], BagianOperasionalKoperasi::RANTAI_NILAI => [ 'keterlibatan_rantai_nilai', 'agregasi_komoditas', 'agregasi_komoditas_lainnya', 'fasilitas_koperasi', 'fasilitas_lainnya', 'pengolahan_lanjutan', 'detail_pengolahan_lanjutan', 'cara_penentuan_harga', 'kontrak_offtaker', 'kontrak_komoditas', 'praktik_sortasi', 'standar_sortasi', 'praktik_pengeringan', 'cara_pengeringan', 'praktik_fermentasi', 'model_fermentasi', 'proses_fermentasi', 'harga_premium_rupiah', 'harga_premium_persen', ], }; } private function postHarvestCondition(): array { return ['any' => [ ['field' => 'pengolahan_lanjutan', 'source' => 'form', 'values' => [JawabanYaTidakKoperasi::YA->value]], ['field' => 'praktik_sortasi', 'source' => 'form', 'values' => [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value]], ['field' => 'praktik_pengeringan', 'source' => 'form', 'values' => [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value]], ['field' => 'praktik_fermentasi', 'source' => 'form', 'values' => [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value]], ]]; } public function normalize(array $data, array $context): array { $data = parent::normalize($data, $context); if (($data['status_pembukuan'] ?? null) === StatusPembukuanKoperasi::BELUM->value) { $data['format_pembukuan'] = FormatPembukuanKoperasi::TIDAK_ADA->value; } return $data; } }