# 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](http://10.10.123.218/manual.pdf) ## 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: ```bash git clone https://git.rssa.top/dwi_vendor/lis/repository.git ``` 2. Masuk ke dalam folder proyek: ```bash cd repository ``` 3. Instal dependensi yang diperlukan: ```bash composer install ``` 4. Konfigurasi `.env` sesuai dengan kebutuhan aplikasi Anda. 5. Jalankan server aplikasi: ```bash 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: ```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=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: ```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" --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: ```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 ``` Jika upload pernah gagal dengan HTTP `524`, gunakan chunk lebih kecil dan retry lebih banyak: ```bash 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: ```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 } ] } ``` ### Simulasi Kirim Data Seperti SIMRS Setelah file JSON dibuat dari `register-api:export`, data dapat dikirim ulang ke endpoint `registerApi` seolah-olah berasal dari SIMRS. Tes tanpa mengirim data: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --dry-run ``` Kirim ke endpoint default dari `APP_URL/registerpasien`: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json ``` Kirim ke endpoint tertentu: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json \ --url=http://10.10.123.218/registerpasien ``` Batasi pengiriman untuk uji coba: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --limit=5 ``` Tambahkan jeda antar request, misalnya `500` milidetik: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --delay=500 ``` Berhenti jika ada request gagal: ```bash php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --stop-on-error ``` Contoh alur lengkap: ```bash php artisan register-api:export 2026-08-01 --pretty --output=/home/mikro/project/export-register-api-2026-08-01.json php artisan register-api:send-export /home/mikro/project/export-register-api-2026-08-01.json --url=http://10.10.123.218/registerpasien ``` ## Kontribusi 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.