argument('date'); $column = (string) $this->option('column'); if (!$this->isValidDate($date)) { $this->error('Format tanggal harus YYYY-MM-DD.'); return Command::FAILURE; } if (!in_array($column, ['daftar', 'tanggalregis', 'tanggalsampel'], true)) { $this->error('Kolom tanggal hanya boleh: daftar, tanggalregis, tanggalsampel.'); return Command::FAILURE; } $records = Periksa::with('getPasien') ->whereDate($column, $date) ->orderBy($column) ->orderBy('id') ->get() ->map(fn (Periksa $periksa) => $this->mapPeriksaToRegisterPayload($periksa)) ->values(); $payload = [ 'tanggal' => $date, 'filter_column' => $column, 'total' => $records->count(), 'data' => $records, ]; $jsonOptions = JSON_UNESCAPED_SLASHES; if ($this->option('pretty')) { $jsonOptions |= JSON_PRETTY_PRINT; } $json = json_encode($payload, $jsonOptions); if ($json === false) { $this->error('Gagal membuat JSON.'); return Command::FAILURE; } if ($this->option('output')) { $output = (string) $this->option('output'); File::ensureDirectoryExists(dirname($output)); File::put($output, $json . PHP_EOL); $this->info('Export selesai: ' . $output); $this->info('Total data: ' . $records->count()); return Command::SUCCESS; } $this->line($json); return Command::SUCCESS; } private function mapPeriksaToRegisterPayload(Periksa $periksa): array { $pasien = $periksa->getPasien; $tanggalLahir = $this->formatDate($periksa->tgllahirpasien ?? $pasien?->tgl_lahir); $tanggalRegis = $this->formatDate($periksa->tanggalregis) ?: $this->formatDate($periksa->daftar); $tanggalSampel = $this->formatDate($periksa->tanggalsampel) ?: $tanggalRegis; $diagnosa = $periksa->klinis ?: null; $klinisi = $periksa->klinisi ?: null; return [ 'norm' => $periksa->noregister, 'nama' => $periksa->nmpasien, 'alamat' => $periksa->alamatpasien ?: config('global.addressapps'), 'kota' => $pasien?->kota ?: config('global.subdomainapps'), 'tgllahir' => $tanggalLahir ?: date('Y-m-d'), 'nohap' => $periksa->tlppasien ?: '0000000000', 'kelamin' => $periksa->jkpasien ?: 'L', 'urgensi' => $periksa->urgensi ?: 'Elective', 'beratbadan' => (string) ($periksa->berat ?? '0'), 'nik' => $periksa->ktp ?: '0', 'nobpjs' => $periksa->bpjs ?: '0', 'drpeminta' => $klinisi, 'asalpasien' => $periksa->asalpasien, 'diagnosa' => $diagnosa, 'statusbayar' => null, 'nomor_lab' => $periksa->orderid, 'jenispembayaran' => $periksa->asuransi ?: 'UMM', 'klinisi' => $klinisi, 'jenispemeriksaan' => $periksa->reques, 'spesimen' => $periksa->nm_spesimen, 'kodespesimen' => $periksa->kd_spesimen, 'pengambilan' => $periksa->pengambilan, 'keteranganrujukan' => $periksa->nmrs ?: 'RSSA Malang', 'namarspengirim' => $periksa->nmrs ?: 'RSSA Malang', 'tanggalregis' => $tanggalRegis ?: date('Y-m-d'), 'tanggalsampel' => $tanggalSampel ?: date('Y-m-d'), 'asalpengirim' => $periksa->asalpengirim, ]; } private function isValidDate(string $date): bool { try { $parsed = Carbon::createFromFormat('Y-m-d', $date); } catch (\Throwable) { return false; } return $parsed && $parsed->format('Y-m-d') === $date; } private function formatDate(mixed $value): ?string { if (!$value) { return null; } try { return Carbon::parse($value)->format('Y-m-d'); } catch (\Throwable) { return null; } } }