update
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class SendRegisterApiExportCommand extends Command
|
||||
{
|
||||
protected $signature = 'register-api:send-export
|
||||
{file : Path file JSON hasil register-api:export}
|
||||
{--url= : URL endpoint registerApi, default APP_URL/registerpasien}
|
||||
{--delay=0 : Jeda antar kirim dalam milidetik}
|
||||
{--limit=0 : Batasi jumlah data yang dikirim, 0 berarti semua}
|
||||
{--start=0 : Mulai dari index data ke-n, 0 berarti dari awal}
|
||||
{--dry-run : Tampilkan payload tanpa mengirim}
|
||||
{--stop-on-error : Berhenti jika ada request gagal}';
|
||||
|
||||
protected $description = 'Simulasi kirim payload registerApi dari file JSON export seolah-olah dikirim oleh SIMRS.';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$file = (string) $this->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';
|
||||
}
|
||||
}
|
||||
@@ -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(), [
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user