This commit is contained in:
Dwi Swandhana
2026-08-01 12:15:25 +07:00
parent 410916f963
commit 119f73403e
8 changed files with 933 additions and 301 deletions
+12
View File
@@ -64,3 +64,15 @@ BPJS_CONSID="2112121"
BPJS_SECRET_KEY="121212121"
BPJS_BASE_URL="https://new-api.bpjs-kesehatan.go.id:8080"
BPJS_SERVICE_NAME="new-vclaim-rest"
CLOUD_BACKUP_API_URL=https://duidev.com
CLOUD_BACKUP_API_TOKEN=
CLOUD_BACKUP_NAME=lismikro
CLOUD_BACKUP_CHUNK_SIZE=5242880
CLOUD_BACKUP_DOWNLOAD_PATH=
CLOUD_BACKUP_PG_RESTORE=pg_restore
CLOUD_BACKUP_DB_HOST=10.10.123.193
CLOUD_BACKUP_DB_PORT=5002
CLOUD_BACKUP_DB_DATABASE=lismikro
CLOUD_BACKUP_DB_USERNAME=lismikro
CLOUD_BACKUP_DB_PASSWORD=
+213 -1
View File
@@ -47,9 +47,221 @@ Untuk panduan pengguna atau manual book dari LIS, dapat diunduh melalui link ber
- **Bootstrap** (Frontend)
- **jQuery** (Frontend)
## Backup Database ke Cloud
Backup database dijalankan dari server production `10.10.123.218`. Database yang di-backup berada di server PostgreSQL `10.10.123.193`, lalu file hasil backup `.backup` dikirim secara bertahap/chunked ke `https://duidev.com` sebagai cadangan cloud.
Alur backup:
```text
10.10.123.218 -> pg_dump dari 10.10.123.193 -> upload .backup ke duidev.com
```
Alur restore:
```text
10.10.123.218 -> download backup terbaru dari duidev.com -> pg_restore ke 10.10.123.193
```
### Konfigurasi Server Production
Tambahkan konfigurasi berikut di file `.env` server production `10.10.123.218`:
```env
CLOUD_BACKUP_API_URL=https://duidev.com
CLOUD_BACKUP_API_TOKEN=isi_token_rahasia_yang_sama_dengan_duidev
CLOUD_BACKUP_NAME=lismikro
CLOUD_BACKUP_CHUNK_SIZE=5242880
CLOUD_BACKUP_DB_HOST=10.10.123.193
CLOUD_BACKUP_DB_PORT=5002
CLOUD_BACKUP_DB_DATABASE=lismikro
CLOUD_BACKUP_DB_USERNAME=lismikro
CLOUD_BACKUP_DB_PASSWORD=
```
Jika password PostgreSQL sudah disimpan di `.pgpass`, `CLOUD_BACKUP_DB_PASSWORD` boleh dikosongkan.
Setelah mengubah `.env`, jalankan:
```bash
php artisan config:clear
```
### Password PostgreSQL Tanpa Prompt
Buat file `~/.pgpass` pada user Linux yang menjalankan cron:
```text
10.10.123.193:5002:lismikro:lismikro:PASSWORD_DATABASE
```
Lalu amankan permission-nya:
```bash
chmod 600 ~/.pgpass
```
### Script Backup Harian
Contoh file `/home/mikro/project/backup.sh`:
```bash
#!/bin/bash
echo "===== Backup mulai: $(date '+%Y-%m-%d %H:%M:%S') ====="
BACKUP_DIR="/home/mikro/project/backups"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
FILE="$BACKUP_DIR/lismikro_$DATE.backup"
mkdir -p "$BACKUP_DIR"
pg_dump -h 10.10.123.193 -p 5002 -U lismikro -d lismikro -F c -v -f "$FILE"
STATUS=$?
if [ $STATUS -eq 0 ]; then
echo "Backup berhasil: $FILE"
cd /home/mikro/project/htdocs
php artisan backup:upload-file "$FILE"
UPLOAD_STATUS=$?
if [ $UPLOAD_STATUS -eq 0 ]; then
echo "Upload cloud berhasil"
else
echo "Upload cloud gagal dengan status: $UPLOAD_STATUS"
fi
find "$BACKUP_DIR" -type f -name "lismikro_*.backup" -mtime +2 -delete
else
echo "Backup gagal dengan status: $STATUS"
fi
echo "===== Backup selesai: $(date '+%Y-%m-%d %H:%M:%S') ====="
echo ""
```
Aktifkan script:
```bash
chmod +x /home/mikro/project/backup.sh
```
### Crontab
Jalankan backup setiap hari jam `23:59`:
```cron
59 23 * * * /home/mikro/project/backup.sh >> /home/mikro/project/backup.log 2>&1
```
Lihat log:
```bash
tail -n 100 /home/mikro/project/backup.log
```
### Upload Manual
Jika sudah memiliki file `.backup` dan ingin mengirim ulang ke cloud:
```bash
cd /home/mikro/project/htdocs
php artisan backup:upload-file /home/mikro/project/backups/lismikro_YYYY-MM-DD_HH-MM-SS.backup
```
### Download Backup Terbaru
Untuk download saja tanpa restore:
```bash
cd /home/mikro/project/htdocs
php artisan backup:restore-latest --download-only
```
### Restore Penuh ke Database
Restore dijalankan dari server production `10.10.123.218` dan target database adalah `10.10.123.193`.
```bash
cd /home/mikro/project/htdocs
php artisan backup:restore-latest
```
Jika ingin langsung restore tanpa pertanyaan konfirmasi:
```bash
php artisan backup:restore-latest --yes
```
Perintah restore memakai `pg_restore --clean --if-exists --no-owner` secara default. Pastikan `pg_restore` tersedia di server production.
## Export Reverse Payload `registerApi`
Perintah ini menarik data dari tabel `periksa` berdasarkan tanggal tertentu, lalu mengubahnya kembali menjadi JSON dengan key yang sama seperti payload awal `registerApi`.
Contoh export berdasarkan tanggal daftar:
```bash
php artisan register-api:export 2026-08-01 --pretty
```
Simpan hasil ke file:
```bash
php artisan register-api:export 2026-08-01 --pretty --output=/home/mikro/project/export-register-api-2026-08-01.json
```
Secara default filter memakai kolom `daftar`. Jika ingin memakai tanggal lain:
```bash
php artisan register-api:export 2026-08-01 --column=tanggalregis --pretty
php artisan register-api:export 2026-08-01 --column=tanggalsampel --pretty
```
Format JSON yang dihasilkan:
```json
{
"tanggal": "2026-08-01",
"filter_column": "daftar",
"total": 1,
"data": [
{
"norm": "RM001",
"nama": "Nama Pasien",
"alamat": "Alamat Pasien",
"kota": "Kota",
"tgllahir": "1990-01-01",
"nohap": "0000000000",
"kelamin": "L",
"urgensi": "Elective",
"beratbadan": "0",
"nik": "0",
"nobpjs": "0",
"drpeminta": "Dokter Peminta",
"asalpasien": "Rawat Jalan",
"diagnosa": "Diagnosa",
"statusbayar": null,
"nomor_lab": "ORDER001",
"jenispembayaran": "UMM",
"klinisi": "Dokter Peminta",
"jenispemeriksaan": "Jenis Pemeriksaan",
"spesimen": "Sputum",
"kodespesimen": "SPT",
"pengambilan": null,
"keteranganrujukan": "RSSA Malang",
"namarspengirim": "RSSA Malang",
"tanggalregis": "2026-08-01",
"tanggalsampel": "2026-08-01",
"asalpengirim": null
}
]
}
```
## Kontribusi
Jika Anda ingin berkontribusi pada proyek ini, silakan buat **pull request** atau **issue** terkait.
## Lisensi
Proyek ini dilisensikan di bawah lisensi MIT. Lihat file **LICENSE** untuk informasi lebih lanjut.
@@ -0,0 +1,155 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Symfony\Component\Process\Process;
class BackupRestoreLatestCommand extends Command
{
protected $signature = 'backup:restore-latest
{--url= : Base URL server cloud backup}
{--token= : Token API cloud backup}
{--name= : Nama backup}
{--output= : Lokasi file download}
{--file= : Pakai file backup lokal, tanpa download}
{--download-only : Hanya download, tidak restore}
{--host= : Host PostgreSQL target}
{--port= : Port PostgreSQL target}
{--database= : Database PostgreSQL target}
{--username= : Username PostgreSQL target}
{--password= : Password PostgreSQL target, opsional jika .pgpass sudah ada}
{--clean=1 : Jalankan pg_restore --clean}
{--if-exists=1 : Jalankan pg_restore --if-exists}
{--no-owner=1 : Jalankan pg_restore --no-owner}
{--yes : Lewati konfirmasi restore}';
protected $description = 'Download backup terbaru dari duidev.com dan restore penuh ke PostgreSQL.';
public function handle(): int
{
$backupName = (string) ($this->option('name') ?: config('cloud_backup.backup_name', 'lismikro'));
$file = $this->option('file')
? (string) $this->option('file')
: $this->downloadLatest($backupName);
if (!$file || !File::exists($file)) {
$this->error('File backup tidak ditemukan.');
return Command::FAILURE;
}
$this->info('File backup siap: ' . $file);
if ($this->option('download-only')) {
return Command::SUCCESS;
}
$host = (string) ($this->option('host') ?: config('cloud_backup.db_host'));
$port = (string) ($this->option('port') ?: config('cloud_backup.db_port'));
$database = (string) ($this->option('database') ?: config('cloud_backup.db_database'));
$username = (string) ($this->option('username') ?: config('cloud_backup.db_username'));
if (!$this->option('yes') && !$this->confirm("Restore penuh ke database {$database} di {$host}:{$port}?", false)) {
$this->warn('Restore dibatalkan.');
return Command::FAILURE;
}
$command = [
(string) config('cloud_backup.pg_restore', 'pg_restore'),
'-h', $host,
'-p', $port,
'-U', $username,
'-d', $database,
'-v',
];
if ((int) $this->option('clean') === 1) {
$command[] = '--clean';
}
if ((int) $this->option('if-exists') === 1) {
$command[] = '--if-exists';
}
if ((int) $this->option('no-owner') === 1) {
$command[] = '--no-owner';
}
$command[] = $file;
$env = null;
$password = (string) ($this->option('password') ?: config('cloud_backup.db_password'));
if ($password !== '') {
$env = ['PGPASSWORD' => $password];
}
$process = new Process($command, base_path(), $env, null, null);
$process->setTimeout(null);
$this->info('Menjalankan pg_restore...');
$process->run(function (string $type, string $buffer): void {
$this->output->write($buffer);
});
if (!$process->isSuccessful()) {
$this->error('Restore gagal dengan kode: ' . $process->getExitCode());
return Command::FAILURE;
}
$this->info('Restore selesai.');
return Command::SUCCESS;
}
private function downloadLatest(string $backupName): ?string
{
$baseUrl = rtrim((string) ($this->option('url') ?: config('cloud_backup.api_url')), '/');
$token = (string) ($this->option('token') ?: config('cloud_backup.api_token'));
if ($baseUrl === '' || $token === '') {
$this->error('CLOUD_BACKUP_API_URL dan CLOUD_BACKUP_API_TOKEN wajib diisi.');
return null;
}
$output = $this->option('output')
? (string) $this->option('output')
: (string) config('cloud_backup.download_path');
File::ensureDirectoryExists(dirname($output), 0750, true);
$metadata = Http::withToken($token)
->timeout(60)
->get($baseUrl . '/api/backups/latest', ['backup_name' => $backupName]);
if (!$metadata->successful()) {
$this->error('Gagal membaca metadata backup terbaru. HTTP ' . $metadata->status());
$this->line($metadata->body());
return null;
}
$info = $metadata->json();
$this->info('Backup terbaru: ' . ($info['file'] ?? '-'));
$download = Http::withToken($token)
->timeout(0)
->sink($output)
->get($baseUrl . '/api/backups/latest/download', ['backup_name' => $backupName]);
if (!$download->successful()) {
File::delete($output);
$this->error('Gagal download backup. HTTP ' . $download->status());
$this->line($download->body());
return null;
}
if (!empty($info['sha256']) && hash_file('sha256', $output) !== strtolower((string) $info['sha256'])) {
File::delete($output);
$this->error('Checksum file download tidak sesuai.');
return null;
}
return $output;
}
}
@@ -0,0 +1,95 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
class BackupUploadFileCommand extends Command
{
protected $signature = 'backup:upload-file
{file : Path file .backup yang akan dikirim}
{--url= : Base URL server cloud backup}
{--token= : Token API cloud backup}
{--name= : Nama backup}
{--chunk-size= : Ukuran chunk dalam byte}';
protected $description = 'Upload file backup ke duidev.com secara bertahap/chunked.';
public function handle(): int
{
$file = (string) $this->argument('file');
if (!is_file($file) || !is_readable($file)) {
$this->error('File backup tidak ditemukan atau tidak bisa dibaca: ' . $file);
return Command::FAILURE;
}
$baseUrl = rtrim((string) ($this->option('url') ?: config('cloud_backup.api_url')), '/');
$token = (string) ($this->option('token') ?: config('cloud_backup.api_token'));
$backupName = (string) ($this->option('name') ?: config('cloud_backup.backup_name', 'lismikro'));
$chunkSize = (int) ($this->option('chunk-size') ?: config('cloud_backup.chunk_size', 5 * 1024 * 1024));
if ($baseUrl === '' || $token === '') {
$this->error('CLOUD_BACKUP_API_URL dan CLOUD_BACKUP_API_TOKEN wajib diisi.');
return Command::FAILURE;
}
if ($chunkSize < 1024 * 1024) {
$this->error('Chunk size minimal 1 MB.');
return Command::FAILURE;
}
$size = filesize($file);
$checksum = hash_file('sha256', $file);
$totalChunks = (int) ceil($size / $chunkSize);
$uploadId = now()->format('YmdHis') . '_' . Str::random(16);
$endpoint = $baseUrl . '/api/backups/chunk';
$this->info('Upload backup: ' . basename($file));
$this->info('Total chunk: ' . $totalChunks);
$handle = fopen($file, 'rb');
if (!$handle) {
$this->error('Gagal membuka file backup.');
return Command::FAILURE;
}
try {
for ($index = 0; $index < $totalChunks; $index++) {
$chunk = fread($handle, $chunkSize);
if ($chunk === false) {
$this->error('Gagal membaca chunk ke-' . $index);
return Command::FAILURE;
}
$response = Http::withToken($token)
->timeout(300)
->attach('chunk', $chunk, 'chunk_' . $index . '.part')
->post($endpoint, [
'backup_name' => $backupName,
'upload_id' => $uploadId,
'filename' => basename($file),
'chunk_index' => $index,
'total_chunks' => $totalChunks,
'total_size' => $size,
'checksum' => $checksum,
]);
if (!$response->successful()) {
$this->error('Upload chunk ke-' . $index . ' gagal. HTTP ' . $response->status());
$this->line($response->body());
return Command::FAILURE;
}
$this->line('Chunk ' . ($index + 1) . '/' . $totalChunks . ' terkirim.');
}
} finally {
fclose($handle);
}
$this->info('Upload backup selesai.');
return Command::SUCCESS;
}
}
@@ -0,0 +1,138 @@
<?php
namespace App\Console\Commands;
use App\Periksa;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;
class ExportRegisterApiByDateCommand extends Command
{
protected $signature = 'register-api:export
{date : Tanggal data periksa, format YYYY-MM-DD}
{--column=daftar : Kolom tanggal untuk filter, contoh daftar/tanggalregis/tanggalsampel}
{--output= : Simpan hasil JSON ke file}
{--pretty : Format JSON agar mudah dibaca}';
protected $description = 'Export data periksa per tanggal ke format JSON payload registerApi.';
public function handle(): int
{
$date = $this->argument('date');
$column = (string) $this->option('column');
if (!$this->isValidDate($date)) {
$this->error('Format tanggal harus YYYY-MM-DD.');
return Command::FAILURE;
}
if (!in_array($column, ['daftar', 'tanggalregis', 'tanggalsampel'], true)) {
$this->error('Kolom tanggal hanya boleh: daftar, tanggalregis, tanggalsampel.');
return Command::FAILURE;
}
$records = Periksa::with('getPasien')
->whereDate($column, $date)
->orderBy($column)
->orderBy('id')
->get()
->map(fn (Periksa $periksa) => $this->mapPeriksaToRegisterPayload($periksa))
->values();
$payload = [
'tanggal' => $date,
'filter_column' => $column,
'total' => $records->count(),
'data' => $records,
];
$jsonOptions = JSON_UNESCAPED_SLASHES;
if ($this->option('pretty')) {
$jsonOptions |= JSON_PRETTY_PRINT;
}
$json = json_encode($payload, $jsonOptions);
if ($json === false) {
$this->error('Gagal membuat JSON.');
return Command::FAILURE;
}
if ($this->option('output')) {
$output = (string) $this->option('output');
File::ensureDirectoryExists(dirname($output));
File::put($output, $json . PHP_EOL);
$this->info('Export selesai: ' . $output);
$this->info('Total data: ' . $records->count());
return Command::SUCCESS;
}
$this->line($json);
return Command::SUCCESS;
}
private function mapPeriksaToRegisterPayload(Periksa $periksa): array
{
$pasien = $periksa->getPasien;
$tanggalLahir = $this->formatDate($periksa->tgllahirpasien ?? $pasien?->tgl_lahir);
$tanggalRegis = $this->formatDate($periksa->tanggalregis) ?: $this->formatDate($periksa->daftar);
$tanggalSampel = $this->formatDate($periksa->tanggalsampel) ?: $tanggalRegis;
$diagnosa = $periksa->klinis ?: null;
$klinisi = $periksa->klinisi ?: null;
return [
'norm' => $periksa->noregister,
'nama' => $periksa->nmpasien,
'alamat' => $periksa->alamatpasien ?: config('global.addressapps'),
'kota' => $pasien?->kota ?: config('global.subdomainapps'),
'tgllahir' => $tanggalLahir ?: date('Y-m-d'),
'nohap' => $periksa->tlppasien ?: '0000000000',
'kelamin' => $periksa->jkpasien ?: 'L',
'urgensi' => $periksa->urgensi ?: 'Elective',
'beratbadan' => (string) ($periksa->berat ?? '0'),
'nik' => $periksa->ktp ?: '0',
'nobpjs' => $periksa->bpjs ?: '0',
'drpeminta' => $klinisi,
'asalpasien' => $periksa->asalpasien,
'diagnosa' => $diagnosa,
'statusbayar' => null,
'nomor_lab' => $periksa->orderid,
'jenispembayaran' => $periksa->asuransi ?: 'UMM',
'klinisi' => $klinisi,
'jenispemeriksaan' => $periksa->reques,
'spesimen' => $periksa->nm_spesimen,
'kodespesimen' => $periksa->kd_spesimen,
'pengambilan' => $periksa->pengambilan,
'keteranganrujukan' => $periksa->nmrs ?: 'RSSA Malang',
'namarspengirim' => $periksa->nmrs ?: 'RSSA Malang',
'tanggalregis' => $tanggalRegis ?: date('Y-m-d'),
'tanggalsampel' => $tanggalSampel ?: date('Y-m-d'),
'asalpengirim' => $periksa->asalpengirim,
];
}
private function isValidDate(string $date): bool
{
try {
$parsed = Carbon::createFromFormat('Y-m-d', $date);
} catch (\Throwable) {
return false;
}
return $parsed && $parsed->format('Y-m-d') === $date;
}
private function formatDate(mixed $value): ?string
{
if (!$value) {
return null;
}
try {
return Carbon::parse($value)->format('Y-m-d');
} catch (\Throwable) {
return null;
}
}
}
+302 -298
View File
@@ -459,7 +459,7 @@ class DokterController extends Controller
$dlp = $request->input('val10');
$idperiksa = $request->input('periksa_id');
$nofoto = $request->input('acc_number');
$addendumketerangan = $request->input('addendumketerangan');
$addendumketerangan = $request->input('addendumketerangan') ?? '';
if ($kerja == 'Draft'){
$iddokter = Session('id');
}
@@ -468,310 +468,314 @@ class DokterController extends Controller
$nm_spesimen = $periksa->nm_spesimen ?? '';
$noregister = $periksa->noregister ?? '';
$nmadendum = $periksa->nmadendum ?? '';
$tglverifikasi = $periksa->verifikasi ?? $today;
$cekganda = Periksa::where('noregister', $noregister)->where('nmadendum', $nmadendum)->where('id', '!=', $idperiksa)->get();
$statusdraft = 'Pemeriksaan awal';
KomponenJawaban::where('accnumber', $nofoto)->where('template', $dlp)->delete();
$data = $request->except(['_token', 'periksa_id', 'val01', 'val10', 'acc_number']);
foreach ($data as $key => $value) {
if ($value === "" || is_null($value) || $value === "Pilih Salah Satu") continue;
$isidataawal = null;
if (is_array($value)) {
$isidataawal = json_encode($value);
} else {
if ($key == 'id_statusmediatamlainnya' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediasellainnya' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediasda' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediamcconkey' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediacap' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediabap' AND $value != ''){
$statusdraft = $value;
$statuslama = $periksa->status ?? '';
if ($statuslama == 'Selesai' AND $addendumketerangan == ''){
return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Pemeriksaan sudah selesai, silahkan buat adendum untuk menambahkan keterangan']);
} else {
$tglverifikasi = $periksa->verifikasi ?? $today;
$cekganda = Periksa::where('noregister', $noregister)->where('nmadendum', $nmadendum)->where('id', '!=', $idperiksa)->get();
$statusdraft = 'Pemeriksaan awal';
KomponenJawaban::where('accnumber', $nofoto)->where('template', $dlp)->delete();
$data = $request->except(['_token', 'periksa_id', 'val01', 'val10', 'acc_number']);
foreach ($data as $key => $value) {
if ($value === "" || is_null($value) || $value === "Pilih Salah Satu") continue;
$isidataawal = null;
if (is_array($value)) {
$isidataawal = json_encode($value);
} else {
}
$isidataawal = $value;
}
KomponenJawaban::updateOrCreate(
[
'accnumber' => $nofoto,
'komponen' => $key,
],
[
'isidata' => $isidataawal,
'template' => $dlp,
'created_by' => session('nama'),
]
);
$yangperludicloning = '';
if ($key == 'id_selepitel'){ $yangperludicloning = 'lsg_selepitel'; }
if ($key == 'id_selradang'){ $yangperludicloning = 'lsg_selradang'; }
if ($key == 'id_mikroorganisme'){ $yangperludicloning = 'lsg_mikroorganisme'; }
if ($key == 'id_mikroorganismeoptional'){ $yangperludicloning = 'lsg_mikroorganismeoptional'; }
if ($key == 'id_pewarnaanziehlnielsen'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsen'; }
if ($key == 'id_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsensewaktu'; }
if ($key == 'id_pewarnaankoh'){ $yangperludicloning = 'lsg_pewarnaankoh'; }
if ($key == 'id_pewarnaankohoptional'){ $yangperludicloning = 'lsg_pewarnaankohoptional'; }
if ($key == 'id_pewarnaanneisser'){ $yangperludicloning = 'lsg_pewarnaanneisser'; }
if ($key == 'id_pewarnaannegatif'){ $yangperludicloning = 'lsg_pewarnaannegatif'; }
if ($key == 'id_pewarnaanspora'){ $yangperludicloning = 'lsg_pewarnaanspora'; }
if ($key == 'id_pewarnaangiesma'){ $yangperludicloning = 'lsg_pewarnaangiesma'; }
if ($key == 'id_pewarnaangiesmaoptional'){ $yangperludicloning = 'lsg_pewarnaangiesmaoptional'; }
if ($key == 'lsg_selepitel'){ $yangperludicloning = 'id_selepitel'; }
if ($key == 'lsg_selradang'){ $yangperludicloning = 'id_selradang'; }
if ($key == 'lsg_mikroorganisme'){ $yangperludicloning = 'id_mikroorganisme'; }
if ($key == 'lsg_mikroorganismeoptional'){ $yangperludicloning = 'id_mikroorganismeoptional'; }
if ($key == 'lsg_pewarnaanziehlnielsen'){ $yangperludicloning = 'id_pewarnaanziehlnielsen'; }
if ($key == 'lsg_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'id_pewarnaanziehlnielsensewaktu'; }
if ($key == 'lsg_pewarnaankoh'){ $yangperludicloning = 'id_pewarnaankoh'; }
if ($key == 'lsg_pewarnaankohoptional'){ $yangperludicloning = 'id_pewarnaankohoptional'; }
if ($key == 'lsg_pewarnaanneisser'){ $yangperludicloning = 'id_pewarnaanneisser'; }
if ($key == 'lsg_pewarnaannegatif'){ $yangperludicloning = 'id_pewarnaannegatif'; }
if ($key == 'lsg_pewarnaanspora'){ $yangperludicloning = 'id_pewarnaanspora'; }
if ($key == 'lsg_pewarnaangiesma'){ $yangperludicloning = 'id_pewarnaangiesma'; }
if ($key == 'lsg_pewarnaangiesmaoptional'){ $yangperludicloning = 'id_pewarnaangiesmaoptional'; }
if (!empty($cekganda) AND $yangperludicloning != ''){
foreach($cekganda as $rcloning){
$nofotocloning = $rcloning->nofoto;
$dlpcloning = $rcloning->dlp ?? 'Kultur';
$cekada = KomponenJawaban::where('accnumber', $nofotocloning)->where('komponen', $yangperludicloning)->first();
if ($cekada){
if ($key == 'id_statusmediatamlainnya' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediasellainnya' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediasda' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediamcconkey' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediacap' AND $value != ''){
$statusdraft = $value;
} else if ($key == 'id_statusmediabap' AND $value != ''){
$statusdraft = $value;
} else {
KomponenJawaban::updateOrCreate(
[
'accnumber' => $nofotocloning,
'komponen' => $yangperludicloning,
],
[
'isidata' => $isidataawal,
'template' => $dlpcloning,
'created_by' => session('nama'),
]
);
Riwayat::create([
'nofoto' => $nofotocloning,
'jawaban' => $isidataawal,
'inputor' => Session('nama'),
'keterangan' => 'Clone Data '.$yangperludicloning.' Dari ('.$nofoto.')',
'verifikasi' => '',
]);
}
$isidataawal = $value;
}
KomponenJawaban::updateOrCreate(
[
'accnumber' => $nofoto,
'komponen' => $key,
],
[
'isidata' => $isidataawal,
'template' => $dlp,
'created_by' => session('nama'),
]
);
$yangperludicloning = '';
if ($key == 'id_selepitel'){ $yangperludicloning = 'lsg_selepitel'; }
if ($key == 'id_selradang'){ $yangperludicloning = 'lsg_selradang'; }
if ($key == 'id_mikroorganisme'){ $yangperludicloning = 'lsg_mikroorganisme'; }
if ($key == 'id_mikroorganismeoptional'){ $yangperludicloning = 'lsg_mikroorganismeoptional'; }
if ($key == 'id_pewarnaanziehlnielsen'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsen'; }
if ($key == 'id_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsensewaktu'; }
if ($key == 'id_pewarnaankoh'){ $yangperludicloning = 'lsg_pewarnaankoh'; }
if ($key == 'id_pewarnaankohoptional'){ $yangperludicloning = 'lsg_pewarnaankohoptional'; }
if ($key == 'id_pewarnaanneisser'){ $yangperludicloning = 'lsg_pewarnaanneisser'; }
if ($key == 'id_pewarnaannegatif'){ $yangperludicloning = 'lsg_pewarnaannegatif'; }
if ($key == 'id_pewarnaanspora'){ $yangperludicloning = 'lsg_pewarnaanspora'; }
if ($key == 'id_pewarnaangiesma'){ $yangperludicloning = 'lsg_pewarnaangiesma'; }
if ($key == 'id_pewarnaangiesmaoptional'){ $yangperludicloning = 'lsg_pewarnaangiesmaoptional'; }
if ($key == 'lsg_selepitel'){ $yangperludicloning = 'id_selepitel'; }
if ($key == 'lsg_selradang'){ $yangperludicloning = 'id_selradang'; }
if ($key == 'lsg_mikroorganisme'){ $yangperludicloning = 'id_mikroorganisme'; }
if ($key == 'lsg_mikroorganismeoptional'){ $yangperludicloning = 'id_mikroorganismeoptional'; }
if ($key == 'lsg_pewarnaanziehlnielsen'){ $yangperludicloning = 'id_pewarnaanziehlnielsen'; }
if ($key == 'lsg_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'id_pewarnaanziehlnielsensewaktu'; }
if ($key == 'lsg_pewarnaankoh'){ $yangperludicloning = 'id_pewarnaankoh'; }
if ($key == 'lsg_pewarnaankohoptional'){ $yangperludicloning = 'id_pewarnaankohoptional'; }
if ($key == 'lsg_pewarnaanneisser'){ $yangperludicloning = 'id_pewarnaanneisser'; }
if ($key == 'lsg_pewarnaannegatif'){ $yangperludicloning = 'id_pewarnaannegatif'; }
if ($key == 'lsg_pewarnaanspora'){ $yangperludicloning = 'id_pewarnaanspora'; }
if ($key == 'lsg_pewarnaangiesma'){ $yangperludicloning = 'id_pewarnaangiesma'; }
if ($key == 'lsg_pewarnaangiesmaoptional'){ $yangperludicloning = 'id_pewarnaangiesmaoptional'; }
if (!empty($cekganda) AND $yangperludicloning != ''){
foreach($cekganda as $rcloning){
$nofotocloning = $rcloning->nofoto;
$dlpcloning = $rcloning->dlp ?? 'Kultur';
$cekada = KomponenJawaban::where('accnumber', $nofotocloning)->where('komponen', $yangperludicloning)->first();
if ($cekada){
} else {
KomponenJawaban::updateOrCreate(
[
'accnumber' => $nofotocloning,
'komponen' => $yangperludicloning,
],
[
'isidata' => $isidataawal,
'template' => $dlpcloning,
'created_by' => session('nama'),
]
);
Riwayat::create([
'nofoto' => $nofotocloning,
'jawaban' => $isidataawal,
'inputor' => Session('nama'),
'keterangan' => 'Clone Data '.$yangperludicloning.' Dari ('.$nofoto.')',
'verifikasi' => '',
]);
}
}
}
}
}
$analis = $request->input('analis');
$ppds3 = $request->input('ppds3');
$cekdokter = optional(User::find($iddokter));
$cekanalis = optional(User::find($analis));
$cekppds3 = optional(User::find($ppds3));
$statusdraft = $this->resolvePeriksaHierarchyStatus($periksa->status, $statusdraft);
switch ($kerja) {
case 'verifikasi':
if ($periksa->status != 'Selesai'){
$tglverifikasi = date('Y-m-d H:i:s');
}
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => Session('id'),
'nmdokter' => Session('nama'),
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'verifikasi' => $tglverifikasi,
'akhir' => $tglverifikasi,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => 'Selesai',
];
$periksa->update($updateData);
if ($this->shouldMarkAsCritical($request)) {
$this->upsertCriticalValueSample($periksa);
}
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Expertise',
]);
if (isset($addendumketerangan) AND $addendumketerangan != ''){
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $addendumketerangan,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Addendum',
]);
}
if (is_null($nofoto)){
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Expertise Verified']);
} else {
$pesan = 'Expertise Saved';
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]);
}
case 'statuspewarnaanlsg':
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Pewarnaan Langsung'),
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Set Status Pewarnaan Langsung']);
case 'preliminary':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => Session('id'),
'nmdokter' => Session('nama'),
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'verifikasi' => $tglverifikasi,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Preliminary Results'),
];
$periksa->update($updateData);
if ($this->shouldMarkAsCritical($request)) {
$this->upsertCriticalValueSample($periksa);
}
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Preliminary Results',
]);
$pesan = 'Preliminary Results Saved';
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]);
case 'Permohonan Verifikasi':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'baca' => $today,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'nmpembaca' => Session('nama'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Expertise Saved (Un Verified)'),
];
$periksa->update($updateData);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Kirim ke SPV',
]);
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Terkirim']);
case 'Permohonan Verifikasi Preliminary':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'baca' => $today,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'nmpembaca' => Session('nama'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Otor Maldi (Un Verified)'),
];
$periksa->update($updateData);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Kirim Preliminary ke SPV',
]);
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Preliminary Terkirim']);
case 'tolakadendum':
Riwayat::where('nofoto', $nofoto)->whereNull('verifikasi')->update([
'verifikasi' => 'Declined',
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Declined']);
case 'Draft':
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $statusdraft
]);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => '',
'keterangan' => 'Draft',
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Draft Expertise Saved']);
case 'terimadendum':
$getid = Riwayat::where('keterangan', 'Adendum')->where('nofoto', $nofoto)->whereNull('verifikasi')->first();
if (isset($getid->id)){
Riwayat::where('id', $getid->id)->update([
'verifikasi' => 'Accepted',
]);
Periksa::where('nofoto', $getid->nofoto)->update([
$analis = $request->input('analis');
$ppds3 = $request->input('ppds3');
$cekdokter = optional(User::find($iddokter));
$cekanalis = optional(User::find($analis));
$cekppds3 = optional(User::find($ppds3));
$statusdraft = $this->resolvePeriksaHierarchyStatus($periksa->status, $statusdraft);
switch ($kerja) {
case 'verifikasi':
if ($periksa->status != 'Selesai'){
$tglverifikasi = date('Y-m-d H:i:s');
}
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => Session('id'),
'nmdokter' => Session('nama'),
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'verifikasi' => $tglverifikasi,
'akhir' => $tglverifikasi,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'tgladendum' => now(),
'keterangan' => $getid->jawaban
'status' => 'Selesai',
];
$periksa->update($updateData);
if ($this->shouldMarkAsCritical($request)) {
$this->upsertCriticalValueSample($periksa);
}
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Expertise',
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Accepted']);
} else {
return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Addendum Data Cannot Be Found']);
}
default:
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $statusdraft
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Expertise Saved']);
if (isset($addendumketerangan) AND $addendumketerangan != ''){
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $addendumketerangan,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Addendum',
]);
}
if (is_null($nofoto)){
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Expertise Verified']);
} else {
$pesan = 'Expertise Saved';
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]);
}
case 'statuspewarnaanlsg':
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Pewarnaan Langsung'),
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Set Status Pewarnaan Langsung']);
case 'preliminary':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => Session('id'),
'nmdokter' => Session('nama'),
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'verifikasi' => $tglverifikasi,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Preliminary Results'),
];
$periksa->update($updateData);
if ($this->shouldMarkAsCritical($request)) {
$this->upsertCriticalValueSample($periksa);
}
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Preliminary Results',
]);
$pesan = 'Preliminary Results Saved';
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]);
case 'Permohonan Verifikasi':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'baca' => $today,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'nmpembaca' => Session('nama'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Expertise Saved (Un Verified)'),
];
$periksa->update($updateData);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Kirim ke SPV',
]);
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Terkirim']);
case 'Permohonan Verifikasi Preliminary':
$updateData = [
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'tandatangan' => '',
'baca' => $today,
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'nmpembaca' => Session('nama'),
'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Otor Maldi (Un Verified)'),
];
$periksa->update($updateData);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => 'Accepted',
'keterangan' => 'Kirim Preliminary ke SPV',
]);
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Preliminary Terkirim']);
case 'tolakadendum':
Riwayat::where('nofoto', $nofoto)->whereNull('verifikasi')->update([
'verifikasi' => 'Declined',
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Declined']);
case 'Draft':
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $statusdraft
]);
$surat = self::genSurat($periksa->id, 'dengan kop');
Riwayat::create([
'nofoto' => $nofoto,
'jawaban' => $surat,
'inputor' => Session('nama'),
'verifikasi' => '',
'keterangan' => 'Draft',
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Draft Expertise Saved']);
case 'terimadendum':
$getid = Riwayat::where('keterangan', 'Adendum')->where('nofoto', $nofoto)->whereNull('verifikasi')->first();
if (isset($getid->id)){
Riwayat::where('id', $getid->id)->update([
'verifikasi' => 'Accepted',
]);
Periksa::where('nofoto', $getid->nofoto)->update([
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'tgladendum' => now(),
'keterangan' => $getid->jawaban
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Accepted']);
} else {
return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Addendum Data Cannot Be Found']);
}
default:
$periksa->update([
'keterangan' => $keterangan,
'dlp' => $dlp,
'analis' => $analis,
'nmanalis' => $cekanalis->nama ?? null,
'dokter_id' => $iddokter,
'nmdokter' => $cekdokter->nama ?? null,
'ppdssenior' => $ppds3,
'nmppdssenior' => $cekppds3->nama ?? null,
'nmdrafter' => Session('nama'),
'nmexcutor' => Session('nama'),
'excutor' => Session('id'),
'status' => $statusdraft
]);
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Expertise Saved']);
}
}
}
protected function resolvePeriksaHierarchyStatus($currentStatus, $proposedStatus): string {
@@ -3891,7 +3895,7 @@ class DokterController extends Controller
$data[] = array(
'nofoto' => $rows->nofoto,
'nolab' => $rows->orderid,
'norm' => $rows->norm,
'norm' => $rows->noregister,
'jenispemeriksaan' => $rows->reques,
'mulai' => $rows->daftar,
'selesai' => $rows->verifikasi,
@@ -1122,7 +1122,7 @@ class FrontpageController extends Controller
$nik = $request->input('nik') ?? 0;
$bpjs = $request->input('bpjs') ?? 0;
$tlsasal = $request->input('asalpasien');
$nmrs = $request->input('namarspengirim') ?? 'RSSA Malang';
$nmrs = $request->input('namarspengirim') ?? $request->input('keteranganrujukan') ?? 'RSSA Malang';
$klinisi = $request->input('drpeminta');
$insurance = $request->input('asuransi') ?? 'UMM';
$rekues = $request->input('layanan');
@@ -1340,7 +1340,7 @@ class FrontpageController extends Controller
$nm_spesimen = $decodedData['spesimen'] ?? null;
$kd_spesimen = $decodedData['kodespesimen'] ?? null;
$pengambilan = $decodedData['pengambilan'] ?? null;
$nmrs = $decodedData['keteranganrujukan'] ?? 'RSSA Malang';
$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;
+16
View File
@@ -0,0 +1,16 @@
<?php
return [
'api_url' => env('CLOUD_BACKUP_API_URL', 'https://duidev.com'),
'api_token' => env('CLOUD_BACKUP_API_TOKEN'),
'backup_name' => env('CLOUD_BACKUP_NAME', 'lismikro'),
'chunk_size' => (int) env('CLOUD_BACKUP_CHUNK_SIZE', 5 * 1024 * 1024),
'download_path' => env('CLOUD_BACKUP_DOWNLOAD_PATH', storage_path('app/cloud-backups/lismikro_latest.backup')),
'pg_restore' => env('CLOUD_BACKUP_PG_RESTORE', 'pg_restore'),
'db_host' => env('CLOUD_BACKUP_DB_HOST', '10.10.123.193'),
'db_port' => env('CLOUD_BACKUP_DB_PORT', '5002'),
'db_database' => env('CLOUD_BACKUP_DB_DATABASE', 'lismikro'),
'db_username' => env('CLOUD_BACKUP_DB_USERNAME', 'lismikro'),
'db_password' => env('CLOUD_BACKUP_DB_PASSWORD'),
];