From 0891978d46e98156b0ff1500ab6165b7fc3e36e4 Mon Sep 17 00:00:00 2001 From: Dwi Swandhana Date: Sat, 1 Aug 2026 17:02:31 +0700 Subject: [PATCH] update --- htdocs/README.md | 48 ++++ .../Commands/SendRegisterApiExportCommand.php | 115 +++++++++ .../Http/Controllers/FrontpageController.php | 228 ++++++++++++++++++ htdocs/routes/web.php | 2 + 4 files changed, 393 insertions(+) create mode 100644 htdocs/app/Console/Commands/SendRegisterApiExportCommand.php diff --git a/htdocs/README.md b/htdocs/README.md index 8e238943..3d39d30a 100644 --- a/htdocs/README.md +++ b/htdocs/README.md @@ -260,6 +260,54 @@ Format JSON yang dihasilkan: } ``` +### Simulasi Kirim Data Seperti SIMRS + +Setelah file JSON dibuat dari `register-api:export`, data dapat dikirim ulang ke endpoint `registerApi` seolah-olah berasal dari SIMRS. + +Tes tanpa mengirim data: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --dry-run +``` + +Kirim ke endpoint default dari `APP_URL/registerpasien`: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json +``` + +Kirim ke endpoint tertentu: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json \ + --url=http://10.10.123.218/registerpasien +``` + +Batasi pengiriman untuk uji coba: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --limit=5 +``` + +Tambahkan jeda antar request, misalnya `500` milidetik: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --delay=500 +``` + +Berhenti jika ada request gagal: + +```bash +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --stop-on-error +``` + +Contoh alur lengkap: + +```bash +php artisan register-api:export 2026-08-01 --pretty --output=/home/mikro/project/export-register-api-2026-08-01.json +php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --url=http://10.10.123.218/registerpasien +``` + ## Kontribusi Jika Anda ingin berkontribusi pada proyek ini, silakan buat **pull request** atau **issue** terkait. diff --git a/htdocs/app/Console/Commands/SendRegisterApiExportCommand.php b/htdocs/app/Console/Commands/SendRegisterApiExportCommand.php new file mode 100644 index 00000000..256146e0 --- /dev/null +++ b/htdocs/app/Console/Commands/SendRegisterApiExportCommand.php @@ -0,0 +1,115 @@ +argument('file'); + if (!File::exists($file) || !is_readable($file)) { + $this->error('File JSON tidak ditemukan atau tidak bisa dibaca: ' . $file); + return Command::FAILURE; + } + + $content = File::get($file); + $decoded = json_decode($content, true); + if (!is_array($decoded)) { + $this->error('File bukan JSON valid.'); + return Command::FAILURE; + } + + $rows = $this->extractRows($decoded); + if (empty($rows)) { + $this->warn('Tidak ada data untuk dikirim.'); + return Command::SUCCESS; + } + + $start = max(0, (int) $this->option('start')); + $limit = max(0, (int) $this->option('limit')); + $delay = max(0, (int) $this->option('delay')); + $endpoint = $this->endpoint(); + + $rows = array_slice($rows, $start, $limit > 0 ? $limit : null); + $total = count($rows); + $success = 0; + $failed = 0; + + $this->info('Endpoint: ' . $endpoint); + $this->info('Total payload: ' . $total); + + foreach ($rows as $index => $payload) { + $sequence = $start + $index + 1; + $label = $payload['nomor_lab'] ?? $payload['norm'] ?? $sequence; + + if ($this->option('dry-run')) { + $this->line('[' . $sequence . '] DRY RUN ' . $label . ': ' . json_encode($payload, JSON_UNESCAPED_SLASHES)); + $success++; + continue; + } + + $response = Http::asJson() + ->acceptJson() + ->timeout(120) + ->post($endpoint, $payload); + + if ($response->successful()) { + $success++; + $this->line('[' . $sequence . '] OK ' . $label . ' HTTP ' . $response->status() . ' ' . $response->body()); + } else { + $failed++; + $this->error('[' . $sequence . '] GAGAL ' . $label . ' HTTP ' . $response->status() . ' ' . $response->body()); + + if ($this->option('stop-on-error')) { + break; + } + } + + if ($delay > 0 && $index < $total - 1) { + usleep($delay * 1000); + } + } + + $this->info('Selesai. Berhasil: ' . $success . ', gagal: ' . $failed); + + return $failed > 0 ? Command::FAILURE : Command::SUCCESS; + } + + private function extractRows(array $decoded): array + { + if (isset($decoded['data']) && is_array($decoded['data'])) { + return $decoded['data']; + } + + if (array_is_list($decoded)) { + return $decoded; + } + + return [$decoded]; + } + + private function endpoint(): string + { + $url = (string) $this->option('url'); + if ($url !== '') { + return $url; + } + + return rtrim((string) config('app.url'), '/') . '/registerpasien'; + } +} diff --git a/htdocs/app/Http/Controllers/FrontpageController.php b/htdocs/app/Http/Controllers/FrontpageController.php index d40186cb..d4d5ab5b 100644 --- a/htdocs/app/Http/Controllers/FrontpageController.php +++ b/htdocs/app/Http/Controllers/FrontpageController.php @@ -1542,6 +1542,234 @@ class FrontpageController extends Controller } return response()->json(['status' => 'Sukses', 'message' => $pesan], 201); + } + public function registerApiUlang(Request $request) { + $decodedData = $request->json()->all(); + $norm = $decodedData['norm'] ?? null; + $nama = $decodedData['nama'] ?? null; + $alamat = $decodedData['alamat'] ?? config('global.addressapps'); + $kota = $decodedData['kota'] ?? config('global.subdomainapps'); + $tgllahir = $decodedData['tgllahir'] ?? date('Y-m-d'); + $nohap = $decodedData['nohap'] ?? '0000000000'; + $jk = $decodedData['kelamin'] ?? 'L'; + $urgensi = $decodedData['urgensi'] ?? 'Elective'; + $berat = $decodedData['beratbadan'] ?? '0'; + $nik = $decodedData['nik'] ?? '0'; + $bpjs = $decodedData['nobpjs'] ?? '0'; + $drpeminta = $decodedData['drpeminta'] ?? null; + $tlsasal = $decodedData['asalpasien'] ?? null; + $diagnosa = $decodedData['diagnosa'] ?? null; + $statusbayar = $decodedData['statusbayar'] ?? null; + $notransaksi = $decodedData['nomor_lab'] ?? null; + $insurance = $decodedData['jenispembayaran'] ?? 'UMM'; + $klinis = $decodedData['diagnosa'] ?? $decodedData['klinisi'] ?? null; + $klinisi = $decodedData['klinisi'] ?? $drpeminta; + $rekues = $decodedData['jenispemeriksaan'] ?? null; + $nm_spesimen = $decodedData['spesimen'] ?? null; + $kd_spesimen = $decodedData['kodespesimen'] ?? null; + $pengambilan = $decodedData['pengambilan'] ?? null; + $nmrs = $decodedData['keteranganrujukan'] ?? $decodedData['namarspengirim'] ?? 'RSSA Malang'; + $tanggalregis = $decodedData['tanggalregis'] ?? date('Y-m-d'); + $tanggalsampel = $decodedData['tanggalsampel'] ?? date('Y-m-d'); + $asalpengirim = $decodedData['asalpengirim'] ?? null; + $nofoto = $decodedData['nomorlab'] ?? ''; + $telpon = str_replace('_', '', $nohap); + $tlsasal = str_replace('_', ' ', $tlsasal); + $klinisi = str_replace('_', ' ', $klinisi); + $nama = str_replace('_', ' ', $nama); + $alamat = str_replace('_', ' ', $alamat); + $getkodespesimen= Organisms::where('name', $nm_spesimen)->where('kelompok', 'listkodespesimen')->first(); + if (isset($getkodespesimen->category)){ + $kd_spesimen= $getkodespesimen->category; + } else { + Organisms::create([ + 'name' => $nm_spesimen, + 'category' => $kd_spesimen, + 'kelompok' => 'listkodespesimen' + ]); + } + $iddokter = ''; + $ruangan = 1; + $kelompok = 'admin'; + $daftar = date('Y-m-d H:i:s'); + $mulai = $daftar; + $tambah = ' + 360 second'; + $akhir = date('Y-m-d h:i:s',strtotime($tambah,strtotime($daftar))); + $start = strtotime(date("Y-m-d H:i:s",strtotime($mulai))); + $finish = strtotime(date("Y-m-d H:i:s",strtotime($akhir))); + $tglsekarang = date('Y-m-d'); + $noregister = strtoupper($norm); + $yy = date("Y"); + $mm = date("m"); + $terjadwal = 'sekarang'; + $kamar = 'Mikrobiologi'; + $pasien_id = 0; + $tgllahir = \Carbon\Carbon::createFromFormat('Y-m-d', $tgllahir); + $pasien = Pasien::where('norm', $noregister)->first(); + try { + if (isset($pasien->id)) { + $pasien_id = $pasien->id; + Pasien::where('norm', $noregister)->update([ + 'nama' => $nama, + 'jk' => $jk, + 'tgl_lahir' => $tgllahir, + 'kota' => $kota, + 'telpon' => $telpon, + 'nik' => $nik, + 'bpjs' => $bpjs, + ]); + } else { + $alamatbaru = substr($alamat, 0, 100); + $pasien_id = Pasien::insertGetId([ + 'norm' => $noregister, + 'nama' => $nama, + 'jk' => $jk, + 'tgl_lahir' => $tgllahir, + 'kota' => $kota, + 'telpon' => $telpon, + 'alamat' => $alamatbaru, + 'nik' => $nik, + 'bpjs' => $bpjs, + ]); + } + } catch (\Exception $e) { + Log::error('Error in register Pasien: '.$e->getMessage()); + } + + $datetime = new DateTime($tgllahir); + $today = new DateTime(); + $diff = $today->diff($datetime); + $tahun = $diff->y; + $bulan = $diff->m; + + if ($tahun ==0) { + $usia = $bulan." Bulan"; + } else { + $usia = $tahun." Tahun, ". $bulan. " Bulan"; + } + $jruang = Ruangan::where('id', $ruangan)->first(); + if (isset($jruang->ruangan)){ + $kamar = $jruang->ruangan; + } else { $kamar = '-'; $ruangan = 1; } + $tahuncari = date("Y"); + $noloketsaja = explode('-', $nofoto); + $noloket = $noloketsaja[1] ?? 0; + $noloket = int($noloket); + $code_poli = 'Mikrobiologi'; + $dlp = ''; + $check = Poli::where('subpoli', $rekues)->first(); + if (isset($check->id)){ + $poli_id = $check->id; + $kd_spesimen= $check->subsubpoli; + $nm_spesimen= $check->modaliti; + $dlp = $check->kelompok; + } else { + $poli_id = Poli::insertGetId([ + 'poli' => 'Mikrobiologi', + 'subpoli' => $rekues, + 'subsubpoli' => $kd_spesimen, + 'modaliti' => $nm_spesimen, + ]); + } + if ($iddokter == ''){ + $iddokter = 0; + $dokter = null; + } else { + $getdokter = User::where('id', $iddokter)->first(); + if (isset($getdokter->nama)){ + $dokter = $getdokter->nama; + } else { $dokter = 'Dokter Spesialis'; } + } + $clientIp = $request->server('HTTP_X_FORWARDED_FOR') ?: $request->ip(); + $clientIpNumeric = ip2long($clientIp); + if ($nofoto == ''){ + return response()->json(['status' => 'Gagal', 'message' => 'Nomor Sample Tidak Boleh Kosong'], 500); + } else { + $ceksudahada = Periksa::where('noregister', $noregister)->where('orderid', $notransaksi)->where('poli_id', $poli_id)->first(); + if (isset($ceksudahada->id)){ + $pesan = $ceksudahada->nofoto; + } else { + $periksaid = Periksa::insertGetId([ + 'mulai' => $mulai, + 'akhir' => $akhir, + 'noloket' => $noloket, + 'nofoto' => $nofoto, + 'noregister' => $noregister, + 'asalpasien' => $tlsasal, + 'nmrs' => $nmrs, + 'pasien_id' => $pasien_id, + 'nmpasien' => $nama, + 'jkpasien' => $jk, + 'ktp' => $nik, + 'bpjs' => $bpjs, + 'tgllahirpasien'=> $tgllahir, + 'tlppasien' => $telpon, + 'alamatpasien' => $alamat, + 'reques' => $rekues, + 'usia' => $usia, + 'berat' => $berat, + 'ruangan_id' => $ruangan, + 'ruangan' => $kamar, + 'klinisi' => $klinisi, + 'klinis' => $klinis, + 'poli_id' => $poli_id, + 'kd_spesimen' => $kd_spesimen, + 'nm_spesimen' => $nm_spesimen, + 'keterangan' => '', + 'kesimpulan' => $decodedData['spesimen'] ?? $nm_spesimen ?? null, + 'asuransi' => $insurance, + 'urgensi' => $urgensi, + 'daftar' => $mulai, + 'dlp' => $dlp, + 'pengambilan' => $pengambilan, + 'tanggalregis' => $tanggalregis, + 'tanggalsampel' => $tanggalsampel, + 'pendaftar' => $clientIpNumeric, + 'nmpendaftar' => $clientIp, + 'asalpengirim' => $asalpengirim, + 'orderid' => $notransaksi, + ]); + $pesan = $nofoto; + $daftaridtcm = [79,80,81,82,83,84,203, 14,28,55,62,94,104,105,124,138,146]; + if (in_array($poli_id, $daftaridtcm)){ + $genexpert = false; + } else { + $genexpert = true; + } + + Paslab::updateOrCreate( + [ + 'rnoreg' => $nofoto, + ], + [ + 'nama' => $nama, + 'norm' => $noregister, + 'rtglast' => $mulai, + 'alamat' => $alamat, + 'rjenis' => $jk, + 'umur' => $usia, + 'namadok' => $nik, + 'ruangan' => $tlsasal, + 'tes' => $rekues, + 'alat' => 'ALL', + 'kd_spesimen' => $kd_spesimen, + 'nm_spesimen' => $nm_spesimen, + 'tgllahir' => $tgllahir, + 'flg_vitek1' => false, + 'flg_vitek2' => false, + 'flg_bd1' => false, + 'flg_bd2' => true, + 'flg_gxp1' => $genexpert, + 'flg_gxp2' => $genexpert, + 'flg_gxp3' => $genexpert, + 'flg_vitek3' => false, + ] + ); + } + return response()->json(['status' => 'Sukses', 'message' => $pesan], 201); + } + + } public function register(Request $request) { $validator = Validator::make($request->all(), [ diff --git a/htdocs/routes/web.php b/htdocs/routes/web.php index 8937dc64..50aecd6a 100644 --- a/htdocs/routes/web.php +++ b/htdocs/routes/web.php @@ -27,6 +27,8 @@ Route::get('label/{id}', [DokterController::class, 'ctkLabel']); Route::get('cekandroid/{firebaseid}', [AuthController::class, 'cekandroid']); Route::get('mobile/expertise/{periksa}', [MobileApiController::class, 'openExpertise']); Route::post('registerpasien', [FrontpageController::class, 'registerApi']); +Route::post('registerulang', [FrontpageController::class, 'registerApiUlang']); + Route::post('registerjson', [FrontpageController::class, 'registerApiFormatJSON']); Route::post('prosesbatal', [DokterController::class, 'cancelOrder']); Route::post('ekstrakhasil', [DokterController::class, 'gethasiltoSIMRS'])->name('gethasiltoSIMRS');