update
This commit is contained in:
@@ -10,7 +10,7 @@ use Illuminate\Support\Facades\Http;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
use App\Poli;
|
use App\Poli;
|
||||||
use App\Periksa;
|
use App\Periksa;
|
||||||
use App\DataListiner;
|
use App\DataListiner;
|
||||||
use App\Dokter;
|
use App\Dokter;
|
||||||
@@ -37,17 +37,6 @@ use App\CriticalValueSample;
|
|||||||
use App\Paslab;
|
use App\Paslab;
|
||||||
use App\SIMBHPReport;
|
use App\SIMBHPReport;
|
||||||
use Carbon\Carbon;
|
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 DateTime;
|
use DateTime;
|
||||||
use Validator;
|
use Validator;
|
||||||
use File;
|
use File;
|
||||||
@@ -58,14 +47,10 @@ use PDFCREATOR;
|
|||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
|
||||||
define( 'API_ACCESS_KEY', 'AAAA6YBXh1k:APA91bFL0q7QAXQGohXMpTwHco79f13C8PFk1Oo8kKhg1JerOulT9-37dxyP8X5ibABI0NuQ4ZsVxKQKCt7HuR7lUdJJuB-hTVnBmOUIBYfBlHb-Lcp6aGkj4erfF7J__A5hufXjF8Vt' );
|
|
||||||
|
|
||||||
class DokterController extends Controller
|
class DokterController extends Controller
|
||||||
{
|
{
|
||||||
protected $lisServiceUrl;
|
|
||||||
public function __construct() {
|
|
||||||
$this->lisServiceUrl = env('LIS_SERVICE_URL', 'http://10.10.120.14:6002');
|
|
||||||
}
|
|
||||||
protected static function genSurat($id, $tabel){
|
protected static function genSurat($id, $tabel){
|
||||||
if ($tabel == 'dengan kop' OR $tabel == 'PDF'){
|
if ($tabel == 'dengan kop' OR $tabel == 'PDF'){
|
||||||
$kopsurat = url('/kopsurat.png');
|
$kopsurat = url('/kopsurat.png');
|
||||||
@@ -3238,230 +3223,6 @@ class DokterController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo $cetak;
|
echo $cetak;
|
||||||
}
|
|
||||||
public function exsendTomany(Request $request) {
|
|
||||||
$data = [];
|
|
||||||
$iddokter = $request->input('set01');
|
|
||||||
$modality = $request->input('set02');
|
|
||||||
$worklist = $request->input('set03');
|
|
||||||
$idcetak = $request->input('set04');
|
|
||||||
$sukses = 0;
|
|
||||||
$error = '';
|
|
||||||
$emailbody = '';
|
|
||||||
|
|
||||||
foreach($idcetak as $idperiksa){
|
|
||||||
$periksa = Periksa::where('id', $idperiksa)->first();
|
|
||||||
if (isset($periksa->id)){
|
|
||||||
$idpasien = $periksa->pasien_id;
|
|
||||||
$keterangan = $periksa->keterangan;
|
|
||||||
$daftar = $periksa->daftar;
|
|
||||||
$idruang = $periksa->ruangan_id;
|
|
||||||
$kamar = $periksa->ruangan;
|
|
||||||
$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;
|
|
||||||
$namapoli = $periksa->getRuangan->poli ?? 'Deleted Data Ruang';
|
|
||||||
|
|
||||||
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 = 'Dokter Penanggung Jawab';
|
|
||||||
$arrayttl = explode("-", $nofoto);
|
|
||||||
$jenis = $arrayttl[0];
|
|
||||||
$jk = $periksa->jkpasien;
|
|
||||||
$tgllahir = $periksa->tgllahirpasien;
|
|
||||||
$kota = '';
|
|
||||||
$alamat = $periksa->alamatpasien;
|
|
||||||
$nama = $periksa->nmpasien;
|
|
||||||
$norm = $periksa->noregister;
|
|
||||||
$poli = $periksa->getPoli->poli ?? 'EMI Primary';
|
|
||||||
$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 = '';
|
|
||||||
//PV1.2 = value nya I (Inpatient), O (Outpatient), E (Emergency).
|
|
||||||
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; }
|
|
||||||
if ($worklist == 'pacs'){
|
|
||||||
$getsetting = Setting::where('id', '1')->first();
|
|
||||||
$pacsaddr = $getsetting->pacs;
|
|
||||||
$port = $getsetting->port;
|
|
||||||
$recievingfas = 'OESEND_PROD';
|
|
||||||
$portupdate = '10020';
|
|
||||||
} else {
|
|
||||||
$getsetting = Worklist::where('id', $worklist)->first();
|
|
||||||
if (isset($getsetting->ipaddress)){
|
|
||||||
$pacsaddr = $getsetting->ipaddress;
|
|
||||||
$port = $getsetting->portnumber;
|
|
||||||
$portupdate = $getsetting->portnumber;
|
|
||||||
$recievingfas = $getsetting->aetitle;
|
|
||||||
} else{
|
|
||||||
$getsetting = Setting::where('id', '1')->first();
|
|
||||||
$pacsaddr = $getsetting->pacs;
|
|
||||||
$port = $getsetting->port;
|
|
||||||
$recievingfas = 'OESEND_PROD';
|
|
||||||
$portupdate = '10020';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (is_null($foto)){
|
|
||||||
$msg = new Message();
|
|
||||||
$msh = new MSH();
|
|
||||||
//$msh->setField(1, '|');
|
|
||||||
//$msh->setField(2, '^~\&');
|
|
||||||
$msh->setField(3, 'RIS');
|
|
||||||
$msh->setField(4, 'RSSA MALANG');
|
|
||||||
//$msh->setField(5, $recievingfas);
|
|
||||||
$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(16, $klinis);
|
|
||||||
$orc->setField(17, 'Radiologi RSSA');
|
|
||||||
$msg->addSegment($orc);
|
|
||||||
|
|
||||||
$obr = new OBR();
|
|
||||||
$obr->setField(2, [$nofoto, $poli]);
|
|
||||||
$obr->setField(3, [$nofoto, $poli]);
|
|
||||||
$obr->setField(4, [$modality, $reques, $poli]);
|
|
||||||
$obr->setField(5, $prioritas);
|
|
||||||
$obr->setField(6, $today);
|
|
||||||
$obr->setField(16, [$iddokter, $dokter]);
|
|
||||||
$obr->setField(18, $nofoto);
|
|
||||||
$obr->setField(19, $modality);
|
|
||||||
$obr->setField(21, $modality);
|
|
||||||
$obr->setField(24, $modality);
|
|
||||||
$obr->setField(27, ['1', 'once', $tanggal, $prioritas]);
|
|
||||||
$obr->setField(36, $today);
|
|
||||||
$msg->addSegment($obr);
|
|
||||||
try {
|
|
||||||
$connection = new Connection($pacsaddr, $port);
|
|
||||||
$ack = $connection->send($msg);
|
|
||||||
$sukses++;
|
|
||||||
$emailbody = $emailbody.'<br />Pasien atas nama '.$nama.' Dengan Order Pemeriksaan '.$reques.' Dari '.$asalpasien.' Terkirim ke Modality';
|
|
||||||
}catch (Exception $e) {
|
|
||||||
$result = $e->getMessage();
|
|
||||||
$error = $error.$result.'<br />';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$msg = new Message();
|
|
||||||
$msh = new MSH();
|
|
||||||
$msh->setField(3, 'RIS');
|
|
||||||
$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, $recievingfas);
|
|
||||||
$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 {
|
|
||||||
$port = '10020';
|
|
||||||
$connection = new Connection($pacsaddr, $port);
|
|
||||||
$ack = $connection->send($msg);
|
|
||||||
$sukses++;
|
|
||||||
}catch (Exception $e) {
|
|
||||||
$result = $e->getMessage();
|
|
||||||
$error = $error.$result.'<br />';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($error == ''){
|
|
||||||
|
|
||||||
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Data Saved<br />'.$error]);
|
|
||||||
return back();
|
|
||||||
} else {
|
|
||||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Error..!!', 'message' => $error]);
|
|
||||||
return back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public function exsendToinsitu(Request $request) {
|
public function exsendToinsitu(Request $request) {
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class PasienController extends Controller
|
|||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
$client = new Client();
|
$client = new Client();
|
||||||
$res = $client->request('GET', 'http://10.10.123.204/api/account/pasien', ['query' => ['limit' => 10, 'nomedis' => $norm]]);
|
$res = $client->request('GET', 'https://gomed.rssa.my.id/api/account/pasien', ['query' => ['limit' => 10, 'nomedis' => $norm]]);
|
||||||
$response_data = json_decode($res->getBody()->getContents());
|
$response_data = json_decode($res->getBody()->getContents());
|
||||||
if (isset($response_data->response[0])) {
|
if (isset($response_data->response[0])) {
|
||||||
$hasil = $response_data->response[0];
|
$hasil = $response_data->response[0];
|
||||||
|
|||||||
@@ -95,8 +95,8 @@ Route::group(['middleware' => 'project.ipg'], function() {
|
|||||||
Route::post('dashboard/early-warning/{id}/cancel', [FrontpageController::class, 'cancelEarlyWarning'])->name('dashboard.earlyWarning.cancel');
|
Route::post('dashboard/early-warning/{id}/cancel', [FrontpageController::class, 'cancelEarlyWarning'])->name('dashboard.earlyWarning.cancel');
|
||||||
Route::get('dokter/getlisttem', [DokterController::class, 'getListtem'])->name('getListTemplate');
|
Route::get('dokter/getlisttem', [DokterController::class, 'getListtem'])->name('getListTemplate');
|
||||||
Route::get('dokter/getlistppds', [DokterController::class, 'getListppds'])->name('getlistppds');
|
Route::get('dokter/getlistppds', [DokterController::class, 'getListppds'])->name('getlistppds');
|
||||||
Route::post('dokter/getadendum', [DokterController::class, 'getAdendum'])->name('getadendum');
|
Route::post('dokter/getadendum', [DokterController::class, 'getAdendum'])->name('getadendum');
|
||||||
Route::post('dokter/store', [DokterController::class, 'store']);
|
Route::post('dokter/store', [DokterController::class, 'store']);
|
||||||
Route::post('dokter/getdokter', [DokterController::class, 'getDokter'])->name('getDokter');
|
Route::post('dokter/getdokter', [DokterController::class, 'getDokter'])->name('getDokter');
|
||||||
Route::post('dokter/update', [DokterController::class, 'update']);
|
Route::post('dokter/update', [DokterController::class, 'update']);
|
||||||
Route::post('dokter/delete', [DokterController::class, 'delete'])->name('deleteDokter');
|
Route::post('dokter/delete', [DokterController::class, 'delete'])->name('deleteDokter');
|
||||||
@@ -119,7 +119,6 @@ Route::group(['middleware' => 'project.ipg'], function() {
|
|||||||
Route::post('dokter/exprintform', [DokterController::class, 'exprintForm'])->name('exprintform');
|
Route::post('dokter/exprintform', [DokterController::class, 'exprintForm'])->name('exprintform');
|
||||||
Route::post('dokter/exprintlabelsimrs', [DokterController::class, 'exprintLabelSIMRS'])->name('exprintlabelSIMRS');
|
Route::post('dokter/exprintlabelsimrs', [DokterController::class, 'exprintLabelSIMRS'])->name('exprintlabelSIMRS');
|
||||||
Route::post('dokter/exprintformsimrs', [DokterController::class, 'exprintFormSIMRS'])->name('exprintformSIMRS');
|
Route::post('dokter/exprintformsimrs', [DokterController::class, 'exprintFormSIMRS'])->name('exprintformSIMRS');
|
||||||
Route::post('dokter/exsendtomany', [DokterController::class, 'exsendTomany'])->name('exsendtomany');
|
|
||||||
Route::post('dokter/exsendtoinsitu', [DokterController::class, 'exsendToinsitu'])->name('exsendtoinsitu');
|
Route::post('dokter/exsendtoinsitu', [DokterController::class, 'exsendToinsitu'])->name('exsendtoinsitu');
|
||||||
Route::post('dokter/getListadendum', [DokterController::class, 'getListadendum'])->name('getListadendum');
|
Route::post('dokter/getListadendum', [DokterController::class, 'getListadendum'])->name('getListadendum');
|
||||||
Route::post('dokter/exprinttandaterima', [DokterController::class, 'exTandaTerima'])->name('exTandaTerima');
|
Route::post('dokter/exprinttandaterima', [DokterController::class, 'exTandaTerima'])->name('exTandaTerima');
|
||||||
|
|||||||
+61
-15
@@ -154,10 +154,10 @@ DEVICE_CONFIGS = [
|
|||||||
'port': 'COM6', 'baud_rate': 9600, 'device_type': 'vitek', 'alat_name': 'Vitek 1',
|
'port': 'COM6', 'baud_rate': 9600, 'device_type': 'vitek', 'alat_name': 'Vitek 1',
|
||||||
'protocol': 'serial', 'flag_column': 'flg_vitek1'
|
'protocol': 'serial', 'flag_column': 'flg_vitek1'
|
||||||
},
|
},
|
||||||
{
|
#{
|
||||||
'port': 'COM4', 'baud_rate': 9600, 'device_type': 'vitek', 'alat_name': 'Vitek 2',
|
# 'port': 'COM4', 'baud_rate': 9600, 'device_type': 'vitek', 'alat_name': 'Vitek 2',
|
||||||
'protocol': 'serial', 'flag_column': 'flg_vitek2'
|
# 'protocol': 'serial', 'flag_column': 'flg_vitek2'
|
||||||
},
|
#},
|
||||||
{
|
{
|
||||||
'port': 'COM5', 'baud_rate': 9600, 'device_type': 'bd', 'alat_name': 'BACTEC',
|
'port': 'COM5', 'baud_rate': 9600, 'device_type': 'bd', 'alat_name': 'BACTEC',
|
||||||
'protocol': 'serial', 'flag_column': 'flg_bd1'
|
'protocol': 'serial', 'flag_column': 'flg_bd1'
|
||||||
@@ -366,6 +366,24 @@ def format_hl7_date(value):
|
|||||||
digits = re.sub(r"[^0-9]", "", text)
|
digits = re.sub(r"[^0-9]", "", text)
|
||||||
return digits[:8] if len(digits) >= 8 else ""
|
return digits[:8] if len(digits) >= 8 else ""
|
||||||
|
|
||||||
|
def format_hl7_datetime(value):
|
||||||
|
if not value:
|
||||||
|
return ""
|
||||||
|
if isinstance(value, datetime.datetime):
|
||||||
|
return value.strftime("%Y%m%d%H%M%S")
|
||||||
|
if isinstance(value, datetime.date):
|
||||||
|
return value.strftime("%Y%m%d")
|
||||||
|
text = str(value).strip()
|
||||||
|
digits = re.sub(r"[^0-9]", "", text)
|
||||||
|
if len(digits) >= 14:
|
||||||
|
return digits[:14]
|
||||||
|
return digits[:8] if len(digits) >= 8 else ""
|
||||||
|
|
||||||
|
def build_hl7_segment(segment_name, fields):
|
||||||
|
max_field = max(fields.keys()) if fields else 0
|
||||||
|
values = [str(fields.get(index, "")) for index in range(1, max_field + 1)]
|
||||||
|
return f"{segment_name}|" + "|".join(values)
|
||||||
|
|
||||||
def map_hl7_sex(value):
|
def map_hl7_sex(value):
|
||||||
text = str(value or "").strip().upper()
|
text = str(value or "").strip().upper()
|
||||||
if not text:
|
if not text:
|
||||||
@@ -1890,10 +1908,17 @@ def send_order_to_myla_astm(conn, order, peer_ip):
|
|||||||
|
|
||||||
def create_myla_hl7_order_message(order, msg_control_id):
|
def create_myla_hl7_order_message(order, msg_control_id):
|
||||||
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
||||||
|
order_timestamp = format_hl7_datetime(getattr(order, "rtglast", None)) or timestamp
|
||||||
|
patient_birth_date = format_hl7_date(getattr(order, "tgllahir", None))
|
||||||
|
patient_admit_date = format_hl7_date(getattr(order, "rtglast", None))
|
||||||
sample_id = sanitize_astm_field(order.rnoreg, uppercase=True, max_len=32) or "000000"
|
sample_id = sanitize_astm_field(order.rnoreg, uppercase=True, max_len=32) or "000000"
|
||||||
pid_norm = sanitize_astm_field(order.norm, uppercase=True, max_len=32) or f"PID{sample_id}"
|
pid_norm = sanitize_astm_field(order.norm, uppercase=True, max_len=32) or f"PID{sample_id}"
|
||||||
test_code = sanitize_astm_field(order.tes, uppercase=True, max_len=40) or "ID"
|
first_name, last_name = split_patient_name(order.nama)
|
||||||
specimen_code = sanitize_astm_field(order.kd_spesimen, uppercase=True, max_len=20) or "URC"
|
patient_name = f"{last_name}^{first_name}".strip("^")
|
||||||
|
room = sanitize_astm_field(getattr(order, "ruangan", "") or "RSSA", uppercase=True, max_len=30)
|
||||||
|
test_code_raw = sanitize_astm_field(order.tes, uppercase=True, max_len=40)
|
||||||
|
test_code = test_code_raw if test_code_raw in {"BC", "ID", "SU"} else "ID"
|
||||||
|
specimen_code = sanitize_astm_field(order.kd_spesimen, uppercase=True, max_len=20) or "KULTUR URINE"
|
||||||
|
|
||||||
# Sesuaikan pattern ID seperti contoh vendor (SPE/AWOS + accession).
|
# Sesuaikan pattern ID seperti contoh vendor (SPE/AWOS + accession).
|
||||||
compact_id = re.sub(r"[^A-Z0-9]", "", sample_id) or "000000"
|
compact_id = re.sub(r"[^A-Z0-9]", "", sample_id) or "000000"
|
||||||
@@ -1904,15 +1929,36 @@ def create_myla_hl7_order_message(order, msg_control_id):
|
|||||||
f"MSH|^~\\&|LIS|LAB|MYLA|BMX|{timestamp}||OML^O33^OML_O33|{msg_control_id}|P|2.5.1"
|
f"MSH|^~\\&|LIS|LAB|MYLA|BMX|{timestamp}||OML^O33^OML_O33|{msg_control_id}|P|2.5.1"
|
||||||
f"|||NE|AL||UNICODE UTF-8"
|
f"|||NE|AL||UNICODE UTF-8"
|
||||||
)
|
)
|
||||||
pid = f"PID|||{pid_norm}"
|
pid = build_hl7_segment("PID", {
|
||||||
pv1 = "PV1||O"
|
3: pid_norm,
|
||||||
spm = f"SPM|1|{spm_id}||{specimen_code}^{specimen_code}^99BMx|||||||P^^HL70369||||||{timestamp}"
|
5: patient_name,
|
||||||
sac = f"SAC|||{spm_id}"
|
7: patient_birth_date,
|
||||||
# ORC.9 wajib ada; ikuti contoh MyLA: ORC|NW||||||||<datetime>
|
})
|
||||||
orc = f"ORC|NW||||||||{timestamp}"
|
pv1 = build_hl7_segment("PV1", {
|
||||||
tq1 = "TQ1|||||||||R^^HL7048"
|
2: "O",
|
||||||
obr = f"OBR|1|{obr_order_id}||{test_code}^{test_code}^99BMx"
|
3: f"{room}^^^RSSA",
|
||||||
return f"{msh}\r{pid}\r{pv1}\r{spm}\r{sac}\r{orc}\r{tq1}\r{obr}\r"
|
44: patient_admit_date,
|
||||||
|
})
|
||||||
|
spm = build_hl7_segment("SPM", {
|
||||||
|
1: "1",
|
||||||
|
2: spm_id,
|
||||||
|
4: f"{specimen_code}^{specimen_code}^99BMx",
|
||||||
|
11: "P^Patient^HL70369",
|
||||||
|
17: order_timestamp,
|
||||||
|
})
|
||||||
|
orc = build_hl7_segment("ORC", {
|
||||||
|
1: "NW",
|
||||||
|
9: order_timestamp,
|
||||||
|
})
|
||||||
|
tq1 = build_hl7_segment("TQ1", {
|
||||||
|
9: "R^Routine^HL70485",
|
||||||
|
})
|
||||||
|
obr = build_hl7_segment("OBR", {
|
||||||
|
1: "1",
|
||||||
|
2: obr_order_id,
|
||||||
|
4: f"{test_code}^{test_code}^99BMx",
|
||||||
|
})
|
||||||
|
return f"{msh}\r{pid}\r{pv1}\r{spm}\r{orc}\r{tq1}\r{obr}\r"
|
||||||
|
|
||||||
def process_myla_hl7_message(conn, hl7_str, peer_ip):
|
def process_myla_hl7_message(conn, hl7_str, peer_ip):
|
||||||
incoming_control_id = ""
|
incoming_control_id = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user