1146 lines
44 KiB
PHP
1146 lines
44 KiB
PHP
<?php
|
|
namespace App\Http\Controllers;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Routing\Controller as BaseController;
|
|
use App\Logbook;
|
|
use App\User;
|
|
use App\Periksa;
|
|
use App\Pasien;
|
|
use App\Riwayat;
|
|
use App\Rekaplogbook;
|
|
use App\PeriksaTest;
|
|
|
|
use Fawno\PhpSerial\SerialDio;
|
|
use Fawno\PhpSerial\SerialConfig;
|
|
use DateTime;
|
|
use Carbon\Carbon;
|
|
use Aranyasen\HL7\Message;
|
|
use Aranyasen\HL7\Connection;
|
|
use Aranyasen\HL7\Segment;
|
|
use Aranyasen\HL7\Segments\MSH;
|
|
use Aranyasen\HL7\Segments\PV1;
|
|
use Aranyasen\HL7\Segments\OBR;
|
|
use Aranyasen\HL7\Segments\ORC;
|
|
use Aranyasen\HL7\Segments\PID;
|
|
use Aranyasen\HL7\Segments\OBX;
|
|
use Aranyasen\HL7\Segments\NTE;
|
|
use Aranyasen\HL7\Segments\EVN;
|
|
use Session;
|
|
|
|
class Controller extends BaseController
|
|
{
|
|
use AuthorizesRequests, ValidatesRequests;
|
|
protected function getStyledValue($value, $color, $strong = false) {
|
|
return $strong ? "<strong><font color=\"$color\">$value</font></strong>" : "<font color=\"$color\">$value</font>";
|
|
}
|
|
protected function setStatusStyles($status, $nofoto, $noregister, $nama, $telpon, $jk, $usia, $urgensi, $reques, $ruangan, $daftar, $asalpasien) {
|
|
$color = 'grey';
|
|
$strong = false;
|
|
$statusText = $status;
|
|
|
|
if (empty($status)) {
|
|
if (!empty($foto) || !empty($baca)) {
|
|
$color = !empty($baca) ? 'green' : 'blue';
|
|
$statusText = !empty($baca) ? 'Telah di Baca' : 'Telah di kirim ke worklist/modalitas';
|
|
} else {
|
|
$color = 'red';
|
|
$statusText = 'NEW';
|
|
}
|
|
} else {
|
|
$katapertama = explode(" ", $status)[0];
|
|
switch ($katapertama) {
|
|
case 'Telah':
|
|
case 'Diperiksa':
|
|
case 'Draft':
|
|
case 'Expertise':
|
|
$color = 'blue';
|
|
$strong = false;
|
|
break;
|
|
case 'Decliend':
|
|
$color = 'danger';
|
|
$strong = false;
|
|
break;
|
|
case 'Selesai':
|
|
$color = 'success';
|
|
$strong = false;
|
|
break;
|
|
case 'Arsip':
|
|
$color = 'primary';
|
|
$strong = false;
|
|
break;
|
|
default:
|
|
$color = 'grey';
|
|
break;
|
|
}
|
|
if (in_array($katapertama, ['Diperiksa', 'Draft', 'Expertise'])) {
|
|
$strong = true;
|
|
}
|
|
}
|
|
|
|
return [
|
|
'nofoto' => $this->getStyledValue($nofoto, $color, $strong),
|
|
'noregister' => $this->getStyledValue($noregister, $color, $strong),
|
|
'nama' => $this->getStyledValue($nama, $color, $strong),
|
|
'telpon' => $this->getStyledValue($telpon, $color, $strong),
|
|
'jk' => $this->getStyledValue($jk, $color, $strong),
|
|
'usia' => $this->getStyledValue($usia, $color, $strong),
|
|
'urgensi' => $this->getStyledValue($urgensi, $color, $strong),
|
|
'reques' => $this->getStyledValue($reques, $color, $strong),
|
|
'ruangan' => $this->getStyledValue($ruangan, $color, $strong),
|
|
'daftar' => $this->getStyledValue($daftar, $color, $strong),
|
|
'status' => $this->getStyledValue($statusText, $color, $strong),
|
|
'asalpasien' => $this->getStyledValue($asalpasien, $color, $strong),
|
|
];
|
|
}
|
|
protected function getDataBasedOnMaster($master, $jenis, $mulai, $akhir, $valcari) {
|
|
$data = match ($master) {
|
|
'logbook' => $this->getLogbookData($jenis, $mulai, $akhir, $valcari),
|
|
'pengambilan' => $this->getPengambilanData($jenis, $mulai, $akhir, $valcari),
|
|
'verificationppds' => $this->getPemeriksaanData($jenis, $mulai, $akhir, $valcari),
|
|
default => $this->getDefaultData($jenis, $master, $mulai, $akhir, $valcari),
|
|
};
|
|
return $data;
|
|
}
|
|
protected function getLogbookData($jenis, $mulai, $akhir, $valcari) {
|
|
[$mulai, $akhir] = $this->prepareDateRange($mulai, $akhir);
|
|
$query = Periksa::whereBetween('daftar', [$mulai, $akhir]);
|
|
if ($jenis === 'junior') {
|
|
return $query->where('ppdsjunior', $valcari)->orWhere('ppdsjunior2', $valcari);
|
|
} elseif ($jenis === 'middle') {
|
|
return $query->where('middleppds', $valcari)->orWhere('ppdsmiddle2', $valcari);
|
|
} elseif ($jenis === 'senior') {
|
|
return $query->where('ppdssenior', $valcari);
|
|
}
|
|
return $query;
|
|
}
|
|
protected function getPengambilanData($jenis, $mulai, $akhir, $valcari) {
|
|
$query = Periksa::whereNotNull('periksa.verifikasi')->where('periksa.status', '!=', 'Arsip');
|
|
if ($jenis == 'ThisDay') {
|
|
return $query->whereDate('daftar', Carbon::today());
|
|
} else if ($jenis == 'mundur2') {
|
|
return $query->whereDate('daftar', '>=', Carbon::today()->subDays(2));
|
|
} else if ($jenis == 'mundur3') {
|
|
return $query->whereDate('daftar', '>=', Carbon::today()->subDays(3));
|
|
} else if ($jenis === 'searchbydate') {
|
|
$mulai = $mulai ?: date("Y-m-d");
|
|
$akhir = $akhir ?: date("Y-m-d");
|
|
if ($mulai >= $akhir) {
|
|
$akhir = date('Y-m-d', strtotime($akhir . ' +1 day'));
|
|
}
|
|
return $query->whereBetween('daftar', [$mulai, $akhir]);
|
|
} else {
|
|
switch ($jenis) {
|
|
case 'norm':
|
|
return $query->where('noregister', 'LIKE', '%'.$valcari.'%');
|
|
case 'nofoto':
|
|
return $query->where('nofoto', 'LIKE', '%'.$valcari.'%');
|
|
case 'rekues':
|
|
return $query->where('reques', 'LIKE', '%'.$valcari.'%');
|
|
case 'keterangan':
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
case 'kesimpulan':
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
default:
|
|
return $query->orderBy('id', 'DESC');
|
|
}
|
|
}
|
|
return $query;
|
|
}
|
|
protected function getPemeriksaanData($jenis, $mulai, $akhir, $valcari) {
|
|
if ($valcari == 'allspv'){
|
|
$query = Periksa::where('status', 'LIKE', 'Expertise Saved (Un Verified)')->whereNull('periksa.verifikasi');
|
|
} else {
|
|
$query = Periksa::where('status', 'LIKE', 'Expertise Saved (Un Verified)')->whereNull('periksa.verifikasi')->where('periksa.dokter_id', Session('id'));
|
|
}
|
|
return $query;
|
|
}
|
|
protected function handleOtherPengambilanQueries($query, $jenis, $valcari) {
|
|
switch ($jenis) {
|
|
case 'norm':
|
|
return $query->where('noregister', 'LIKE', '%'.$valcari.'%');
|
|
case 'nofoto':
|
|
return $query->where('nofoto', 'LIKE', '%'.$valcari.'%');
|
|
case 'rekues':
|
|
return $query->where('reques', 'LIKE', '%'.$valcari.'%');
|
|
case 'keterangan':
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
case 'kesimpulan':
|
|
return $this->handleKesimpulanQuery($query, $valcari);
|
|
default:
|
|
return $query;
|
|
}
|
|
}
|
|
protected function handleKesimpulanQuery($query, $valcari) {
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
}
|
|
protected function getDefaultData($jenis, $master, $mulai, $akhir, $valcari) {
|
|
$query = Periksa::whereNotNull('nofoto');
|
|
if ($jenis == 'ThisDay') {
|
|
return $query->where(function($q) {
|
|
$q->where(function($sub) {
|
|
$sub->where('status', '!=', 'Selesai')
|
|
->where('status', 'not like', 'Dibatalkan%');
|
|
})->orWhereNull('status');
|
|
});
|
|
} else if ($jenis == 'ThisDayPendaftaran') {
|
|
return $query->whereDate('daftar', Carbon::today());
|
|
} else if ($jenis == 'mundur2') {
|
|
return $query->whereDate('daftar', '>=', Carbon::today()->subDays(2));
|
|
} else if ($jenis == 'mundur3') {
|
|
return $query->whereDate('daftar', '>=', Carbon::today()->subDays(3));
|
|
} else if ($jenis === 'searchbydate') {
|
|
$mulai = $mulai ?: date("Y-m-d");
|
|
$akhir = $akhir ?: date("Y-m-d");
|
|
if ($mulai >= $akhir) {
|
|
$akhir = date('Y-m-d', strtotime($akhir . ' +1 day'));
|
|
}
|
|
return $query->whereBetween('daftar', [$mulai, $akhir]);
|
|
} else if ($jenis === 'searchbydatemanual') {
|
|
$mulai = $mulai ?: date("Y-m-d");
|
|
$akhir = $akhir ?: date("Y-m-d");
|
|
if ($mulai >= $akhir) {
|
|
$akhir = date('Y-m-d', strtotime($akhir . ' +1 day'));
|
|
}
|
|
return $query->whereBetween('daftar', [$mulai, $akhir])->whereNotIn('pendaftar', ['supervisor', 'admin', 'analis', 'ppds', 'developer']);
|
|
} else {
|
|
switch ($jenis) {
|
|
case 'norm':
|
|
return $query->where('noregister', 'LIKE', '%'.$valcari.'%');
|
|
case 'nofoto':
|
|
return $query->where('nofoto', 'LIKE', '%'.$valcari.'%');
|
|
case 'rekues':
|
|
return $query->where('reques', 'LIKE', '%'.$valcari.'%');
|
|
case 'keterangan':
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
case 'kesimpulan':
|
|
return $query->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
|
default:
|
|
return $query->orderBy('id', 'DESC');
|
|
}
|
|
}
|
|
return $query;
|
|
}
|
|
protected function applyFilters($request, $data, $filterscount) {
|
|
for ($i = 0; $i < $filterscount; $i++) {
|
|
$filtervalue = $request->input('filtervalue'.$i);
|
|
$filterdatafield = $request->input('filterdatafield'.$i);
|
|
|
|
$filterdatafield = match ($filterdatafield) {
|
|
'tlsnoregister' => 'noregister',
|
|
'tlsnofoto' => 'nofoto',
|
|
'tlsnama' => 'nmpasien',
|
|
'nama' => 'nmpasien',
|
|
'daftartgl' => 'daftar',
|
|
'daftarjam' => 'daftar',
|
|
'tlsurgensi' => 'urgensi',
|
|
'tlsreques' => 'reques',
|
|
'tlsruangan' => 'ruangan',
|
|
'tlsstatus' => 'status',
|
|
default => $filterdatafield,
|
|
};
|
|
|
|
$data = $this->applyFilterCondition($data, $filterdatafield, $filtervalue);
|
|
}
|
|
}
|
|
protected function applyFilterCondition($data, $filterdatafield, $filtervalue) {
|
|
if ($filtervalue === '<span style="background-color: red;">IGD</span>') {
|
|
return $data->whereNull('noloket');
|
|
} elseif ($filtervalue === '<span style="background-color: green;">SENTRAL</span>') {
|
|
return $data->whereNotNull('noloket');
|
|
}
|
|
return $data->where($filterdatafield, 'LIKE', '%'.$filtervalue.'%');
|
|
}
|
|
protected function prepareDateRange($mulai, $akhir) {
|
|
$cektanggal = explode(" - ", $mulai);
|
|
if (isset($cektanggal[1])) {
|
|
return [\Carbon\Carbon::parse($cektanggal[0])->format('Y-m-d'), \Carbon\Carbon::parse($cektanggal[1])->format('Y-m-d')];
|
|
}
|
|
return [$mulai, $akhir];
|
|
}
|
|
protected function Hl7Register($id, $kirimke){
|
|
$panggilan = '';
|
|
$sukses = 0;
|
|
$error = '';
|
|
$emailbody = '';
|
|
$pesan = '';
|
|
$periksa = Periksa::where('id', $id)->first();
|
|
$idperiksa = $periksa->id;
|
|
$idpasien = $periksa->pasien_id;
|
|
$keterangan = $periksa->keterangan;
|
|
$daftar = $periksa->daftar;
|
|
$idruang = $periksa->ruangan_id;
|
|
$kamar = $periksa->ruangan ?? 'Kamar Periksa';
|
|
$urgensi = $periksa->urgensi;
|
|
$idpoli = $periksa->poli_id;
|
|
$statuse = $periksa->status;
|
|
$noregister = $periksa->noregister;
|
|
$asalpasien = $periksa->asalpasien;
|
|
$reques = $periksa->reques;
|
|
$asuransi = $periksa->asuransi;
|
|
$foto = $periksa->foto;
|
|
$analis = $periksa->analis;
|
|
$nofoto = $periksa->nofoto;
|
|
$jk = $periksa->jkpasien;
|
|
$tgllahir = $periksa->tgllahirpasien;
|
|
$kota = '';
|
|
$alamat = $periksa->alamatpasien;
|
|
$nama = $periksa->nmpasien;
|
|
$norm = $periksa->noregister;
|
|
$poli = $periksa->getPoli->poli ?? 'EMI Primary';
|
|
$iddokter = $periksa->dokter_id;
|
|
if (is_null($analis)){
|
|
Periksa::where('id', $idperiksa)->update([
|
|
'analis' => Session('id'),
|
|
'nmanalis' => Session('nama'),
|
|
'foto' => date("Y-m-d H:i:s")
|
|
]);
|
|
}
|
|
$today = date("YmdHi");
|
|
$tanggal = date("Y-m-d H:i");
|
|
$dokter = Session('nama');
|
|
$arrayttl = explode("-", $nofoto);
|
|
$jenis = $arrayttl[0];
|
|
$tengah = '';
|
|
$blakang = '';
|
|
$tgllahir = str_replace('-', '', $tgllahir);
|
|
$arrayttl = explode(" ", $nama);
|
|
$fname = iconv("UTF-8", "tis-620", $arrayttl[0]);
|
|
if (isset($arrayttl[1])){
|
|
$tengah = iconv("UTF-8", "tis-620", $arrayttl[1]);
|
|
}
|
|
if (isset($arrayttl[2])){
|
|
$blakang = iconv("UTF-8", "tis-620", $arrayttl[2]);
|
|
} else {
|
|
$blakang = $tengah;
|
|
$tengah = '';
|
|
}
|
|
$daftar = str_replace(':', '', $daftar);
|
|
$tanggal = str_replace('-', '', $daftar);
|
|
$tanggal = str_replace(' ', '', $tanggal);
|
|
$berita = '';
|
|
if ($urgensi == 'Elective'){ $urgensi = 'INPATIENT'; $prioritas = 'Routine'; }
|
|
else if ($urgensi == 'CITO'){ $urgensi = 'EMERGENCY'; $prioritas = 'Cito'; }
|
|
else { $urgensi = 'OUTPATIENT'; $prioritas = 'Routine'; }
|
|
|
|
if ($jk == 'L'){ $panggilan = 'TN'; $jk = 'M'; }
|
|
else if ($jk == 'P') { $panggilan = 'NY'; $jk = 'F'; }
|
|
else { $panggilan = 'UNK'; $jk = 'O'; }
|
|
$panggilan = '';
|
|
if ($blakang == ''){ $blakang = $fname; }
|
|
|
|
$msg = new Message();
|
|
$msh = new MSH();
|
|
$msh->setField(3, 'LIS');
|
|
$msh->setField(4, 'RSSA MALANG');
|
|
$msh->setField(5, 'OESEND_PROD');
|
|
$msh->setField(6, 'EMR');
|
|
$msh->setField(7, $today);
|
|
$msh->setField(9, ['ORM', 'O01']);
|
|
$msg->addSegment($msh);
|
|
|
|
$pid = new PID();
|
|
$pid->setField(2, [$norm, '', '11', $poli]);
|
|
$pid->setField(3, [$norm, 'C', '11', $jenis]);
|
|
$pid->setPatientName([$blakang, $fname, $tengah, $panggilan]);
|
|
$pid->setField(7, $tgllahir);
|
|
$pid->setField(8, $jk);
|
|
$pid->setField(10, 'IN');
|
|
$pid->setField(18, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pid->setField(19, 'IN');
|
|
$msg->addSegment($pid);
|
|
|
|
$pv1 = new PV1();
|
|
$pv1->setField(2, $urgensi);
|
|
$pv1->setField(3, [$jenis,'','', $kamar]);
|
|
$pv1->setField(10, $poli);
|
|
$pv1->setField(18, $asuransi);
|
|
$pv1->setField(19, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pv1->setField(44, $today);
|
|
$msg->addSegment($pv1);
|
|
|
|
$orc = new ORC();
|
|
$orc->setField(1, 'NW');
|
|
$orc->setField(2, [$nofoto, $poli]);
|
|
$orc->setField(3, [$nofoto, $poli]);
|
|
$orc->setField(5, 'SC');
|
|
$orc->setField(7, ['', '', '', '', '', $prioritas]);
|
|
$orc->setField(15, $today);
|
|
$orc->setField(17, 'Mikrobiologi RSSA');
|
|
$msg->addSegment($orc);
|
|
|
|
$obr = new OBR();
|
|
$obr->setField(2, [$nofoto, $poli]);
|
|
$obr->setField(3, [$nofoto, $poli]);
|
|
$obr->setField(5, $prioritas);
|
|
$obr->setField(6, $today);
|
|
$obr->setField(16, [$iddokter, $dokter]);
|
|
$obr->setField(18, $nofoto);
|
|
$obr->setField(27, ['1', 'once', $tanggal, $prioritas]);
|
|
$obr->setField(36, $today);
|
|
$msg->addSegment($obr);
|
|
$config = new SerialConfig();
|
|
$config->setBaudRate(9600);
|
|
$config->setParity(0);
|
|
$config->setDataBits(8);
|
|
$config->setStopBits(1);
|
|
$config->setFlowControl(0);
|
|
try {
|
|
$hl7Message = $msg->toString();
|
|
|
|
if ($kirimke == 'vitek01'){
|
|
$serial = new SerialDio("COM1", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'vitek02'){
|
|
$serial = new SerialDio("COM2", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'genexpert01'){
|
|
$serial = new SerialDio("COM3", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'genexpert02'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'genexpert03'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'abbotm2000'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'bd01'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
} else if ($kirimke == 'bd02'){
|
|
$pacsaddr = '172.16.29.224';
|
|
$port = '8088';
|
|
$connection = new Connection($pacsaddr, $port);
|
|
if ($connection) {
|
|
$ack = $connection->send($msg);
|
|
$hasilkrm = $ack->toString(true);
|
|
$pesan = "Full Response: " . $hasilkrm;
|
|
$msa = $ack->getSegmentsByName('MSA');
|
|
if (isset($msa[0])) {
|
|
$ackCode = $msa[0]->getAcknowledgementCode();
|
|
$pesan = $pesan." ACK Code: " . $ackCode;
|
|
if ($ackCode[1] === 'A') {
|
|
$pesan = $pesan.' Pasien atas nama ' . $nama . ' Dengan Order Pemeriksaan ' . $rekuese . ' Dari ' . $asalpasien . ' Terkirim ke Modality';
|
|
} else {
|
|
$pesan = $pesan."E rror text: " . $msa[0]->getTextMessage();
|
|
}
|
|
} else {
|
|
$pesan = $pesan." No MSA segment found in the response.";
|
|
}
|
|
} else {
|
|
$pesan = $pesan.' Tidak Dapat Terhubung';
|
|
}
|
|
} else {
|
|
$serial = new SerialDio("COM1", $config);
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
}
|
|
|
|
}catch (Exception $e) {
|
|
$pesan = $e->getMessage();
|
|
}
|
|
return $pesan;
|
|
}
|
|
protected function Hl7GetResult($id, $kirimke){
|
|
$panggilan = '';
|
|
$sukses = 0;
|
|
$error = '';
|
|
$emailbody = '';
|
|
$periksa = Periksa::where('id', $id)->first();
|
|
$idperiksa = $periksa->id;
|
|
$idpasien = $periksa->pasien_id;
|
|
$keterangan = $periksa->keterangan;
|
|
$daftar = $periksa->daftar;
|
|
$idruang = $periksa->ruangan_id;
|
|
$kamar = $periksa->ruangan ?? 'Kamar Periksa';
|
|
$urgensi = $periksa->urgensi;
|
|
$idpoli = $periksa->poli_id;
|
|
$statuse = $periksa->status;
|
|
$noregister = $periksa->noregister;
|
|
$asalpasien = $periksa->asalpasien;
|
|
$reques = $periksa->reques;
|
|
$asuransi = $periksa->asuransi;
|
|
$foto = $periksa->foto;
|
|
$analis= $periksa->analis;
|
|
$nofoto = $periksa->nofoto;
|
|
$jk = $periksa->jkpasien;
|
|
$tgllahir = $periksa->tgllahirpasien;
|
|
$kota = '';
|
|
$alamat = $periksa->alamatpasien;
|
|
$nama = $periksa->nmpasien;
|
|
$norm = $periksa->noregister;
|
|
$poli = $periksa->getPoli->poli ?? 'EMI Primary';
|
|
$iddokter = $periksa->dokter_id;
|
|
$today = date("YmdHi");
|
|
$tanggal = date("Y-m-d H:i");
|
|
$dokter = Session('nama');
|
|
$arrayttl = explode("-", $nofoto);
|
|
$jenis = $arrayttl[0];
|
|
$tengah = '';
|
|
$blakang = '';
|
|
$tgllahir = str_replace('-', '', $tgllahir);
|
|
$arrayttl = explode(" ", $nama);
|
|
$fname = iconv("UTF-8", "tis-620", $arrayttl[0]);
|
|
if (isset($arrayttl[1])){
|
|
$tengah = iconv("UTF-8", "tis-620", $arrayttl[1]);
|
|
}
|
|
if (isset($arrayttl[2])){
|
|
$blakang = iconv("UTF-8", "tis-620", $arrayttl[2]);
|
|
} else {
|
|
$blakang = $tengah;
|
|
$tengah = '';
|
|
}
|
|
$daftar = str_replace(':', '', $daftar);
|
|
$tanggal = str_replace('-', '', $daftar);
|
|
$tanggal = str_replace(' ', '', $tanggal);
|
|
$berita = '';
|
|
if ($urgensi == 'Elective'){ $urgensi = 'INPATIENT'; $prioritas = 'Routine'; }
|
|
else if ($urgensi == 'CITO'){ $urgensi = 'EMERGENCY'; $prioritas = 'Cito'; }
|
|
else { $urgensi = 'OUTPATIENT'; $prioritas = 'Routine'; }
|
|
|
|
if ($jk == 'L'){ $panggilan = 'TN'; $jk = 'M'; }
|
|
else if ($jk == 'P') { $panggilan = 'NY'; $jk = 'F'; }
|
|
else { $panggilan = 'UNK'; $jk = 'O'; }
|
|
$panggilan = '';
|
|
if ($blakang == ''){ $blakang = $fname; }
|
|
$recievingfas = 'OESEND_PROD';
|
|
|
|
$msg = new Message();
|
|
$msh = new MSH();
|
|
$msh->setField(3, 'LIS');
|
|
$msh->setField(4, 'RSSA MALANG');
|
|
$msh->setField(5, 'OESEND_PROD');
|
|
$msh->setField(6, 'EMR');
|
|
$msh->setField(7, $today);
|
|
$msh->setField(9, ['ADT', 'A08']);
|
|
$msg->addSegment($msh);
|
|
|
|
$evn = new EVN();
|
|
$evn->setField(1, 'A01');
|
|
$evn->setField(2, $tanggal);
|
|
$evn->setField(5, 'QAO_AE_TL');
|
|
$evn->setField(6, 'NV44I0');
|
|
$msg->addSegment($evn);
|
|
$pid = new PID();
|
|
$pid->setField(2, [$norm, '', '11', $poli]);
|
|
$pid->setField(3, [$norm, 'C', '11', $jenis]);
|
|
$pid->setPatientName([$blakang, $fname, $tengah, $panggilan]);
|
|
$pid->setField(7, $tgllahir);
|
|
$pid->setField(8, $jk);
|
|
$pid->setField(10, 'IN');
|
|
$pid->setField(18, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pid->setField(19, 'IN');
|
|
$msg->addSegment($pid);
|
|
$pv1 = new PV1();
|
|
$pv1->setField(2, $urgensi);
|
|
$pv1->setField(3, [$jenis,'','', $kamar]);
|
|
$pv1->setField(10, $poli);
|
|
$pv1->setField(18, $asuransi);
|
|
$pv1->setField(19, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pv1->setField(44, $today);
|
|
$msg->addSegment($pv1);
|
|
try {
|
|
$hl7Message = $msg->toString();
|
|
$config = new SerialConfig();
|
|
$config->setBaudRate(9600);
|
|
$config->setParity(0);
|
|
$config->setDataBits(8);
|
|
$config->setStopBits(1);
|
|
$config->setFlowControl(0);
|
|
if ($kirimke == 'vitek01'){
|
|
$serial = new SerialDio("COM1", $config);
|
|
} else if ($kirimke == 'vitek02'){
|
|
$serial = new SerialDio("COM2", $config);
|
|
} else if ($kirimke == 'genexpert01'){
|
|
$serial = new SerialDio("COM3", $config);
|
|
} else if ($kirimke == 'genexpert02'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
} else if ($kirimke == 'genexpert03'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
} else if ($kirimke == 'abbotm2000'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
} else if ($kirimke == 'bd01'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
} else if ($kirimke == 'bd02'){
|
|
$serial = new SerialDio("COM4", $config);
|
|
} else {
|
|
$serial = new SerialDio("COM1", $config);
|
|
}
|
|
$serial->open('r+b');
|
|
$serial->setBlocking(0);
|
|
$serial->setTimeout(0, 0);
|
|
$serial->send($hl7Message);
|
|
$pesan = $serial->read();
|
|
$serial->close();
|
|
}catch (Exception $e) {
|
|
$pesan = $e->getMessage();
|
|
}
|
|
return $pesan;
|
|
}
|
|
protected function Hl7Send($id, $pacsaddr){
|
|
$port = '10020';
|
|
$panggilan = '';
|
|
$sukses = 0;
|
|
$error = '';
|
|
$emailbody = '';
|
|
$periksa = Periksa::where('id', $id)->first();
|
|
$idperiksa = $periksa->id;
|
|
$idpasien = $periksa->pasien_id;
|
|
$keterangan = $periksa->keterangan;
|
|
$daftar = $periksa->daftar;
|
|
$idruang = $periksa->ruangan_id;
|
|
$kamar = $periksa->ruangan ?? 'Kamar Periksa';
|
|
$urgensi = $periksa->urgensi;
|
|
$idpoli = $periksa->poli_id;
|
|
$statuse = $periksa->status;
|
|
$noregister = $periksa->noregister;
|
|
$asalpasien = $periksa->asalpasien;
|
|
$reques = $periksa->reques;
|
|
$asuransi = $periksa->asuransi;
|
|
$foto = $periksa->foto;
|
|
$analis = $periksa->analis;
|
|
$nofoto = $periksa->nofoto;
|
|
$jk = $periksa->jkpasien;
|
|
$tgllahir = $periksa->tgllahirpasien;
|
|
$kota = '';
|
|
$alamat = $periksa->alamatpasien;
|
|
$nama = $periksa->nmpasien;
|
|
$norm = $periksa->noregister;
|
|
$poli = $periksa->getPoli->poli ?? 'EMI Primary';
|
|
$iddokter = $periksa->dokter_id;
|
|
$today = date("YmdHi");
|
|
$tanggal = date("Y-m-d H:i");
|
|
$dokter = Session('nama');
|
|
$arrayttl = explode("-", $nofoto);
|
|
$jenis = $arrayttl[0];
|
|
$tengah = '';
|
|
$blakang = '';
|
|
$tgllahir = str_replace('-', '', $tgllahir);
|
|
$arrayttl = explode(" ", $nama);
|
|
$fname = iconv("UTF-8", "tis-620", $arrayttl[0]);
|
|
if (isset($arrayttl[1])){
|
|
$tengah = iconv("UTF-8", "tis-620", $arrayttl[1]);
|
|
}
|
|
if (isset($arrayttl[2])){
|
|
$blakang = iconv("UTF-8", "tis-620", $arrayttl[2]);
|
|
} else {
|
|
$blakang = $tengah;
|
|
$tengah = '';
|
|
}
|
|
$daftar = str_replace(':', '', $daftar);
|
|
$tanggal = str_replace('-', '', $daftar);
|
|
$tanggal = str_replace(' ', '', $tanggal);
|
|
$berita = '';
|
|
if ($urgensi == 'Elective'){ $urgensi = 'INPATIENT'; $prioritas = 'Routine'; }
|
|
else if ($urgensi == 'CITO'){ $urgensi = 'EMERGENCY'; $prioritas = 'Cito'; }
|
|
else { $urgensi = 'OUTPATIENT'; $prioritas = 'Routine'; }
|
|
|
|
if ($jk == 'L'){ $panggilan = 'TN'; $jk = 'M'; }
|
|
else if ($jk == 'P') { $panggilan = 'NY'; $jk = 'F'; }
|
|
else { $panggilan = 'UNK'; $jk = 'O'; }
|
|
$panggilan = '';
|
|
if ($blakang == ''){ $blakang = $fname; }
|
|
$recievingfas = 'OESEND_PROD';
|
|
|
|
$msg = new Message();
|
|
$msh = new MSH();
|
|
//$msh->setField(1, '|');
|
|
//$msh->setField(2, '^~\&');
|
|
$msh->setField(3, 'LIS');
|
|
$msh->setField(4, 'RSSA MALANG');
|
|
$msh->setField(5, 'OESEND_PROD');
|
|
$msh->setField(6, 'EMR');
|
|
$msh->setField(7, $today);
|
|
$msh->setField(9, ['ORU', 'R01']);
|
|
//$msh->setField(10, '23063601579');
|
|
//$msh->setField(11, 'P');
|
|
//$msh->setField(12, '2.3');
|
|
$msg->addSegment($msh);
|
|
|
|
$pid = new PID();
|
|
$pid->setField(2, [$norm, '', '11', $poli]);
|
|
$pid->setField(3, [$norm, 'C', '11', $jenis]);
|
|
$pid->setPatientName([$blakang, $fname, $tengah, $panggilan]);
|
|
$pid->setField(7, $tgllahir);
|
|
$pid->setField(8, $jk);
|
|
$pid->setField(10, 'IN');
|
|
$pid->setField(11, [$alamat, '', $kota, '', 'ID']);
|
|
$pid->setField(18, [$idperiksa, '', 'M11', 'Visit']);
|
|
$msg->addSegment($pid);
|
|
|
|
$pv1 = new PV1();
|
|
$pv1->setField(2, $urgensi);
|
|
$pv1->setField(3, [$poli, $kamar]);
|
|
$pv1->setField(7, [$iddokter, $dokter]);
|
|
$pv1->setField(9, [$iddokter, $dokter]);
|
|
$pv1->setField(10, $jenis);
|
|
$pv1->setField(17, [$iddokter, $dokter]);
|
|
$pv1->setField(18, $asalpasien);
|
|
$pid->setField(19, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pv1->setField(44, $today);
|
|
$msg->addSegment($pv1);
|
|
|
|
$orc = new ORC();
|
|
$orc->setField(1, 'NW');
|
|
$orc->setField(2, [$nofoto,$jenis]);
|
|
$orc->setField(3, [$nofoto,$poli]);
|
|
$orc->setField(5, 'CM');
|
|
$orc->setField(7, $prioritas);
|
|
$orc->setField(12, [$iddokter, $dokter]);
|
|
$orc->setField(15, $today);
|
|
$orc->setField(16, '');
|
|
$msg->addSegment($orc);
|
|
|
|
$obr = new OBR();
|
|
$obr->setField(1, $idperiksa);
|
|
$obr->setField(2, [$nofoto,$jenis]);
|
|
$obr->setField(3, [$nofoto,$poli]);
|
|
$obr->setField(4, [$modality, $jenis, $poli]);
|
|
$obr->setField(7, $tanggal);
|
|
$obr->setField(16, [$iddokter, $dokter]);
|
|
$obr->setField(18, [$nofoto,$poli]);
|
|
$obr->setField(22, 'F');
|
|
$obr->setField(24, $modality);
|
|
$obr->setField(25, 'F');
|
|
$obr->setField(27, ['1','','0','', '', $prioritas]);
|
|
$obr->setField(32, [$iddokter, $dokter]);
|
|
$obr->setField(36, $tanggal);
|
|
$msg->addSegment($obr);
|
|
|
|
$obx = new OBX();
|
|
$obx->setField(1, '1');
|
|
$obx->setField(2, 'FT');
|
|
$obx->setField(3, [$modality, $jenis, $poli]);
|
|
$obx->setField(5, $keterangan);
|
|
//$obx->setField(5, 'TS yang terhormat,');
|
|
$obx->setField(8, 'A');
|
|
$obx->setField(11, 'F');
|
|
$obx->setField(14, $today);
|
|
|
|
$msg->addSegment($obx);
|
|
$obx = new OBX();
|
|
$obx->setField(1, '2');
|
|
$obx->setField(2, 'ST');
|
|
$msg->addSegment($obx);
|
|
$obx = new OBX();
|
|
$obx->setField(1, '3');
|
|
$obx->setField(2, 'ST');
|
|
$msg->addSegment($obx);
|
|
$i = 4;
|
|
$arrayketerangan= explode("<br />", $keterangan);
|
|
foreach ($arrayketerangan as $v) {
|
|
if ($v != ''){
|
|
$text = str_replace('<p>', '', $v);
|
|
$text = str_replace('<br />', '', $text);
|
|
$text = str_replace(' ', '', $text);
|
|
$text = str_replace('<tr>', '', $text);
|
|
$text = str_replace('</tr>', '', $text);
|
|
$text = str_replace('<td>', '', $text);
|
|
$text = str_replace('</td>', ' ', $text);
|
|
$text = trim(preg_replace('/\s+/', ' ', $text));
|
|
$cekbaris = strlen($text);
|
|
if ($cekbaris < 126){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $text);
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}else {
|
|
$baris1 = substr($text,0,125);
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris1);
|
|
$msg->addSegment($obx);
|
|
$cekbaris = $cekbaris - 125;
|
|
$i++;
|
|
if ($cekbaris >= 1){
|
|
$baris2 = substr($text,126,125);
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris2);
|
|
$msg->addSegment($obx);
|
|
$cekbaris = $cekbaris - 125;
|
|
$i++;
|
|
if ($cekbaris >= 1){
|
|
$baris3 = substr($text,250,125);
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris3);
|
|
$msg->addSegment($obx);
|
|
$cekbaris = $cekbaris - 125;
|
|
$i++;
|
|
if ($cekbaris >= 1){
|
|
$baris4 = substr($text,375,125);
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris4);
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}else {$i++;}
|
|
}else {$i++;}
|
|
}else {$i++;}
|
|
}
|
|
}
|
|
else {
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}
|
|
}
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
$cekid = $i - 1;
|
|
$arraykesimpulan = explode("<br />", $kesimpulan);
|
|
foreach ($arraykesimpulan as $v) {
|
|
if ($v != ''){
|
|
$text = str_replace('<p>', '', $v);
|
|
$text = str_replace('<br />', '', $text);
|
|
$text = str_replace(' ', '', $text);
|
|
$text = trim(preg_replace('/\s+/', ' ', $text));
|
|
$cekbaris = strlen($text);
|
|
if ($cekbaris < 126){
|
|
$cekid++;
|
|
$selisih = $cekid - $i;
|
|
if ($selisih != 1){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $text);
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}
|
|
}else {
|
|
$baris1 = substr($text,0,125);
|
|
$cekid++;
|
|
$selisih = $cekid - $i;
|
|
if ($selisih != 1){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris1);
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}
|
|
$cekbaris = $cekbaris - 125;
|
|
if ($cekbaris >= 1){
|
|
$baris2 = substr($text,126,125);
|
|
$cekid++;
|
|
$selisih = $cekid - $i;
|
|
if ($selisih != 1){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris2);
|
|
$msg->addSegment($obx);
|
|
$cekbaris = $cekbaris - 125;
|
|
$i++;
|
|
}
|
|
if ($cekbaris >= 1){
|
|
$baris3 = substr($text,250,125);
|
|
$cekid++;
|
|
$selisih = $cekid - $i;
|
|
if ($selisih != 1){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris3);
|
|
$msg->addSegment($obx);
|
|
$cekbaris = $cekbaris - 125;
|
|
$i++;
|
|
}
|
|
if ($cekbaris >= 1){
|
|
$baris4 = substr($text,375,125);
|
|
$cekid++;
|
|
$selisih = $cekid - $i;
|
|
if ($selisih != 1){
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$obx->setField(5, $baris4);
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}
|
|
}else {$i++;}
|
|
}else {$i++;}
|
|
}else {$i++;}
|
|
}
|
|
}
|
|
else {
|
|
$obx = new OBX();
|
|
$obx->setField(1, $i);
|
|
$obx->setField(2, 'ST');
|
|
$msg->addSegment($obx);
|
|
$i++;
|
|
}
|
|
}
|
|
$msg->addSegment($obx);
|
|
$result = null;
|
|
$tes = 'tcp:'.$pacsaddr.':'.$port;
|
|
try {
|
|
$fp = stream_socket_client($tes, $errno, $errstr, 1);
|
|
}catch (Exception $e) {
|
|
$result = $e->getMessage();
|
|
}
|
|
if (strpos($result, 'unable to connect') !== false) {
|
|
$pesan = 'Saved to RIS Only';
|
|
} else {
|
|
$pesan = 'Expertise Saved to RIS only';
|
|
$connection = new Connection($pacsaddr, $port);
|
|
$ack = $connection->send($msg);
|
|
$hasilkrm = $ack->toString(true);
|
|
if (strpos($hasilkrm, 'MSH') === false) {
|
|
$pesan = 'Failed to send Expertise to "PACS IP" => '.$pacsaddr.', "Port" => '.$port;
|
|
}
|
|
$msa = $ack->getSegmentsByName('MSA')[0];
|
|
$ackCode = $msa->getAcknowledgementCode();
|
|
if ($ackCode[1] === 'A') {
|
|
$pesan = "Expertise Saved to PACS\n";
|
|
}
|
|
else {
|
|
$pesan = "Error text: " . $msa->getTextMessage();
|
|
}
|
|
}
|
|
return $pesan;
|
|
}
|
|
protected function Hl7SendCancel($id, $pacsaddr){
|
|
$port = '10020';
|
|
$panggilan = '';
|
|
$sukses = 0;
|
|
$error = '';
|
|
$emailbody = '';
|
|
$periksa = Periksa::where('id', $id)->first();
|
|
$idperiksa = $periksa->id;
|
|
$idpasien = $periksa->pasien_id;
|
|
$keterangan = $periksa->keterangan;
|
|
$daftar = $periksa->daftar;
|
|
$idruang = $periksa->ruangan_id;
|
|
$kamar = $periksa->ruangan ?? 'Kamar Periksa';
|
|
$urgensi = $periksa->urgensi;
|
|
$idpoli = $periksa->poli_id;
|
|
$statuse = $periksa->status;
|
|
$noregister = $periksa->noregister;
|
|
$asalpasien = $periksa->asalpasien;
|
|
$reques = $periksa->reques;
|
|
$asuransi = $periksa->asuransi;
|
|
$foto = $periksa->foto;
|
|
$analis = $periksa->analis;
|
|
$nofoto = $periksa->nofoto;
|
|
$jk = $periksa->jkpasien;
|
|
$tgllahir = $periksa->tgllahirpasien;
|
|
$kota = '';
|
|
$alamat = $periksa->alamatpasien;
|
|
$nama = $periksa->nmpasien;
|
|
$norm = $periksa->noregister;
|
|
$poli = $periksa->getPoli->poli ?? 'EMI Primary';
|
|
$iddokter = $periksa->dokter_id;
|
|
$today = date("YmdHi");
|
|
$tanggal = date("Y-m-d H:i");
|
|
$dokter = Session('nama');
|
|
$arrayttl = explode("-", $nofoto);
|
|
$jenis = $arrayttl[0];
|
|
$tengah = '';
|
|
$blakang = '';
|
|
$tgllahir = str_replace('-', '', $tgllahir);
|
|
$arrayttl = explode(" ", $nama);
|
|
$fname = iconv("UTF-8", "tis-620", $arrayttl[0]);
|
|
if (isset($arrayttl[1])){
|
|
$tengah = iconv("UTF-8", "tis-620", $arrayttl[1]);
|
|
}
|
|
if (isset($arrayttl[2])){
|
|
$blakang = iconv("UTF-8", "tis-620", $arrayttl[2]);
|
|
} else {
|
|
$blakang = $tengah;
|
|
$tengah = '';
|
|
}
|
|
$daftar = str_replace(':', '', $daftar);
|
|
$tanggal = str_replace('-', '', $daftar);
|
|
$tanggal = str_replace(' ', '', $tanggal);
|
|
$berita = '';
|
|
if ($urgensi == 'Elective'){ $urgensi = 'INPATIENT'; $prioritas = 'Routine'; }
|
|
else if ($urgensi == 'CITO'){ $urgensi = 'EMERGENCY'; $prioritas = 'Cito'; }
|
|
else { $urgensi = 'OUTPATIENT'; $prioritas = 'Routine'; }
|
|
|
|
if ($jk == 'L'){ $panggilan = 'TN'; $jk = 'M'; }
|
|
else if ($jk == 'P') { $panggilan = 'NY'; $jk = 'F'; }
|
|
else { $panggilan = 'UNK'; $jk = 'O'; }
|
|
$panggilan = '';
|
|
if ($blakang == ''){ $blakang = $fname; }
|
|
$recievingfas = 'OESEND_PROD';
|
|
|
|
$daftar = str_replace(':', '', $daftar);
|
|
$jk = $periksa->jkpasien;
|
|
$tgllahir = $periksa->tgllahirpasien;
|
|
$kota = '';
|
|
$alamat = $periksa->alamatpasien;
|
|
$nama = $periksa->nmpasien;
|
|
$norm = $periksa->noregister;
|
|
$tgllahir = str_replace('-', '', $tgllahir);
|
|
$tengah = '';
|
|
$blakang = '';
|
|
$arrayttl = explode(" ", $nama);
|
|
$fname = iconv("UTF-8", "tis-620", $arrayttl[0]);
|
|
if (isset($arrayttl[1])){
|
|
$tengah = iconv("UTF-8", "tis-620", $arrayttl[1]);
|
|
}
|
|
if (isset($arrayttl[2])){
|
|
$blakang= iconv("UTF-8", "tis-620", $arrayttl[2]);
|
|
}else {
|
|
$blakang= $tengah;
|
|
$tengah = '';
|
|
}
|
|
|
|
$today = date("YmdHi");
|
|
$tanggal = date("Ymd");
|
|
$tanggal = $tanggal.$daftar;
|
|
$berita = '';
|
|
if ($jk == 'L'){ $panggilan = 'TN'; $jk = 'M'; }
|
|
else if ($jk == 'P') { $panggilan = 'NY'; $jk = 'F'; }
|
|
else { $panggilan = 'UNK'; $jk = 'O'; }
|
|
$panggilan = '';
|
|
$port = '10030';
|
|
$msg = new Message();
|
|
$msh = new MSH();
|
|
//$msh->setField(1, '|');
|
|
//$msh->setField(2, '^~\&');
|
|
$msh->setField(3, 'LIS');
|
|
$msh->setField(4, 'RSSA MALANG');
|
|
$msh->setField(5, 'OESEND_PROD');
|
|
$msh->setField(6, 'EMR');
|
|
$msh->setField(7, $today);
|
|
$msh->setField(9, ['ORM', 'O01']);
|
|
//$msh->setField(10, '23063601579');
|
|
//$msh->setField(11, 'P');
|
|
//$msh->setField(12, '2.3');
|
|
$msg->addSegment($msh);
|
|
|
|
$pid = new PID();
|
|
$pid->setField(2, [$norm, '', '11', $poli]);
|
|
$pid->setField(3, [$norm, 'C', '11', $jenis]);
|
|
$pid->setPatientName([$blakang, $fname, $tengah, $panggilan]);
|
|
$pid->setField(7, $tgllahir);
|
|
$pid->setField(8, $jk);
|
|
$pid->setField(10, 'IN');
|
|
$pid->setField(18, [$idperiksa, '', 'M11', 'Visit']);
|
|
$msg->addSegment($pid);
|
|
|
|
$pv1 = new PV1();
|
|
$pv1->setField(2, $urgensi);
|
|
$pv1->setField(3, [$jenis,'','', $kamar]);
|
|
$pv1->setField(10, 'END');
|
|
$pv1->setField(18, 'NA');
|
|
$pv1->setField(19, [$idperiksa, '', 'M11', 'Visit']);
|
|
$pv1->setField(44, $today);
|
|
$msg->addSegment($pv1);
|
|
|
|
$orc = new ORC();
|
|
$orc->setField(1, 'OC');
|
|
$orc->setField(2, [$nofoto, $jenis]);
|
|
$orc->setField(3, [$nofoto, $poli]);
|
|
$orc->setField(5, 'CA');
|
|
$orc->setField(7, ['', '', '', '', '', $prioritas]);
|
|
$orc->setField(15, $today);
|
|
$orc->setField(16, '', 'Administrative');
|
|
$msg->addSegment($orc);
|
|
$nofotobaru = 'HPUS'.$nofoto;
|
|
$obr = new OBR();
|
|
$obr->setField(2, ['', $jenis]);
|
|
$obr->setField(3, [$nofotobaru, $poli]);
|
|
$obr->setField(4, [$modality, $rekuese, $poli]);
|
|
$obr->setField(5, $prioritas);
|
|
$obr->setField(6, $tanggal);
|
|
$obr->setField(16, [$iddokter, $dokter]);
|
|
$obr->setField(19, $nofoto);
|
|
$obr->setField(21, $jenis);
|
|
$obr->setField(24, $modality);
|
|
$obr->setField(27, ['1', 'once', $tanggal, $prioritas]);
|
|
$obr->setField(36, $tanggal);
|
|
$msg->addSegment($obr);
|
|
|
|
$nte = new NTE();
|
|
$nte->setField(3, 'Cancelled - Administrative');
|
|
$msg->addSegment($nte);
|
|
$connection = new Connection($pacsaddr, $port);
|
|
$ack = $connection->send($msg);
|
|
$hasilkrm = $ack->toString(true);
|
|
$result = null;
|
|
$tes = 'tcp://'.$pacsaddr.':'.$port;
|
|
try {
|
|
$fp = stream_socket_client($tes, $errno, $errstr, 1);
|
|
if (strpos($result, 'unable to connect') !== false) {
|
|
$pesan = 'Cannot Connet to PACS System';
|
|
} else {
|
|
$connection = new Connection($pacsaddr, $port);
|
|
$ack = $connection->send($msg);
|
|
$hasilkrm = $ack->toString(true);
|
|
if (strpos($hasilkrm, 'MSH') === false) {
|
|
$pesan = 'Failed to send Cancel Order to "PACS IP" => '.$pacsaddr.', "Port" => '.$port;
|
|
}
|
|
$msa = $ack->getSegmentsByName('MSA')[0];
|
|
$ackCode = $msa->getAcknowledgementCode();
|
|
if ($ackCode[1] === 'A') {
|
|
$pesan = "Send Cancel Order Success";
|
|
}
|
|
else {
|
|
$pesan = "Error text: " . $msa->getTextMessage();
|
|
}
|
|
}
|
|
}catch (Exception $e) {
|
|
$pesan = $e->getMessage();
|
|
}
|
|
|
|
return $pesan;
|
|
}
|
|
}
|