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
|
## Kontribusi
|
||||||
Jika Anda ingin berkontribusi pada proyek ini, silakan buat **pull request** atau **issue** terkait.
|
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);
|
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) {
|
public function register(Request $request) {
|
||||||
$validator = Validator::make($request->all(), [
|
$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('cekandroid/{firebaseid}', [AuthController::class, 'cekandroid']);
|
||||||
Route::get('mobile/expertise/{periksa}', [MobileApiController::class, 'openExpertise']);
|
Route::get('mobile/expertise/{periksa}', [MobileApiController::class, 'openExpertise']);
|
||||||
Route::post('registerpasien', [FrontpageController::class, 'registerApi']);
|
Route::post('registerpasien', [FrontpageController::class, 'registerApi']);
|
||||||
|
Route::post('registerulang', [FrontpageController::class, 'registerApiUlang']);
|
||||||
|
|
||||||
Route::post('registerjson', [FrontpageController::class, 'registerApiFormatJSON']);
|
Route::post('registerjson', [FrontpageController::class, 'registerApiFormatJSON']);
|
||||||
Route::post('prosesbatal', [DokterController::class, 'cancelOrder']);
|
Route::post('prosesbatal', [DokterController::class, 'cancelOrder']);
|
||||||
Route::post('ekstrakhasil', [DokterController::class, 'gethasiltoSIMRS'])->name('gethasiltoSIMRS');
|
Route::post('ekstrakhasil', [DokterController::class, 'gethasiltoSIMRS'])->name('gethasiltoSIMRS');
|
||||||
|
|||||||
Reference in New Issue
Block a user