Files
lis/htdocs
2026-08-13 10:27:05 +07:00
..
2026-08-13 10:27:05 +07:00
2026-08-01 12:15:25 +07:00
2026-07-22 05:18:55 +07:00
2026-08-04 05:55:29 +07:00
2026-08-10 10:45:31 +07:00
2026-08-09 12:56:27 +07:00
2026-08-10 09:43:15 +07:00
2026-08-02 05:31:32 +07:00
2026-03-13 12:24:10 +07:00
2026-04-04 05:55:40 +07:00
2026-08-02 05:31:32 +07:00

LIS (Laboratory Information System)

Laboratory Information System (LIS) adalah sistem yang digunakan untuk mengelola informasi terkait dengan laboratorium, mulai dari manajemen data sampel, hasil tes, hingga laporan dan pengolahan data terkait laboratorium.

Developer

Aplikasi ini dikembangkan oleh tim pengembang dari CV. Swandhana.

Alamat: Jl. Lamandau 18A, Bunulrejo, Blimbing, Malang

Nomor Telepon (WA): 081359108565

Manual Book

Untuk panduan pengguna atau manual book dari LIS, dapat diunduh melalui link berikut: Download Manual Book

Fitur

  • Pengelolaan data sampel laboratorium
  • Pengolahan dan analisis hasil tes
  • Pembuatan laporan otomatis
  • Integrasi dengan perangkat laboratorium (optional)

Instalasi

  1. Clone repository ini ke sistem lokal Anda:

    git clone https://git.rssa.top/dwi_vendor/lis/repository.git
    
  2. Masuk ke dalam folder proyek:

    cd repository
    
  3. Instal dependensi yang diperlukan:

    composer install
    
  4. Konfigurasi .env sesuai dengan kebutuhan aplikasi Anda.

  5. Jalankan server aplikasi:

    php artisan serve
    

Teknologi yang Digunakan

  • Laravel (PHP Framework)
  • MySQL (Database)
  • 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:

10.10.123.218 -> pg_dump dari 10.10.123.193 -> upload .backup ke duidev.com

Alur restore:

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:

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=1048576
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:

php artisan config:clear

Password PostgreSQL Tanpa Prompt

Buat file ~/.pgpass pada user Linux yang menjalankan cron:

10.10.123.193:5002:lismikro:lismikro:PASSWORD_DATABASE

Lalu amankan permission-nya:

chmod 600 ~/.pgpass

Script Backup Harian

Contoh file /home/mikro/project/backup.sh:

#!/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" --retries=10 --retry-delay=15 --timeout=300
    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:

chmod +x /home/mikro/project/backup.sh

Crontab

Jalankan backup setiap hari jam 23:59:

59 23 * * * /home/mikro/project/backup.sh >> /home/mikro/project/backup.log 2>&1

Lihat log:

tail -n 100 /home/mikro/project/backup.log

Upload Manual

Jika sudah memiliki file .backup dan ingin mengirim ulang ke cloud:

cd /home/mikro/project/htdocs
php artisan backup:upload-file /home/mikro/project/backups/lismikro_YYYY-MM-DD_HH-MM-SS.backup

Jika upload pernah gagal dengan HTTP 524, gunakan chunk lebih kecil dan retry lebih banyak:

php artisan backup:upload-file /home/mikro/project/backups/lismikro_YYYY-MM-DD_HH-MM-SS.backup \
  --chunk-size=1048576 \
  --retries=10 \
  --retry-delay=15 \
  --timeout=300

Download Backup Terbaru

Untuk download saja tanpa restore:

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.

cd /home/mikro/project/htdocs
php artisan backup:restore-latest

Jika ingin langsung restore tanpa pertanyaan konfirmasi:

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:

php artisan register-api:export 2026-08-01 --pretty

Simpan hasil ke file:

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:

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:

{
  "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
    }
  ]
}

Simulasi Kirim Data Seperti SIMRS

Setelah file JSON dibuat dari register-api:export, data dapat dikirim ulang ke endpoint registerApi seolah-olah berasal dari SIMRS.

Tes tanpa mengirim data:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --dry-run

Kirim ke endpoint default dari APP_URL/registerpasien:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json

Kirim ke endpoint tertentu:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json \
  --url=http://10.10.123.218/registerpasien

Batasi pengiriman untuk uji coba:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --limit=5

Tambahkan jeda antar request, misalnya 500 milidetik:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --delay=500

Berhenti jika ada request gagal:

php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --stop-on-error

Contoh alur lengkap:

php artisan register-api:export 2026-08-01 --pretty --output=/home/mikro/project/export-register-api-2026-08-01.json
php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --url=http://10.10.123.218/registerpasien

Kontribusi

Jika Anda ingin berkontribusi pada proyek ini, silakan buat pull request atau issue terkait.

Lisensi

Proyek ini dilisensikan di bawah lisensi MIT. Lihat file LICENSE untuk informasi lebih lanjut.