Compare commits
470
Commits
duidev
...
97de187bc8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97de187bc8 | ||
|
|
5b284fd0d3 | ||
|
|
6c6520b3eb | ||
|
|
59d448360f | ||
|
|
3decbec88e | ||
|
|
c3af859439 | ||
|
|
ec2c3178ee | ||
|
|
fd3068bead | ||
|
|
550fc64763 | ||
|
|
58e27eb92b | ||
|
|
765bfd91f3 | ||
|
|
36582a9811 | ||
|
|
d764663f35 | ||
|
|
14301f7216 | ||
|
|
9dc9bccc76 | ||
|
|
36ad5d7af2 | ||
|
|
a04c5330d5 | ||
|
|
3ef25c9e95 | ||
|
|
b82a799e20 | ||
|
|
f0dc7987a9 | ||
|
|
73a9ac103e | ||
|
|
3e6b70d7bd | ||
|
|
136470d4ba | ||
|
|
9363533c3c | ||
|
|
b93784be6a | ||
|
|
caa039b5b4 | ||
|
|
d8fc98d1a8 | ||
|
|
fd865f6756 | ||
|
|
587267b63a | ||
|
|
08a62487ab | ||
|
|
bb2c893872 | ||
|
|
3192425fc6 | ||
|
|
c2cbdff4e5 | ||
|
|
d369d3754b | ||
|
|
2bf4cac343 | ||
|
|
207c9ef17d | ||
|
|
f97105aeb0 | ||
|
|
60681f08cc | ||
|
|
b957be735d | ||
|
|
3e1ed72727 | ||
|
|
334728e16e | ||
|
|
16f541ca77 | ||
|
|
cd07dee705 | ||
|
|
c7771029ee | ||
|
|
19c3e0b6d4 | ||
|
|
d5f6f2812c | ||
|
|
4ebcbf0869 | ||
|
|
8e87beeb9f | ||
|
|
2f60f36307 | ||
|
|
03855a99b1 | ||
|
|
0891978d46 | ||
|
|
a3a98b13e3 | ||
|
|
119f73403e | ||
|
|
410916f963 | ||
|
|
d1e6ab0133 | ||
|
|
73b2e1ca7c | ||
|
|
9cc78b23e0 | ||
|
|
213270ede1 | ||
|
|
e04d43dfdf | ||
|
|
848f0e4100 | ||
|
|
5774d55f71 | ||
|
|
9e4774bd5e | ||
|
|
92dc35396b | ||
|
|
040284ec29 | ||
|
|
b222a79283 | ||
|
|
32db765b98 | ||
|
|
6d0f9a8bf6 | ||
|
|
d944647129 | ||
|
|
707e2cb841 | ||
|
|
0123036226 | ||
|
|
08984801f9 | ||
|
|
82dc63822e | ||
|
|
d1e9fe03d6 | ||
|
|
8a233d6c1b | ||
|
|
335355a5ba | ||
|
|
4450076726 | ||
|
|
5e097c1abc | ||
|
|
92117e3320 | ||
|
|
3f0f6534d7 | ||
|
|
7febb03b5d | ||
|
|
30e39875c0 | ||
|
|
616f0658d6 | ||
|
|
9b831791f5 | ||
|
|
79ff65d87c | ||
|
|
d6bba3e216 | ||
|
|
943282e3f9 | ||
|
|
0f93db0431 | ||
|
|
f2dbbf9f5e | ||
|
|
741ac2dffd | ||
|
|
510e8a2352 | ||
|
|
146bab0a46 | ||
|
|
d725332bc3 | ||
|
|
67ff560077 | ||
|
|
0f8c73bc50 | ||
|
|
f857eec85c | ||
|
|
ed92325536 | ||
|
|
9a65fa8227 | ||
|
|
480db23635 | ||
|
|
7758df12f2 | ||
|
|
cc11aecb10 | ||
|
|
513eacbfa1 | ||
|
|
d3ac4fc33f | ||
|
|
f7cb75c9cf | ||
|
|
b793755d95 | ||
|
|
fb6e11c0e6 | ||
|
|
305c87de9a | ||
|
|
3660303c3c | ||
|
|
050ff69068 | ||
|
|
5064baa89e | ||
|
|
8ee7760ad4 | ||
|
|
c6522590fa | ||
|
|
90c7a70214 | ||
|
|
46c6c2f48b | ||
|
|
dd227a88b3 | ||
|
|
0ffa8786c2 | ||
|
|
9fa23b9826 | ||
|
|
3e9e8daea6 | ||
|
|
acac1fe3c8 | ||
|
|
714b6ab26d | ||
|
|
a9c6cf12ca | ||
|
|
930cf48cfe | ||
|
|
a0a2e79067 | ||
|
|
c78d15e67a | ||
|
|
c70d7ebb93 | ||
|
|
03090cbe74 | ||
|
|
45b4f41e57 | ||
|
|
dd14d2ddf5 | ||
|
|
493dfe18eb | ||
|
|
49e94c3fb5 | ||
|
|
4d942523d1 | ||
|
|
35d8211a65 | ||
|
|
b6f2e66729 | ||
|
|
4ffd7fa681 | ||
|
|
362a70fa1a | ||
|
|
cf6fd529b0 | ||
|
|
9ec56cbf5d | ||
|
|
4cfd4307a8 | ||
|
|
264e383b67 | ||
|
|
8863dbb85f | ||
|
|
da5105f219 | ||
|
|
a6b180378b | ||
|
|
667e5924a8 | ||
|
|
ea436f76d8 | ||
|
|
206a90ff2f | ||
|
|
52cc4a58cf | ||
|
|
229c0dd9f3 | ||
|
|
4a48063931 | ||
|
|
04ad16f72a | ||
|
|
22a877f2e7 | ||
|
|
df3396a776 | ||
|
|
b751d782c4 | ||
|
|
453e3db3a3 | ||
|
|
a0bd6b645c | ||
|
|
16eac8512e | ||
|
|
fe89a024a1 | ||
|
|
38ffa918c3 | ||
|
|
d8c6ab7b55 | ||
|
|
bb680d41d3 | ||
|
|
4971ad0d5a | ||
|
|
008400f1e0 | ||
|
|
b3caf1691d | ||
|
|
1a1d58e60a | ||
|
|
1b41f3e6ee | ||
|
|
93ee78982f | ||
|
|
7ca1e3a96e | ||
|
|
e3086919b7 | ||
|
|
f52b4a42e1 | ||
|
|
0c3a29e3b6 | ||
|
|
8628087bfc | ||
|
|
f964939863 | ||
|
|
b139161cca | ||
|
|
2abb6027a6 | ||
|
|
5c5bf0ce19 | ||
|
|
f301de8cb5 | ||
|
|
b7195cc629 | ||
|
|
2b91b18275 | ||
|
|
676ec49cb2 | ||
|
|
b34a379333 | ||
|
|
0c17c91f92 | ||
|
|
20ca52ca4d | ||
|
|
2371584fdc | ||
|
|
fa0ebaa045 | ||
|
|
e2975ea6f2 | ||
|
|
cfc9ec5b76 | ||
|
|
1e9f6f9ddf | ||
|
|
ed406bad08 | ||
|
|
4d025dc57d | ||
|
|
4f7575c7d4 | ||
|
|
e1a3598472 | ||
|
|
6e9951adf6 | ||
|
|
9716fc05f6 | ||
|
|
b0da4e5433 | ||
|
|
f84131e6bf | ||
|
|
9751007863 | ||
|
|
68f6ecc98e | ||
|
|
e850444e12 | ||
|
|
8a96f58858 | ||
|
|
15095734b1 | ||
|
|
500f97f63e | ||
|
|
4f3bb88f68 | ||
|
|
d5c4438b75 | ||
|
|
0e733aa14a | ||
|
|
cd1a8d64b9 | ||
|
|
80d03ac5c1 | ||
|
|
a979b16df4 | ||
|
|
4da0cc6253 | ||
|
|
bbc6dee2c9 | ||
|
|
6a009108e7 | ||
|
|
e3afceee52 | ||
|
|
89d254eae8 | ||
|
|
5a6dfc2a1e | ||
|
|
b418df929f | ||
|
|
7870c17cfc | ||
|
|
d6fd25c41a | ||
|
|
2ae99ec5a0 | ||
|
|
5d3a3eecd0 | ||
|
|
6fb3f5a629 | ||
|
|
52ee41e50c | ||
|
|
d6b59cce4c | ||
|
|
e03381c6aa | ||
|
|
3eb845b503 | ||
|
|
5aed126889 | ||
|
|
2e0461b528 | ||
|
|
95d2f6e507 | ||
|
|
a1ac1f888b | ||
|
|
f7bf4ddf1a | ||
|
|
490e580bd1 | ||
|
|
f27c7430c3 | ||
|
|
e7de471d8a | ||
|
|
6ed786db1b | ||
|
|
4ce48077e6 | ||
|
|
ba793c03f2 | ||
|
|
a67f5fc607 | ||
|
|
5f37ce8def | ||
|
|
9bd38a470e | ||
|
|
3754ae3531 | ||
|
|
27ef021783 | ||
|
|
fa26a01143 | ||
|
|
2dffd56816 | ||
|
|
ab438f0c55 | ||
|
|
5d6afc19af | ||
|
|
c290ac693b | ||
|
|
e3094ff717 | ||
|
|
38251402b8 | ||
|
|
afa2aa1447 | ||
|
|
d6824037d2 | ||
|
|
004085d0e5 | ||
|
|
d9e1af195c | ||
|
|
934c90c412 | ||
|
|
f1a5e63800 | ||
|
|
beb9777832 | ||
|
|
aca2d9d745 | ||
|
|
97fce44ad3 | ||
|
|
cfdf71f816 | ||
|
|
2782f43290 | ||
|
|
b945d8198a | ||
|
|
f930494592 | ||
|
|
fc0864de08 | ||
|
|
632fff4230 | ||
|
|
72041e07ce | ||
|
|
ec0612a1dc | ||
|
|
c96552789e | ||
|
|
08bddf171a | ||
|
|
28d8b283fb | ||
|
|
bbd4a82d49 | ||
|
|
b4d3e2987b | ||
|
|
ff7b6288aa | ||
|
|
e308134a67 | ||
|
|
be74b25ae3 | ||
|
|
b7fba7a91c | ||
|
|
f389483da1 | ||
|
|
1cfb63ab60 | ||
|
|
ae003aaa2f | ||
|
|
5cc7ec4fcf | ||
|
|
4a8006c399 | ||
|
|
e0ac8dd30d | ||
|
|
d59f1a9807 | ||
|
|
90e9382d30 | ||
|
|
9f3ce0c1b7 | ||
|
|
b41981b798 | ||
|
|
86d4a2354b | ||
|
|
b353f00659 | ||
|
|
9d33a2eb51 | ||
|
|
e0edd03157 | ||
|
|
d18c5abd78 | ||
|
|
c3d0929cda | ||
|
|
354f869b13 | ||
|
|
6d23d9c97d | ||
|
|
93c5e9ef09 | ||
|
|
9960f1337d | ||
|
|
26c559b3c6 | ||
|
|
c35df25932 | ||
|
|
af2dd2f819 | ||
|
|
aed5885eb1 | ||
|
|
41cbe00299 | ||
|
|
b8a94e4508 | ||
|
|
9f1a28ae97 | ||
|
|
9b39dfb856 | ||
|
|
924610e36e | ||
|
|
074a260c8c | ||
|
|
3c63cb5d22 | ||
|
|
5274d53681 | ||
|
|
f2e562564d | ||
|
|
dea0da9357 | ||
|
|
b8c61a054b | ||
|
|
f7ccea75dc | ||
|
|
3b61faafbd | ||
|
|
1dac4b9e2a | ||
|
|
638bec1c1c | ||
|
|
fddfe775ce | ||
|
|
6d859d1c6a | ||
|
|
b5ee2d995e | ||
|
|
c018b31c22 | ||
|
|
37826bd08f | ||
|
|
a6807575a2 | ||
|
|
a39f26e226 | ||
|
|
81c5249575 | ||
|
|
6acae8ddc5 | ||
|
|
539d0a8b50 | ||
|
|
6f5f9c179e | ||
|
|
7f0f7439c0 | ||
|
|
cd14cdfdb4 | ||
|
|
9ab8aa2f52 | ||
|
|
434727a6eb | ||
|
|
2592d8190e | ||
|
|
f2c2e3441e | ||
|
|
cbc7fcd1be | ||
|
|
d56a218253 | ||
|
|
077a8af2c2 | ||
|
|
475ff6ef9b | ||
|
|
b242d6726d | ||
|
|
55b9698f69 | ||
|
|
897bbba085 | ||
|
|
3af340d09d | ||
|
|
11bc7e172f | ||
|
|
d8ff19c9b2 | ||
|
|
083de5fb96 | ||
|
|
41139d3df5 | ||
|
|
5865d44110 | ||
|
|
32cd616fac | ||
|
|
db0695803e | ||
|
|
c8542b2816 | ||
|
|
06ea1415cc | ||
|
|
8bb448229c | ||
|
|
5c255e2e83 | ||
|
|
a9ea401f65 | ||
|
|
b0586dac0a | ||
|
|
ae32330ed7 | ||
|
|
2f66799ba3 | ||
|
|
55a1229440 | ||
|
|
c2b25fa4ca | ||
|
|
2752193752 | ||
|
|
7e53d8e1da | ||
|
|
03f087212f | ||
|
|
f773ae23da | ||
|
|
756a6ccc68 | ||
|
|
1e1b2fafed | ||
|
|
355ba42865 | ||
|
|
eff628ae2a | ||
|
|
5df034f972 | ||
|
|
9f0d1118b0 | ||
|
|
ddef9f4ffb | ||
|
|
62fa8c2f9f | ||
|
|
beb0efa075 | ||
|
|
42a2424721 | ||
|
|
6b79efb025 | ||
|
|
c7d542522e | ||
|
|
7ec8d0dbcc | ||
|
|
43cd6afde8 | ||
|
|
607a867376 | ||
|
|
9e3368d69d | ||
|
|
13259e78c8 | ||
|
|
7140bb4e2e | ||
|
|
cb2f8f1a28 | ||
|
|
e1297e0a68 | ||
|
|
14130282ed | ||
|
|
fca937d1de | ||
|
|
b7eea4a204 | ||
|
|
6d9752dca5 | ||
|
|
321be52826 | ||
|
|
9ce76551b9 | ||
|
|
62dd01964a | ||
|
|
7517e70146 | ||
|
|
dd662cdb9f | ||
|
|
1549af8344 | ||
|
|
ff8c7d4c6d | ||
|
|
54160e2e19 | ||
|
|
58cb578332 | ||
|
|
bf70061993 | ||
|
|
cf60f77f13 | ||
|
|
3cd985682f | ||
|
|
8616d20d9c | ||
|
|
950de788d5 | ||
|
|
1d1a300a85 | ||
|
|
a7aaf4befe | ||
|
|
3e5501faa6 | ||
|
|
403cc24bc9 | ||
|
|
f011f8e71e | ||
|
|
8d81bd606e | ||
|
|
6cba217e92 | ||
|
|
5d40f403f1 | ||
|
|
f943337f7c | ||
|
|
22076a7b11 | ||
|
|
a8988d3675 | ||
|
|
146197af3a | ||
|
|
edc26692f9 | ||
|
|
06e9c199b7 | ||
|
|
337dfdb5dd | ||
|
|
5571e206db | ||
|
|
a9afeeb12d | ||
|
|
4583ac6cd7 | ||
|
|
98d6b688e9 | ||
|
|
8be6231df6 | ||
|
|
e7c6d50141 | ||
|
|
3e9db11a83 | ||
|
|
b5ebccf366 | ||
|
|
78b9d8a4ee | ||
|
|
3d3a60c747 | ||
|
|
48dd3b9009 | ||
|
|
6882563cb6 | ||
|
|
e63353db3d | ||
|
|
fdbe9c2522 | ||
|
|
d228103a89 | ||
|
|
3d093a3c30 | ||
|
|
0ad8bf110e | ||
|
|
0adb7b2a76 | ||
|
|
b2c5df08a2 | ||
|
|
8f079b9f6c | ||
|
|
aa0a7897cf | ||
|
|
0520d51179 | ||
|
|
fda1ef3a5c | ||
|
|
6dd49e447b | ||
|
|
c0373c9436 | ||
|
|
34d324c886 | ||
|
|
c0c7c1b5fd | ||
|
|
90ab13dafd | ||
|
|
53564306e0 | ||
|
|
dd4e5e451f | ||
|
|
b2facc5b0e | ||
|
|
5d172ab337 | ||
|
|
684705b383 | ||
|
|
bf4093e01d | ||
|
|
0851bc4b1d | ||
|
|
1cfcc4de31 | ||
|
|
49685c7727 | ||
|
|
5dde5579e2 | ||
|
|
8fd45c65d5 | ||
|
|
406580dc83 | ||
|
|
2c12dd043e | ||
|
|
2d87021d60 | ||
|
|
eafd657bfa | ||
|
|
b107ab9ba7 | ||
|
|
e8d66dec74 | ||
|
|
8e6070e745 | ||
|
|
21a48fb4d7 | ||
|
|
326b3c1285 | ||
|
|
36ebf1bdd6 | ||
|
|
1f52717e5c | ||
|
|
89c33c0d5a | ||
|
|
9c261cd32d | ||
|
|
cf81c9503b | ||
|
|
ab65bfb585 | ||
|
|
7794fc6fdf | ||
|
|
9c78f7c088 | ||
|
|
f0b5e64d16 | ||
|
|
caf54a9dd7 | ||
|
|
9979ce3335 | ||
|
|
2ea8ce8c88 | ||
|
|
968200880d | ||
|
|
33d5d88045 |
No files matched your search
+18
-5
@@ -2,13 +2,26 @@
|
||||
|
||||
mergekemain.sh
|
||||
# Ignore Laravel cache, logs, and storage
|
||||
/htdocs/storage/*
|
||||
/database
|
||||
!/htdocs/storage/.gitignore
|
||||
/htdocs/.DS_Store
|
||||
/htdocs/.env
|
||||
|
||||
/htdocs/vendor/
|
||||
/htdocs/database/seeders/data/
|
||||
/htdocs/listenerlis/
|
||||
|
||||
|
||||
/htdocs/storage/*.key
|
||||
/htdocs/storage/logs/*
|
||||
/htdocs/storage/framework/cache/*
|
||||
/htdocs/storage/framework/sessions/*
|
||||
/htdocs/storage/framework/views/*
|
||||
/node_modules/
|
||||
/npm-debug.log
|
||||
/yarn-error.log
|
||||
# Ignore bootstrap cache
|
||||
/htdocs/bootstrap/cache/*
|
||||
/htdocs/listenerlis/listener.log
|
||||
/htdocs/listenerlis/tcp_raw_data.bin
|
||||
.env
|
||||
!/htdocs/bootstrap/cache/.gitignore
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
.DS_Store
|
||||
@@ -0,0 +1,630 @@
|
||||
# MyLIS-RSSA
|
||||
### Microbiology Laboratory Information System
|
||||
|
||||
---
|
||||
|
||||
## Bahasa Indonesia
|
||||
|
||||
**MyLIS-RSSA** adalah ekosistem aplikasi Laboratory Information System untuk layanan mikrobiologi RSUD Dr. Saiful Anwar. Repo ini berisi aplikasi web/backend Laravel, aplikasi pendamping mobile/desktop Flutter, dan service listener Python untuk komunikasi alat laboratorium.
|
||||
|
||||
Sistem ini membantu alur kerja laboratorium mulai dari penerimaan order, registrasi sampel, pengelompokan pemeriksaan, input expertise, verifikasi hasil, pelaporan, notifikasi nilai kritis, sampai integrasi dengan SIMRS dan instrumen laboratorium.
|
||||
|
||||
---
|
||||
|
||||
### Aplikasi di Dalam Repo
|
||||
|
||||
#### 1. LIS Web & Backend (`htdocs`)
|
||||
|
||||
Aplikasi utama berbasis Laravel untuk operasional laboratorium. Modul ini menangani autentikasi, dashboard, pendaftaran pasien/sampel, daftar pemeriksaan, template hasil, expertise, laporan, label/barcode, logbook, biorepository, gudang BHP, API mobile, backup cloud, dan integrasi SIMRS.
|
||||
|
||||
Ringkasan fungsi:
|
||||
|
||||
- Registrasi order dari SIMRS melalui endpoint `registerpasien`, `registerulang`, dan `registerjson`.
|
||||
- Pengelolaan pasien, dokter, poli/ruangan, user, template jawaban, dan subjawaban.
|
||||
- Worklist pemeriksaan mikrobiologi berdasarkan buku/kategori sampel.
|
||||
- Input dan cetak hasil pemeriksaan, adendum, label, form, dan laporan.
|
||||
- Dashboard Early Warning System dan notifikasi nilai kritis.
|
||||
- Modul logbook PPDS/SPV, biorepository, dan SIMBHP.
|
||||
- API `/api/mobile` untuk aplikasi MyLIS Flutter.
|
||||
- Utilitas backup/restore database ke cloud dan export/simulasi payload register API.
|
||||
|
||||
#### 2. MyLIS Flutter (`mylis`)
|
||||
|
||||
Aplikasi mobile/desktop pendamping untuk akses cepat ke LIS Laravel. Aplikasi ini dipakai untuk login, cek koneksi server, dashboard, pencarian sampel, scanner barcode, Early Warning System, penerimaan pekerjaan awal, daftar pemeriksaan, detail pemeriksaan, notifikasi nilai kritis, dan pengisian expertise native.
|
||||
|
||||
Screen expertise yang tersedia:
|
||||
|
||||
- `CCI`
|
||||
- `Kultur`
|
||||
- `Pewarna Langsung`
|
||||
- `TBC`
|
||||
- `Viral Load`
|
||||
- `IgM IgG Leptospira`
|
||||
- `PCR COVID`
|
||||
|
||||
#### 3. Listener Instrumen (`listener`)
|
||||
|
||||
Service Python untuk komunikasi dengan instrumen laboratorium, terutama jalur serial/TCP dan GeneXpert. Service ini membaca, memproses, dan mengirim pesan instrumen seperti ASTM/HL7, lalu menyimpan atau meneruskan data ke database LIS.
|
||||
|
||||
Ringkasan fungsi:
|
||||
|
||||
- Listener TCP untuk GeneXpert.
|
||||
- Komunikasi serial untuk perangkat seperti Vitek dan BACTEC.
|
||||
- Mapping kode pemeriksaan LIS ke host test code alat.
|
||||
- Antrean order instrumen dan pemrosesan hasil.
|
||||
- Logging harian dan log per thread untuk troubleshooting.
|
||||
|
||||
---
|
||||
|
||||
### Cara Kerja Aplikasi
|
||||
|
||||
Alur utama sistem:
|
||||
|
||||
```text
|
||||
SIMRS / user web
|
||||
-> Laravel LIS menerima order dan data pasien
|
||||
-> Sampel masuk ke worklist mikrobiologi
|
||||
-> Petugas menerima, memproses, dan mengisi hasil/expertise
|
||||
-> Supervisor melakukan verifikasi atau finalisasi
|
||||
-> Hasil dicetak, dikirim, atau diekstrak kembali ke SIMRS
|
||||
```
|
||||
|
||||
Alur mobile:
|
||||
|
||||
```text
|
||||
MyLIS Flutter
|
||||
-> login ke Laravel melalui /api/mobile/login
|
||||
-> mengambil dashboard, worklist, detail pemeriksaan, dan template expertise
|
||||
-> menyimpan draft, preliminary, final, atau kirim ke SPV
|
||||
-> Laravel menyimpan perubahan ke database LIS
|
||||
```
|
||||
|
||||
Alur instrumen:
|
||||
|
||||
```text
|
||||
Instrumen laboratorium
|
||||
-> listener Python menerima ASTM/HL7/serial/TCP
|
||||
-> data diparse dan dicocokkan dengan order/sampel
|
||||
-> hasil atau status instrumen disimpan ke database
|
||||
-> Laravel menampilkan hasil untuk proses validasi dan pelaporan
|
||||
```
|
||||
|
||||
Alur backup cloud:
|
||||
|
||||
```text
|
||||
Server production
|
||||
-> pg_dump database
|
||||
-> upload file .backup secara chunked ke cloud
|
||||
-> restore dapat dilakukan dengan download backup terbaru dan pg_restore
|
||||
```
|
||||
|
||||
Detail backup, restore, export payload `registerApi`, dan simulasi kirim data SIMRS tersedia di [htdocs/README.md](/Users/duidev/htdocs/lis/htdocs/README.md).
|
||||
|
||||
---
|
||||
|
||||
### Teknologi
|
||||
|
||||
- **Backend**: Laravel 10, PHP 8.1+ dengan platform Composer PHP 8.4.
|
||||
- **API & Auth**: Laravel route API, token terenkripsi untuk mobile, Laravel Sanctum/Passport tersedia di dependency.
|
||||
- **Frontend Web**: Blade, Bootstrap, jQuery, DataTables, Livewire 3, Vite.
|
||||
- **Database**: konfigurasi `.env` mendukung MySQL; deployment/backup production juga memakai PostgreSQL untuk database `lismikro`.
|
||||
- **Reporting & Dokumen**: TCPDF, FPDI, PhpSpreadsheet, QR/barcode generator.
|
||||
- **Integrasi**: HL7, ASTM, serial communication, FTP, HTTP client Guzzle, bridging BPJS.
|
||||
- **Mobile/Desktop**: Flutter, Dart, Material UI, HTTP client, shared preferences, URL launcher, mobile scanner.
|
||||
- **Listener Engine**: Python 3, Flask, SQLAlchemy, psycopg2, pyserial, hl7.
|
||||
- **Runtime Ops**: Artisan commands, cron backup, optional Docker Compose.
|
||||
|
||||
---
|
||||
|
||||
### Instalasi LIS Web & Backend (`htdocs`)
|
||||
|
||||
Prasyarat:
|
||||
|
||||
- PHP 8.1 atau lebih baru.
|
||||
- Composer.
|
||||
- Node.js dan npm.
|
||||
- Database MySQL atau PostgreSQL sesuai konfigurasi deployment.
|
||||
- Ekstensi PHP yang dibutuhkan Laravel dan package proyek.
|
||||
|
||||
Langkah instalasi:
|
||||
|
||||
```bash
|
||||
cd htdocs
|
||||
composer install
|
||||
npm install
|
||||
cp .env.example .env
|
||||
php artisan key:generate
|
||||
```
|
||||
|
||||
Sesuaikan konfigurasi utama di `.env`:
|
||||
|
||||
```env
|
||||
APP_URL=https://lis.swandhana.test
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=db_lis
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
```
|
||||
|
||||
Jalankan migrasi bila database target memang disiapkan dari migration project:
|
||||
|
||||
```bash
|
||||
php artisan migrate
|
||||
```
|
||||
|
||||
Jalankan aplikasi lokal:
|
||||
|
||||
```bash
|
||||
php artisan serve
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Build aset production:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Perintah verifikasi yang umum:
|
||||
|
||||
```bash
|
||||
php artisan route:list
|
||||
php artisan route:list --path=mobile
|
||||
php -l app/Http/Controllers/MobileApiController.php
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Instalasi MyLIS Flutter (`mylis`)
|
||||
|
||||
Prasyarat:
|
||||
|
||||
- Flutter SDK sesuai `pubspec.yaml` (`Dart SDK ^3.12.2`).
|
||||
- Android Studio/Xcode sesuai platform target.
|
||||
- Server Laravel LIS yang bisa diakses dari device atau simulator.
|
||||
|
||||
Langkah instalasi:
|
||||
|
||||
```bash
|
||||
cd mylis
|
||||
flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
Jalankan dengan URL Laravel tertentu:
|
||||
|
||||
```bash
|
||||
flutter run --dart-define=LIS_BASE_URL=https://lis.swandhana.test/
|
||||
```
|
||||
|
||||
Build aplikasi:
|
||||
|
||||
```bash
|
||||
flutter build apk --debug
|
||||
flutter build ios --debug --no-codesign
|
||||
flutter build macos --debug
|
||||
```
|
||||
|
||||
Verifikasi:
|
||||
|
||||
```bash
|
||||
flutter analyze
|
||||
flutter test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Instalasi Listener Instrumen (`listener`)
|
||||
|
||||
Prasyarat:
|
||||
|
||||
- Python 3.
|
||||
- Akses jaringan ke database LIS dan instrumen laboratorium.
|
||||
- Akses port serial/TCP sesuai alat yang dipakai.
|
||||
|
||||
Langkah instalasi:
|
||||
|
||||
```bash
|
||||
cd listener
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Jalankan listener utama:
|
||||
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
Jalankan listener GeneXpert khusus:
|
||||
|
||||
```bash
|
||||
python geneexpert.py
|
||||
```
|
||||
|
||||
Catatan konfigurasi:
|
||||
|
||||
- `app.py` dan `geneexpert.py` masih menyimpan mapping IP, port, perangkat, dan database di dalam file.
|
||||
- Pastikan `DATABASE_URL`, `TARGET_MAPPING`, `DEVICE_CONFIGS`, port serial, dan port TCP sesuai lingkungan produksi.
|
||||
- Default port penting: TCP GeneXpert `6001` dan HTTP trigger `6002`.
|
||||
|
||||
---
|
||||
|
||||
### API Mobile Utama
|
||||
|
||||
Prefix endpoint:
|
||||
|
||||
```text
|
||||
/api/mobile
|
||||
```
|
||||
|
||||
Endpoint utama:
|
||||
|
||||
- `GET /api/mobile/ping`
|
||||
- `POST /api/mobile/login`
|
||||
- `GET /api/mobile/dashboard`
|
||||
- `GET /api/mobile/critical-values`
|
||||
- `POST /api/mobile/critical-values/{id}/mark-read`
|
||||
- `GET /api/mobile/early-warning`
|
||||
- `GET /api/mobile/examinations/search`
|
||||
- `GET /api/mobile/initial-work/samples`
|
||||
- `POST /api/mobile/initial-work/samples/{id}/accept`
|
||||
- `POST /api/mobile/initial-work/samples/{id}/reject`
|
||||
- `GET /api/mobile/books/{master}/examinations`
|
||||
- `GET /api/mobile/examinations/{id}`
|
||||
- `GET /api/mobile/examinations/{id}/expertise`
|
||||
- `POST /api/mobile/examinations/{id}/expertise/template`
|
||||
- `POST /api/mobile/examinations/{id}/expertise`
|
||||
|
||||
---
|
||||
|
||||
### Manual Book
|
||||
|
||||
Panduan pengguna dapat diunduh melalui:
|
||||
|
||||
```text
|
||||
http://10.10.123.218/manual.pdf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Dukungan Pengembangan
|
||||
|
||||
Aplikasi ini dikembangkan oleh **CV. Swandhana**.
|
||||
|
||||
Alamat:
|
||||
|
||||
```text
|
||||
Jl. Lamandau 18A, Bunulrejo, Blimbing, Malang
|
||||
```
|
||||
|
||||
Kontak WhatsApp:
|
||||
|
||||
```text
|
||||
081359108565
|
||||
```
|
||||
|
||||
Pengembangan juga didukung oleh kolaborasi antara pengembang dan AI assistant seperti ChatGPT/Gemini untuk dokumentasi, refactoring, dan percepatan pekerjaan teknis.
|
||||
|
||||
---
|
||||
|
||||
### Lisensi
|
||||
|
||||
Proyek ini menggunakan lisensi **MIT**. Lihat file `LICENSE` jika tersedia di distribusi project.
|
||||
|
||||
---
|
||||
|
||||
## English Version
|
||||
|
||||
**MyLIS-RSSA** is a Laboratory Information System ecosystem for the microbiology service at RSUD Dr. Saiful Anwar. This repository contains a Laravel web/backend application, a Flutter mobile/desktop companion app, and a Python listener service for laboratory instrument communication.
|
||||
|
||||
The system supports laboratory workflows from order intake, sample registration, examination grouping, expertise entry, result verification, reporting, critical value notification, to SIMRS and instrument integration.
|
||||
|
||||
---
|
||||
|
||||
### Applications in This Repository
|
||||
|
||||
#### 1. LIS Web & Backend (`htdocs`)
|
||||
|
||||
The main Laravel application for laboratory operations. It handles authentication, dashboards, patient/sample registration, examination lists, result templates, expertise, reports, labels/barcodes, logbooks, biorepository, BHP inventory, mobile APIs, cloud backup, and SIMRS integration.
|
||||
|
||||
Main capabilities:
|
||||
|
||||
- Order registration from SIMRS through `registerpasien`, `registerulang`, and `registerjson`.
|
||||
- Management of patients, doctors, clinics/rooms, users, answer templates, and sub-answers.
|
||||
- Microbiology worklists grouped by sample book/category.
|
||||
- Result entry, result printing, addendum, labels, forms, and reports.
|
||||
- Early Warning System dashboard and critical value notifications.
|
||||
- PPDS/SPV logbook, biorepository, and SIMBHP modules.
|
||||
- `/api/mobile` endpoints for the MyLIS Flutter app.
|
||||
- Cloud database backup/restore and register API payload export/simulation utilities.
|
||||
|
||||
#### 2. MyLIS Flutter (`mylis`)
|
||||
|
||||
A mobile/desktop companion app for fast access to the Laravel LIS. It supports login, server ping, dashboard, sample search, barcode scanning, Early Warning System, initial work acceptance, examination lists, examination details, critical value notifications, and native expertise entry.
|
||||
|
||||
Available expertise screens:
|
||||
|
||||
- `CCI`
|
||||
- `Kultur`
|
||||
- `Pewarna Langsung`
|
||||
- `TBC`
|
||||
- `Viral Load`
|
||||
- `IgM IgG Leptospira`
|
||||
- `PCR COVID`
|
||||
|
||||
#### 3. Instrument Listener (`listener`)
|
||||
|
||||
A Python service for laboratory instrument communication, especially serial/TCP and GeneXpert workflows. It receives, processes, and sends instrument messages such as ASTM/HL7, then stores or forwards the data to the LIS database.
|
||||
|
||||
Main capabilities:
|
||||
|
||||
- TCP listener for GeneXpert.
|
||||
- Serial communication for devices such as Vitek and BACTEC.
|
||||
- Mapping from LIS examination names to instrument host test codes.
|
||||
- Instrument order queue and result processing.
|
||||
- Daily logs and per-thread logs for troubleshooting.
|
||||
|
||||
---
|
||||
|
||||
### How the System Works
|
||||
|
||||
Main workflow:
|
||||
|
||||
```text
|
||||
SIMRS / web user
|
||||
-> Laravel LIS receives orders and patient data
|
||||
-> samples enter the microbiology worklist
|
||||
-> staff accept, process, and enter results/expertise
|
||||
-> supervisor verifies or finalizes the result
|
||||
-> result is printed, sent, or extracted back to SIMRS
|
||||
```
|
||||
|
||||
Mobile workflow:
|
||||
|
||||
```text
|
||||
MyLIS Flutter
|
||||
-> logs in to Laravel through /api/mobile/login
|
||||
-> fetches dashboard, worklist, examination details, and expertise templates
|
||||
-> saves draft, preliminary, final, or sends to SPV
|
||||
-> Laravel persists the changes to the LIS database
|
||||
```
|
||||
|
||||
Instrument workflow:
|
||||
|
||||
```text
|
||||
Laboratory instrument
|
||||
-> Python listener receives ASTM/HL7/serial/TCP messages
|
||||
-> data is parsed and matched with orders/samples
|
||||
-> instrument results or statuses are stored in the database
|
||||
-> Laravel displays the result for validation and reporting
|
||||
```
|
||||
|
||||
Cloud backup workflow:
|
||||
|
||||
```text
|
||||
Production server
|
||||
-> pg_dump database
|
||||
-> uploads .backup file to cloud in chunks
|
||||
-> restore can download the latest backup and run pg_restore
|
||||
```
|
||||
|
||||
Detailed backup, restore, `registerApi` payload export, and SIMRS payload simulation notes are available in [htdocs/README.md](/Users/duidev/htdocs/lis/htdocs/README.md).
|
||||
|
||||
---
|
||||
|
||||
### Technology Stack
|
||||
|
||||
- **Backend**: Laravel 10, PHP 8.1+ with Composer platform PHP 8.4.
|
||||
- **API & Auth**: Laravel API routes, encrypted token for mobile, Laravel Sanctum/Passport available in dependencies.
|
||||
- **Web Frontend**: Blade, Bootstrap, jQuery, DataTables, Livewire 3, Vite.
|
||||
- **Database**: `.env` supports MySQL; production/backup deployment also uses PostgreSQL for the `lismikro` database.
|
||||
- **Reporting & Documents**: TCPDF, FPDI, PhpSpreadsheet, QR/barcode generator.
|
||||
- **Integrations**: HL7, ASTM, serial communication, FTP, Guzzle HTTP client, BPJS bridging.
|
||||
- **Mobile/Desktop**: Flutter, Dart, Material UI, HTTP client, shared preferences, URL launcher, mobile scanner.
|
||||
- **Listener Engine**: Python 3, Flask, SQLAlchemy, psycopg2, pyserial, hl7.
|
||||
- **Runtime Ops**: Artisan commands, cron backup, optional Docker Compose.
|
||||
|
||||
---
|
||||
|
||||
### Installing LIS Web & Backend (`htdocs`)
|
||||
|
||||
Requirements:
|
||||
|
||||
- PHP 8.1 or newer.
|
||||
- Composer.
|
||||
- Node.js and npm.
|
||||
- MySQL or PostgreSQL database depending on the target deployment.
|
||||
- PHP extensions required by Laravel and this project's packages.
|
||||
|
||||
Installation:
|
||||
|
||||
```bash
|
||||
cd htdocs
|
||||
composer install
|
||||
npm install
|
||||
cp .env.example .env
|
||||
php artisan key:generate
|
||||
```
|
||||
|
||||
Adjust the main `.env` configuration:
|
||||
|
||||
```env
|
||||
APP_URL=https://lis.swandhana.test
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=db_lis
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
```
|
||||
|
||||
Run migrations when the target database is meant to be prepared from this project's migrations:
|
||||
|
||||
```bash
|
||||
php artisan migrate
|
||||
```
|
||||
|
||||
Run locally:
|
||||
|
||||
```bash
|
||||
php artisan serve
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Build production assets:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Common verification commands:
|
||||
|
||||
```bash
|
||||
php artisan route:list
|
||||
php artisan route:list --path=mobile
|
||||
php -l app/Http/Controllers/MobileApiController.php
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Installing MyLIS Flutter (`mylis`)
|
||||
|
||||
Requirements:
|
||||
|
||||
- Flutter SDK matching `pubspec.yaml` (`Dart SDK ^3.12.2`).
|
||||
- Android Studio/Xcode depending on the target platform.
|
||||
- A Laravel LIS server reachable from the device or simulator.
|
||||
|
||||
Installation:
|
||||
|
||||
```bash
|
||||
cd mylis
|
||||
flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
Run with a specific Laravel URL:
|
||||
|
||||
```bash
|
||||
flutter run --dart-define=LIS_BASE_URL=https://lis.swandhana.test/
|
||||
```
|
||||
|
||||
Build:
|
||||
|
||||
```bash
|
||||
flutter build apk --debug
|
||||
flutter build ios --debug --no-codesign
|
||||
flutter build macos --debug
|
||||
```
|
||||
|
||||
Verification:
|
||||
|
||||
```bash
|
||||
flutter analyze
|
||||
flutter test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Installing Instrument Listener (`listener`)
|
||||
|
||||
Requirements:
|
||||
|
||||
- Python 3.
|
||||
- Network access to the LIS database and laboratory instruments.
|
||||
- Serial/TCP port access according to the target instruments.
|
||||
|
||||
Installation:
|
||||
|
||||
```bash
|
||||
cd listener
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Run the main listener:
|
||||
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
Run the dedicated GeneXpert listener:
|
||||
|
||||
```bash
|
||||
python geneexpert.py
|
||||
```
|
||||
|
||||
Configuration notes:
|
||||
|
||||
- `app.py` and `geneexpert.py` still keep IP, port, device, and database mapping inside the files.
|
||||
- Make sure `DATABASE_URL`, `TARGET_MAPPING`, `DEVICE_CONFIGS`, serial ports, and TCP ports match the production environment.
|
||||
- Important default ports: GeneXpert TCP `6001` and HTTP trigger `6002`.
|
||||
|
||||
---
|
||||
|
||||
### Main Mobile API
|
||||
|
||||
Endpoint prefix:
|
||||
|
||||
```text
|
||||
/api/mobile
|
||||
```
|
||||
|
||||
Main endpoints:
|
||||
|
||||
- `GET /api/mobile/ping`
|
||||
- `POST /api/mobile/login`
|
||||
- `GET /api/mobile/dashboard`
|
||||
- `GET /api/mobile/critical-values`
|
||||
- `POST /api/mobile/critical-values/{id}/mark-read`
|
||||
- `GET /api/mobile/early-warning`
|
||||
- `GET /api/mobile/examinations/search`
|
||||
- `GET /api/mobile/initial-work/samples`
|
||||
- `POST /api/mobile/initial-work/samples/{id}/accept`
|
||||
- `POST /api/mobile/initial-work/samples/{id}/reject`
|
||||
- `GET /api/mobile/books/{master}/examinations`
|
||||
- `GET /api/mobile/examinations/{id}`
|
||||
- `GET /api/mobile/examinations/{id}/expertise`
|
||||
- `POST /api/mobile/examinations/{id}/expertise/template`
|
||||
- `POST /api/mobile/examinations/{id}/expertise`
|
||||
|
||||
---
|
||||
|
||||
### Manual Book
|
||||
|
||||
User manual:
|
||||
|
||||
```text
|
||||
http://10.10.123.218/manual.pdf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Development Support
|
||||
|
||||
This application is developed by **CV. Swandhana**.
|
||||
|
||||
Address:
|
||||
|
||||
```text
|
||||
Jl. Lamandau 18A, Bunulrejo, Blimbing, Malang
|
||||
```
|
||||
|
||||
WhatsApp:
|
||||
|
||||
```text
|
||||
081359108565
|
||||
```
|
||||
|
||||
Development is also supported by collaboration between developers and AI assistants such as ChatGPT/Gemini for documentation, refactoring, and technical acceleration.
|
||||
|
||||
---
|
||||
|
||||
### License
|
||||
|
||||
This project uses the **MIT** license. See the `LICENSE` file if it is available in the project distribution.
|
||||
Vendored
BIN
Binary file not shown.
@@ -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=1048576
|
||||
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=
|
||||
+271
-1
@@ -47,9 +47,279 @@ 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=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.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BioCabinet extends Model
|
||||
{
|
||||
protected $table = 'bio_cabinets';
|
||||
protected $guarded = [];
|
||||
|
||||
public function racks()
|
||||
{
|
||||
return $this->hasMany(BioRack::class, 'cabinet_id');
|
||||
}
|
||||
|
||||
public function specimens()
|
||||
{
|
||||
return $this->hasMany(BioSpecimen::class, 'cabinet_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BioRack extends Model
|
||||
{
|
||||
protected $table = 'bio_racks';
|
||||
protected $guarded = [];
|
||||
|
||||
public function cabinet()
|
||||
{
|
||||
return $this->belongsTo(BioCabinet::class, 'cabinet_id');
|
||||
}
|
||||
|
||||
public function specimens()
|
||||
{
|
||||
return $this->hasMany(BioSpecimen::class, 'rack_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BioSpecimen extends Model
|
||||
{
|
||||
protected $table = 'bio_specimens';
|
||||
protected $guarded = [];
|
||||
|
||||
protected $appends = ['storage_days'];
|
||||
|
||||
public function cabinet()
|
||||
{
|
||||
return $this->belongsTo(BioCabinet::class, 'cabinet_id');
|
||||
}
|
||||
|
||||
public function rack()
|
||||
{
|
||||
return $this->belongsTo(BioRack::class, 'rack_id');
|
||||
}
|
||||
|
||||
public function getStorageDaysAttribute()
|
||||
{
|
||||
if (!$this->stored_at) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Carbon::parse($this->stored_at)->diffInDays(Carbon::now());
|
||||
}
|
||||
}
|
||||
@@ -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,145 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Http\Client\Response;
|
||||
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}
|
||||
{--retries=5 : Jumlah percobaan ulang setiap chunk}
|
||||
{--retry-delay=10 : Jeda percobaan ulang dalam detik}
|
||||
{--timeout=300 : Timeout request upload dalam detik}';
|
||||
|
||||
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));
|
||||
$retries = max(1, (int) $this->option('retries'));
|
||||
$retryDelay = max(0, (int) $this->option('retry-delay'));
|
||||
$timeout = max(30, (int) $this->option('timeout'));
|
||||
|
||||
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('Upload ID: ' . $uploadId);
|
||||
$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 = $this->uploadChunk(
|
||||
endpoint: $endpoint,
|
||||
token: $token,
|
||||
chunk: $chunk,
|
||||
chunkIndex: $index,
|
||||
payload: [
|
||||
'backup_name' => $backupName,
|
||||
'upload_id' => $uploadId,
|
||||
'filename' => basename($file),
|
||||
'chunk_index' => $index,
|
||||
'total_chunks' => $totalChunks,
|
||||
'total_size' => $size,
|
||||
'checksum' => $checksum,
|
||||
],
|
||||
retries: $retries,
|
||||
retryDelay: $retryDelay,
|
||||
timeout: $timeout
|
||||
);
|
||||
|
||||
if (!$response || !$response->successful()) {
|
||||
$this->error('Upload chunk ke-' . $index . ' gagal. HTTP ' . ($response?->status() ?: '-'));
|
||||
$this->line($response?->body() ?: 'Tidak ada response dari server.');
|
||||
return Command::FAILURE;
|
||||
}
|
||||
|
||||
$this->line('Chunk ' . ($index + 1) . '/' . $totalChunks . ' terkirim.');
|
||||
}
|
||||
} finally {
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
$this->info('Upload backup selesai.');
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
||||
private function uploadChunk(
|
||||
string $endpoint,
|
||||
string $token,
|
||||
string $chunk,
|
||||
int $chunkIndex,
|
||||
array $payload,
|
||||
int $retries,
|
||||
int $retryDelay,
|
||||
int $timeout
|
||||
): ?Response {
|
||||
$response = null;
|
||||
|
||||
for ($attempt = 1; $attempt <= $retries; $attempt++) {
|
||||
try {
|
||||
$response = Http::withToken($token)
|
||||
->timeout($timeout)
|
||||
->attach('chunk', $chunk, 'chunk_' . $chunkIndex . '.part')
|
||||
->post($endpoint, $payload);
|
||||
|
||||
if ($response->successful()) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$this->warn('Chunk ' . ($chunkIndex + 1) . ' gagal percobaan ' . $attempt . '/' . $retries . '. HTTP ' . $response->status());
|
||||
} catch (\Throwable $e) {
|
||||
$this->warn('Chunk ' . ($chunkIndex + 1) . ' gagal percobaan ' . $attempt . '/' . $retries . ': ' . $e->getMessage());
|
||||
}
|
||||
|
||||
if ($attempt < $retries && $retryDelay > 0) {
|
||||
sleep($retryDelay);
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,9 @@
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
use App\Services\AstmMessageService;
|
||||
use App\DataListiner;
|
||||
|
||||
class ProcessAstmMessages extends Command
|
||||
{
|
||||
@@ -22,13 +23,12 @@ class ProcessAstmMessages extends Command
|
||||
public function handle()
|
||||
{
|
||||
// Ambil data dari DataListener
|
||||
$dataListener = DataListiner::whereNull('processed')->get();
|
||||
if ($dataListener) {
|
||||
$jumlah = count($dataListener);
|
||||
$pesan = $this->astmMessageService->processAstmMessages($dataListener);
|
||||
$this->info($jumlah.' Message processed '.$pesan.' at '.date('Y-m-d H:i:s'));
|
||||
} else {
|
||||
$this->info('Skipped Proses at '.date('Y-m-d H:i:s'));
|
||||
$dataLocal = DB::table('lis_phoenix')->whereNull('processed')->get();
|
||||
if ($dataLocal) {
|
||||
$jumlah = count($dataLocal);
|
||||
$pesan = $this->astmMessageService->processAstmMessagesLokal($dataLocal);
|
||||
$this->info($jumlah.' Message processed Data Lokal '.$pesan.' at '.date('Y-m-d H:i:s'));
|
||||
}
|
||||
$this->info('Skipped Proses at '.date('Y-m-d H:i:s'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class SendRegisterApiExportCommand extends Command
|
||||
{
|
||||
protected $signature = 'register-api:send-export
|
||||
{file : Path file JSON hasil register-api:export}
|
||||
{--url= : URL endpoint registerApi, default APP_URL/registerpasien}
|
||||
{--delay=0 : Jeda antar kirim dalam milidetik}
|
||||
{--limit=0 : Batasi jumlah data yang dikirim, 0 berarti semua}
|
||||
{--start=0 : Mulai dari index data ke-n, 0 berarti dari awal}
|
||||
{--dry-run : Tampilkan payload tanpa mengirim}
|
||||
{--stop-on-error : Berhenti jika ada request gagal}';
|
||||
|
||||
protected $description = 'Simulasi kirim payload registerApi dari file JSON export seolah-olah dikirim oleh SIMRS.';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$file = (string) $this->argument('file');
|
||||
if (!File::exists($file) || !is_readable($file)) {
|
||||
$this->error('File JSON tidak ditemukan atau tidak bisa dibaca: ' . $file);
|
||||
return Command::FAILURE;
|
||||
}
|
||||
|
||||
$content = File::get($file);
|
||||
$decoded = json_decode($content, true);
|
||||
if (!is_array($decoded)) {
|
||||
$this->error('File bukan JSON valid.');
|
||||
return Command::FAILURE;
|
||||
}
|
||||
|
||||
$rows = $this->extractRows($decoded);
|
||||
if (empty($rows)) {
|
||||
$this->warn('Tidak ada data untuk dikirim.');
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
||||
$start = max(0, (int) $this->option('start'));
|
||||
$limit = max(0, (int) $this->option('limit'));
|
||||
$delay = max(0, (int) $this->option('delay'));
|
||||
$endpoint = $this->endpoint();
|
||||
|
||||
$rows = array_slice($rows, $start, $limit > 0 ? $limit : null);
|
||||
$total = count($rows);
|
||||
$success = 0;
|
||||
$failed = 0;
|
||||
|
||||
$this->info('Endpoint: ' . $endpoint);
|
||||
$this->info('Total payload: ' . $total);
|
||||
|
||||
foreach ($rows as $index => $payload) {
|
||||
$sequence = $start + $index + 1;
|
||||
$label = $payload['nomor_lab'] ?? $payload['norm'] ?? $sequence;
|
||||
|
||||
if ($this->option('dry-run')) {
|
||||
$this->line('[' . $sequence . '] DRY RUN ' . $label . ': ' . json_encode($payload, JSON_UNESCAPED_SLASHES));
|
||||
$success++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$response = Http::asJson()
|
||||
->acceptJson()
|
||||
->timeout(120)
|
||||
->post($endpoint, $payload);
|
||||
|
||||
if ($response->successful()) {
|
||||
$success++;
|
||||
$this->line('[' . $sequence . '] OK ' . $label . ' HTTP ' . $response->status() . ' ' . $response->body());
|
||||
} else {
|
||||
$failed++;
|
||||
$this->error('[' . $sequence . '] GAGAL ' . $label . ' HTTP ' . $response->status() . ' ' . $response->body());
|
||||
|
||||
if ($this->option('stop-on-error')) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($delay > 0 && $index < $total - 1) {
|
||||
usleep($delay * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
$this->info('Selesai. Berhasil: ' . $success . ', gagal: ' . $failed);
|
||||
|
||||
return $failed > 0 ? Command::FAILURE : Command::SUCCESS;
|
||||
}
|
||||
|
||||
private function extractRows(array $decoded): array
|
||||
{
|
||||
if (isset($decoded['data']) && is_array($decoded['data'])) {
|
||||
return $decoded['data'];
|
||||
}
|
||||
|
||||
if (array_is_list($decoded)) {
|
||||
return $decoded;
|
||||
}
|
||||
|
||||
return [$decoded];
|
||||
}
|
||||
|
||||
private function endpoint(): string
|
||||
{
|
||||
$url = (string) $this->option('url');
|
||||
if ($url !== '') {
|
||||
return $url;
|
||||
}
|
||||
|
||||
return rtrim((string) config('app.url'), '/') . '/registerpasien';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class SyncPoliFromJson extends Command
|
||||
{
|
||||
protected $signature = 'poli:sync-json {--path= : Path file JSON poli, default database/seeders/data/poli.json} {--dry-run : Cek data tanpa menulis ke database}';
|
||||
|
||||
protected $description = 'Update atau create data poli dari file JSON berdasarkan id tanpa truncate.';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$path = $this->resolvePath($this->option('path') ?: database_path('seeders/data/poli.json'));
|
||||
$data = $this->readJson($path);
|
||||
|
||||
$updated = 0;
|
||||
$created = 0;
|
||||
$unchanged = 0;
|
||||
|
||||
DB::transaction(function () use ($data, &$updated, &$created, &$unchanged) {
|
||||
foreach ($data as $row) {
|
||||
$id = (int) $row['id'];
|
||||
$payload = [
|
||||
'poli' => $row['poli'] ?? null,
|
||||
'subpoli' => $row['subpoli'] ?? null,
|
||||
'subsubpoli' => $row['subsubpoli'] ?? null,
|
||||
'modaliti' => $row['modaliti'] ?? null,
|
||||
'kelompok' => $row['kelompok'] ?? null,
|
||||
'modaliti2' => isset($row['modaliti2']) ? (string) $row['modaliti2'] : null,
|
||||
'created_at' => $row['created_at'] ?? now(),
|
||||
'updated_at' => $row['updated_at'] ?? now(),
|
||||
];
|
||||
|
||||
$existing = DB::table('poli')->where('id', $id)->first();
|
||||
|
||||
if ($existing === null) {
|
||||
$created++;
|
||||
|
||||
if (!$this->option('dry-run')) {
|
||||
DB::table('poli')->insert(array_merge(['id' => $id], $payload));
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($this->isSameRow($existing, $payload)) {
|
||||
$unchanged++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$updated++;
|
||||
|
||||
if (!$this->option('dry-run')) {
|
||||
DB::table('poli')->where('id', $id)->update($payload);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$mode = $this->option('dry-run') ? 'DRY RUN' : 'DONE';
|
||||
$this->info("{$mode}: {$created} created, {$updated} updated, {$unchanged} unchanged.");
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
private function resolvePath(string $path): string
|
||||
{
|
||||
if ($path !== '' && $path[0] === '/') {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return base_path($path);
|
||||
}
|
||||
|
||||
private function readJson(string $path): array
|
||||
{
|
||||
if (!is_file($path)) {
|
||||
throw new \RuntimeException("File JSON poli tidak ditemukan: {$path}");
|
||||
}
|
||||
|
||||
$json = file_get_contents($path);
|
||||
|
||||
if ($json === false) {
|
||||
throw new \RuntimeException("Gagal membaca file JSON poli: {$path}");
|
||||
}
|
||||
|
||||
$data = json_decode($json, true);
|
||||
|
||||
if (!is_array($data)) {
|
||||
throw new \RuntimeException("Format JSON poli tidak valid: {$path}");
|
||||
}
|
||||
|
||||
$ids = [];
|
||||
|
||||
foreach ($data as $index => $row) {
|
||||
if (!is_array($row) || !isset($row['id'])) {
|
||||
throw new \RuntimeException('Data poli baris '.($index + 1).' tidak memiliki id.');
|
||||
}
|
||||
|
||||
$id = (int) $row['id'];
|
||||
|
||||
if (isset($ids[$id])) {
|
||||
throw new \RuntimeException("Duplikasi id poli pada JSON: {$id}");
|
||||
}
|
||||
|
||||
$ids[$id] = true;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function isSameRow(object $existing, array $payload): bool
|
||||
{
|
||||
foreach ($payload as $key => $value) {
|
||||
if ((string) ($existing->{$key} ?? '') !== (string) ($value ?? '')) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@ class Kernel extends ConsoleKernel
|
||||
//$schedule->command('app:sync-lab-results-f-t-p')->everyThirtyMinutes();
|
||||
//$schedule->command('app:sync-lab-results-serial')->everyThirtyMinutes();
|
||||
$schedule->command('astm:process-messages')->everyFiveMinutes();
|
||||
$schedule->command('backup:clean')->daily()->at('01:00');
|
||||
$schedule->command('backup:run')->daily()->at('01:30');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class CriticalValueSample extends Model
|
||||
{
|
||||
protected $table = 'critical_value_samples';
|
||||
|
||||
protected $guarded = [];
|
||||
}
|
||||
@@ -0,0 +1,316 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\BioCabinet;
|
||||
use App\BioRack;
|
||||
use App\BioSpecimen;
|
||||
use App\Periksa;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Session;
|
||||
use Validator;
|
||||
|
||||
class BiorepositoryController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
if (Session::get('previlage') == '') {
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['cabinetOptions'] = BioCabinet::orderBy('name', 'ASC')->get();
|
||||
$data['totalCabinets'] = BioCabinet::count();
|
||||
$data['totalRacks'] = BioRack::count();
|
||||
$data['totalSpecimens'] = BioSpecimen::count();
|
||||
$data['specimenRows'] = BioSpecimen::with(['cabinet', 'rack'])
|
||||
->orderBy('stored_at', 'DESC')
|
||||
->orderBy('id', 'DESC')
|
||||
->get();
|
||||
|
||||
$data['oldestSpecimen'] = BioSpecimen::with(['cabinet', 'rack'])
|
||||
->whereNotNull('stored_at')
|
||||
->orderBy('stored_at', 'ASC')
|
||||
->first();
|
||||
|
||||
$data['oldestStorageDays'] = 0;
|
||||
if ($data['oldestSpecimen']) {
|
||||
$data['oldestStorageDays'] = Carbon::parse($data['oldestSpecimen']->stored_at)->diffInDays(Carbon::now());
|
||||
}
|
||||
|
||||
return view('admin.biorepository', $data);
|
||||
}
|
||||
|
||||
public function storeCabinet(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'code' => 'required|max:50|unique:bio_cabinets,code',
|
||||
'name' => 'required|max:150',
|
||||
'location' => 'nullable|max:200',
|
||||
'notes' => 'nullable',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
BioCabinet::create([
|
||||
'code' => $request->input('code'),
|
||||
'name' => $request->input('name'),
|
||||
'location' => $request->input('location'),
|
||||
'notes' => $request->input('notes'),
|
||||
]);
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Lemari biorepository berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function storeRack(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'cabinet_id' => 'required|exists:bio_cabinets,id',
|
||||
'code' => 'required|max:50',
|
||||
'name' => 'required|max:150',
|
||||
'slot_count' => 'required|integer|min:1|max:20',
|
||||
'level' => 'required|integer|min:4|max:6',
|
||||
'box_number' => 'required|integer|min:1|max:20',
|
||||
'capacity' => 'required|integer|min:16|max:100',
|
||||
'notes' => 'nullable',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
$exists = BioRack::where('cabinet_id', $request->input('cabinet_id'))
|
||||
->where('code', $request->input('code'))
|
||||
->exists();
|
||||
|
||||
if ($exists) {
|
||||
return back()->withErrors(['code' => 'Kode rack sudah dipakai pada lemari ini.'])->withInput();
|
||||
}
|
||||
|
||||
$nextRackNumber = ((int) BioRack::where('cabinet_id', $request->input('cabinet_id'))->max('rack_number')) + 1;
|
||||
|
||||
BioRack::create([
|
||||
'cabinet_id' => $request->input('cabinet_id'),
|
||||
'code' => $request->input('code'),
|
||||
'name' => $request->input('name'),
|
||||
'slot_count' => $request->input('slot_count'),
|
||||
'level' => $request->input('level'),
|
||||
'rack_number' => $nextRackNumber,
|
||||
'box_number' => $request->input('box_number'),
|
||||
'capacity' => $request->input('capacity'),
|
||||
'notes' => $request->input('notes'),
|
||||
]);
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Rack berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function storeSpecimen(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'rack_id' => 'required|exists:bio_racks,id',
|
||||
'kategorisimpan' => 'required|in:A,B,C,D',
|
||||
'shelfnomor' => 'required|integer|min:1',
|
||||
'raknomor' => 'required|integer|min:1',
|
||||
'slotnomor' => 'required|integer|min:1',
|
||||
'boxnomor' => 'required|integer|min:1',
|
||||
'tubenomor' => 'required|integer|min:1',
|
||||
'nmbakteri' => 'nullable|max:200',
|
||||
'strain' => 'nullable|in:Gram Negatif,Gram Positif',
|
||||
'stored_at' => 'required|date',
|
||||
'volume' => 'nullable|numeric|min:0',
|
||||
'volume_ambil' => 'nullable|numeric|min:0',
|
||||
'existing_specimen_id' => 'nullable|integer',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
$rack = BioRack::find($request->input('rack_id'));
|
||||
$expectedRackNo = $rack->rack_number ?: $rack->id;
|
||||
$slotCount = (int) ($rack->slot_count ?: 1);
|
||||
$boxCount = (int) ($rack->box_number ?: 1);
|
||||
|
||||
if ((int) $request->input('raknomor') !== (int) $expectedRackNo) {
|
||||
return back()->withErrors(['slotnomor' => 'Posisi slot tidak sesuai dengan konfigurasi rack.'])->withInput();
|
||||
}
|
||||
|
||||
if ((int) $request->input('slotnomor') < 1 || (int) $request->input('slotnomor') > $slotCount) {
|
||||
return back()->withErrors(['slotnomor' => 'Slot melebihi konfigurasi rack.'])->withInput();
|
||||
}
|
||||
|
||||
if ((int) $request->input('shelfnomor') < 1 || (int) $request->input('shelfnomor') > (int) $rack->level) {
|
||||
return back()->withErrors(['shelfnomor' => 'Shelf melebihi konfigurasi slot.'])->withInput();
|
||||
}
|
||||
|
||||
if ((int) $request->input('boxnomor') < 1 || (int) $request->input('boxnomor') > $boxCount) {
|
||||
return back()->withErrors(['boxnomor' => 'Box melebihi konfigurasi shelf.'])->withInput();
|
||||
}
|
||||
|
||||
if ((int) $request->input('tubenomor') < 1 || (int) $request->input('tubenomor') > (int) $rack->capacity) {
|
||||
return back()->withErrors(['tubenomor' => 'Nomor tube melebihi kapasitas box pada shelf ini.'])->withInput();
|
||||
}
|
||||
|
||||
$slotTaken = BioSpecimen::where('rack_id', $rack->id)
|
||||
->where('slot_number', $request->input('slotnomor'))
|
||||
->where('shelf_number', $request->input('shelfnomor'))
|
||||
->where('box_number', $request->input('boxnomor'))
|
||||
->where('tube_number', $request->input('tubenomor'))
|
||||
->first();
|
||||
|
||||
if ($slotTaken) {
|
||||
$existingId = (int) $request->input('existing_specimen_id');
|
||||
if ($existingId !== (int) $slotTaken->id) {
|
||||
return back()->withErrors(['tubenomor' => 'Posisi tube pada shelf ini sudah terisi spesimen.'])->withInput();
|
||||
}
|
||||
|
||||
$volumeAmbil = (float) $request->input('volume_ambil');
|
||||
if ($volumeAmbil <= 0) {
|
||||
return back()->withErrors(['volume_ambil' => 'Isi volume yang diambil dari spesimen.'])->withInput();
|
||||
}
|
||||
|
||||
$volumeSekarang = (float) ($slotTaken->volume ?? 0);
|
||||
if ($volumeAmbil > $volumeSekarang) {
|
||||
return back()->withErrors(['volume_ambil' => 'Volume diambil melebihi sisa volume spesimen.'])->withInput();
|
||||
}
|
||||
|
||||
$slotTaken->volume = (string) ($volumeSekarang - $volumeAmbil);
|
||||
$slotTaken->save();
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Pengambilan volume berhasil. Sisa volume diperbarui.');
|
||||
}
|
||||
|
||||
if (!$request->filled('nmbakteri') || !$request->filled('strain')) {
|
||||
return back()->withErrors(['nmbakteri' => 'Nama bakteri dan strain wajib diisi untuk spesimen baru.'])->withInput();
|
||||
}
|
||||
|
||||
if (!$request->filled('volume')) {
|
||||
return back()->withErrors(['volume' => 'Volume awal spesimen wajib diisi.'])->withInput();
|
||||
}
|
||||
|
||||
$atccByUser = strtoupper(preg_replace('/[^A-Za-z0-9]/', '', Session::get('nama', 'UNKNOWN')));
|
||||
if ($atccByUser === '') {
|
||||
$atccByUser = 'UNKNOWN';
|
||||
}
|
||||
|
||||
$generatedCode = implode('-', [
|
||||
$request->input('kategorisimpan'),
|
||||
$request->input('shelfnomor'),
|
||||
$request->input('raknomor'),
|
||||
$request->input('slotnomor'),
|
||||
$request->input('boxnomor'),
|
||||
$request->input('tubenomor'),
|
||||
]);
|
||||
|
||||
$baseCode = $generatedCode;
|
||||
$counter = 1;
|
||||
while (BioSpecimen::where('specimen_code', $generatedCode)->exists()) {
|
||||
$counter++;
|
||||
$generatedCode = $baseCode.'-'.$counter;
|
||||
}
|
||||
$sampleid = $request->input('sampleid');
|
||||
if ($sampleid) {
|
||||
$cekdata = Periksa::where('nofoto', $sampleid)->first();
|
||||
if ($cekdata) {
|
||||
$sampleid = $cekdata->id;
|
||||
} else {
|
||||
$sampleid = null;
|
||||
}
|
||||
} else {
|
||||
$sampleid = null;
|
||||
}
|
||||
|
||||
BioSpecimen::create([
|
||||
'cabinet_id' => $rack->cabinet_id,
|
||||
'rack_id' => $rack->id,
|
||||
'specimen_code' => $generatedCode,
|
||||
'specimen_name' => $request->input('nmbakteri'),
|
||||
'category_storage' => $request->input('kategorisimpan'),
|
||||
'shelf_number' => $request->input('shelfnomor'),
|
||||
'rack_number' => $request->input('raknomor'),
|
||||
'slot_number' => $request->input('slotnomor'),
|
||||
'box_number' => $request->input('boxnomor'),
|
||||
'tube_number' => $request->input('tubenomor'),
|
||||
'bacteria_name' => $request->input('nmbakteri'),
|
||||
'strain' => $request->input('strain'),
|
||||
'atcc' => $request->input('atcc') ?? $atccByUser,
|
||||
'input_by' => Session::get('nama'),
|
||||
'sampleid' => $sampleid,
|
||||
'stored_at' => $request->input('stored_at'),
|
||||
'storage_condition' => $this->mapStorageCondition($request->input('kategorisimpan')),
|
||||
'volume' => (string) $request->input('volume'),
|
||||
'notes' => $request->input('notes'),
|
||||
]);
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Spesimen berhasil disimpan ke slot terpilih.');
|
||||
}
|
||||
|
||||
public function deleteSpecimen($id)
|
||||
{
|
||||
if (Session::get('previlage') == '') {
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
$specimen = BioSpecimen::find($id);
|
||||
if (!$specimen) {
|
||||
return redirect('/biorepository')->withErrors(['specimen' => 'Data spesimen tidak ditemukan.']);
|
||||
}
|
||||
|
||||
$specimen->delete();
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Spesimen berhasil dihapus.');
|
||||
}
|
||||
|
||||
public function deleteRack($id)
|
||||
{
|
||||
if (Session::get('previlage') == '') {
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
$rack = BioRack::find($id);
|
||||
if (!$rack) {
|
||||
return redirect('/biorepository')->withErrors(['rack' => 'Data rack tidak ditemukan.']);
|
||||
}
|
||||
|
||||
BioSpecimen::where('rack_id', $rack->id)->delete();
|
||||
$rack->delete();
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Rack dan semua spesimennya berhasil dihapus.');
|
||||
}
|
||||
|
||||
public function deleteCabinet($id)
|
||||
{
|
||||
if (Session::get('previlage') == '') {
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
$cabinet = BioCabinet::find($id);
|
||||
if (!$cabinet) {
|
||||
return redirect('/biorepository')->withErrors(['cabinet' => 'Data lemari tidak ditemukan.']);
|
||||
}
|
||||
|
||||
$rackIds = BioRack::where('cabinet_id', $cabinet->id)->pluck('id')->toArray();
|
||||
if (!empty($rackIds)) {
|
||||
BioSpecimen::whereIn('rack_id', $rackIds)->delete();
|
||||
BioRack::whereIn('id', $rackIds)->delete();
|
||||
}
|
||||
$cabinet->delete();
|
||||
|
||||
return redirect('/biorepository')->with('success', 'Lemari beserta rack dan spesimennya berhasil dihapus.');
|
||||
}
|
||||
|
||||
private function mapStorageCondition($category)
|
||||
{
|
||||
$mapping = [
|
||||
'A' => 'Suhu Ruang',
|
||||
'B' => '4 Derajat',
|
||||
'C' => '20 Derajat',
|
||||
'D' => '80 Derajat',
|
||||
];
|
||||
|
||||
return $mapping[$category] ?? 'Tidak Diketahui';
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
<?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;
|
||||
@@ -10,6 +11,7 @@ use App\Pasien;
|
||||
use App\Riwayat;
|
||||
use App\Rekaplogbook;
|
||||
use App\PeriksaTest;
|
||||
|
||||
use Fawno\PhpSerial\SerialDio;
|
||||
use Fawno\PhpSerial\SerialConfig;
|
||||
use DateTime;
|
||||
@@ -25,10 +27,93 @@ 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;
|
||||
private function cekBatasAtas($value, $rule) {
|
||||
if (!$rule) return false;
|
||||
|
||||
// 1. Cek apakah rule mengandung tanda > atau ≥
|
||||
// Kita gunakan array untuk mengecek berbagai kemungkinan simbol
|
||||
$validSymbols = ['>', '≥', '>', '>='];
|
||||
$found = false;
|
||||
foreach ($validSymbols as $symbol) {
|
||||
if (str_contains($rule, $symbol)) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) return false;
|
||||
|
||||
// Ambil angkanya
|
||||
$angka = (int) filter_var($rule, FILTER_SANITIZE_NUMBER_INT);
|
||||
|
||||
// 2. Gunakan >= agar angka 17 tetap dianggap 'S' (Sensitive/Suspect)
|
||||
return $value >= $angka;
|
||||
}
|
||||
private function cekMidRange($value, $rule) {
|
||||
if (!$rule) return false;
|
||||
$rule = trim($rule);
|
||||
|
||||
if ($rule === '-' || $rule === '') return false;
|
||||
if (!str_contains($rule, '-')) return false;
|
||||
|
||||
[$min, $max] = array_map('trim', explode('-', $rule));
|
||||
|
||||
if (!is_numeric($min) || !is_numeric($max)) return false;
|
||||
|
||||
// Midrange biasanya sudah benar, tapi pastikan casting int/float sesuai kebutuhan
|
||||
return $value >= (int)$min && $value <= (int)$max;
|
||||
}
|
||||
private function cekBatasBawah($value, $rule) {
|
||||
if (!$rule) return false;
|
||||
|
||||
// 1. Cek apakah rule mengandung tanda < atau ≤
|
||||
$validSymbols = ['<', '≤', '<', '<='];
|
||||
$found = false;
|
||||
foreach ($validSymbols as $symbol) {
|
||||
if (str_contains($rule, $symbol)) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) return false;
|
||||
|
||||
$angka = (int) filter_var($rule, FILTER_SANITIZE_NUMBER_INT);
|
||||
|
||||
// 2. Gunakan <= agar angka 13 tetap dianggap 'R' (Resistant)
|
||||
return $value <= $angka;
|
||||
}
|
||||
protected function cekInterpretasi($value, $data) {
|
||||
try {
|
||||
if ($value === null || $data === null) {
|
||||
|
||||
} else if ($value === '') {
|
||||
|
||||
} else if ($data->batasatas == $value){
|
||||
return "S";
|
||||
} else if ($data->batasbawah == $value){
|
||||
return "R";
|
||||
} else {
|
||||
if ($this->cekBatasAtas($value, $data->batasatas)) {
|
||||
return "S";
|
||||
}
|
||||
if ($this->cekMidRange($value, $data->midrange)) {
|
||||
return "I";
|
||||
}
|
||||
if ($this->cekBatasBawah($value, $data->batasbawah)) {
|
||||
return "R";
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
protected function getStyledValue($value, $color, $strong = false) {
|
||||
return $strong ? "<strong><font color=\"$color\">$value</font></strong>" : "<font color=\"$color\">$value</font>";
|
||||
}
|
||||
@@ -175,6 +260,13 @@ class Controller extends BaseController
|
||||
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));
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use ZipArchive;
|
||||
use JsonMachine\Items;
|
||||
class JsonTransferController extends Controller
|
||||
{
|
||||
protected $exportPath = 'database/seeders/data/';
|
||||
public function index(){
|
||||
//POSTGRESS
|
||||
$tables = DB::select("SELECT tablename FROM pg_tables WHERE schemaname = 'public'");
|
||||
$tableNames = array_map(fn($t) => $t->tablename, $tables);
|
||||
//MYSQL
|
||||
//$tables = DB::select('SHOW TABLES');
|
||||
//$tableNames = array_map('current', $tables);
|
||||
$tableInfo = [];
|
||||
|
||||
foreach ($tableNames as $table) {
|
||||
$filePath = base_path($this->exportPath . $table . '.json');
|
||||
$fileSize = file_exists($filePath) ? filesize($filePath) : null;
|
||||
|
||||
$tableInfo[] = [
|
||||
'name' => $table,
|
||||
'size' => $fileSize,
|
||||
];
|
||||
}
|
||||
return view('backup', compact('tableInfo'));
|
||||
}
|
||||
public function generate(){
|
||||
$exportPath = base_path($this->exportPath);
|
||||
if (!is_dir($exportPath)) {
|
||||
mkdir($exportPath, 0777, true);
|
||||
}
|
||||
|
||||
$tables = DB::select("SELECT tablename FROM pg_tables WHERE schemaname = 'public'");
|
||||
$tableNames = array_map(fn($t) => $t->tablename, $tables);
|
||||
|
||||
foreach ($tableNames as $table) {
|
||||
try {
|
||||
$filePath = $exportPath . $table . '.json';
|
||||
$handle = fopen($filePath, 'w');
|
||||
|
||||
fwrite($handle, "[\n");
|
||||
|
||||
$first = true;
|
||||
|
||||
foreach (DB::table($table)->cursor() as $row) {
|
||||
$jsonRow = json_encode($row, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
if (!$first) {
|
||||
fwrite($handle, ",\n");
|
||||
} else {
|
||||
$first = false;
|
||||
}
|
||||
|
||||
fwrite($handle, $jsonRow);
|
||||
}
|
||||
|
||||
fwrite($handle, "\n]");
|
||||
fclose($handle);
|
||||
} catch (\Exception $e) {
|
||||
\Log::warning("Gagal ekspor tabel $table: " . $e->getMessage());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->back()->with('success', 'Semua tabel berhasil diekspor tanpa kehabisan memori.');
|
||||
}
|
||||
public function downloadTable($table){
|
||||
$file = base_path($this->exportPath . $table . '.json');
|
||||
|
||||
if (!file_exists($file)) {
|
||||
return abort(404, 'File tidak ditemukan.');
|
||||
}
|
||||
|
||||
return response()->download($file);
|
||||
}
|
||||
public function downloadAll(){
|
||||
$zipFile = base_path('database/seeders/data/all_json.zip');
|
||||
$zip = new ZipArchive;
|
||||
|
||||
File::delete($zipFile);
|
||||
|
||||
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
|
||||
foreach (File::files(base_path($this->exportPath)) as $file) {
|
||||
$zip->addFile($file->getRealPath(), basename($file));
|
||||
}
|
||||
$zip->close();
|
||||
}
|
||||
|
||||
return response()->download($zipFile);
|
||||
}
|
||||
|
||||
public function importTable($table) {
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '-1');
|
||||
ini_set('max_execution_time', 0);
|
||||
|
||||
$path = base_path($this->exportPath . $table . '.json');
|
||||
if (!file_exists($path)) {
|
||||
return back()->with('error', "File tidak ditemukan.");
|
||||
}
|
||||
|
||||
DB::disableQueryLog();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
DB::statement("TRUNCATE TABLE $table RESTART IDENTITY CASCADE");
|
||||
$items = Items::fromFile($path);
|
||||
|
||||
$chunk = [];
|
||||
$batchSize = 1000;
|
||||
$counter = 0;
|
||||
|
||||
foreach ($items as $row) {
|
||||
$data = (array) $row;
|
||||
unset($data['id']);
|
||||
$chunk[] = $data;
|
||||
$counter++;
|
||||
|
||||
if (count($chunk) >= $batchSize) {
|
||||
DB::table($table)->insert($chunk);
|
||||
$chunk = [];
|
||||
if ($counter % 5000 == 0) {
|
||||
gc_collect_cycles();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($chunk)) {
|
||||
DB::table($table)->insert($chunk);
|
||||
}
|
||||
$resetSequenceSql = "SELECT setval(pg_get_serial_sequence('$table', 'id'), COALESCE(MAX(id), 1)) FROM $table";
|
||||
DB::statement($resetSequenceSql);
|
||||
DB::commit();
|
||||
DB::enableQueryLog();
|
||||
|
||||
return back()->with('success', 'Import berhasil!');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
\Log::error("Import Error $table: " . $e->getMessage());
|
||||
return back()->with('error', "Error 500 Details: " . $e->getMessage());
|
||||
}
|
||||
}
|
||||
public function pull(Request $request){
|
||||
if (session('previlage') !== 'developer') {
|
||||
abort(403, 'Akses ditolak. Anda tidak memiliki izin untuk menjalankan git pull.');
|
||||
}
|
||||
$gitPath = base_path();
|
||||
$output = shell_exec("cd {$gitPath} && git pull 2>&1");
|
||||
if (auth()->check()) {
|
||||
Log::info('Git pull executed by user: ' . auth()->user()->email.' at '.now());
|
||||
}
|
||||
|
||||
return back()->with('git_output', $output);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class LisController extends Controller
|
||||
{
|
||||
/**
|
||||
* Alamat IP dan port dari service Python/Flask.
|
||||
* Sebaiknya diletakkan di file .env
|
||||
* LIS_SERVICE_URL=http://127.0.0.1:5000
|
||||
*/
|
||||
protected $lisServiceUrl;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// Mengambil URL service dari file .env, dengan fallback default
|
||||
$this->lisServiceUrl = env('LIS_SERVICE_URL', 'http://localhost:5000');
|
||||
}
|
||||
|
||||
/**
|
||||
* Mengirim perintah untuk mendaftarkan tes pasien baru ke GeneXpert.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function registerPatient(Request $request)
|
||||
{
|
||||
// Validasi input dari request (sangat direkomendasikan)
|
||||
$validatedData = $request->validate([
|
||||
'patient_name' => 'required|string|max:100',
|
||||
'patient_id' => 'required|string|max:50',
|
||||
'sample_id' => 'required|string|max:50',
|
||||
'test_code' => 'required|string|max:20',
|
||||
'test_name' => 'sometimes|string|max:50',
|
||||
'dob' => 'sometimes|date_format:Ymd',
|
||||
'gender' => 'sometimes|string|in:M,F,O,U',
|
||||
]);
|
||||
|
||||
// Membangun payload sesuai format yang diharapkan oleh app.py
|
||||
$payload = [
|
||||
'command' => 'register_patient',
|
||||
'data' => $validatedData,
|
||||
];
|
||||
|
||||
try {
|
||||
// Mengirim request POST ke service Python
|
||||
$response = Http::timeout(30) // Set timeout 30 detik
|
||||
->post($this->lisServiceUrl . '/command', $payload);
|
||||
|
||||
// Cek jika request gagal di level HTTP
|
||||
if ($response->failed()) {
|
||||
Log::error('Gagal terhubung ke LIS service saat registrasi.', [
|
||||
'status' => $response->status(),
|
||||
'body' => $response->body()
|
||||
]);
|
||||
return response()->json([
|
||||
'error' => 'Tidak dapat terhubung ke LIS service.',
|
||||
'details' => $response->body()
|
||||
], 503); // Service Unavailable
|
||||
}
|
||||
|
||||
// Mengembalikan response dari service Python ke client
|
||||
return response()->json($response->json(), $response->status());
|
||||
|
||||
} catch (\Illuminate\Http\Client\ConnectionException $e) {
|
||||
Log::error('Koneksi ke LIS service gagal.', ['exception' => $e->getMessage()]);
|
||||
return response()->json(['error' => 'Koneksi ke LIS service gagal.'], 504); // Gateway Timeout
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mengirim perintah untuk meminta ulang hasil tes berdasarkan Sample ID.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function requestResult(Request $request)
|
||||
{
|
||||
// Validasi input
|
||||
$validatedData = $request->validate([
|
||||
'sample_id' => 'required|string|max:50',
|
||||
]);
|
||||
|
||||
// Membangun payload
|
||||
$payload = [
|
||||
'command' => 'request_result',
|
||||
'data' => $validatedData,
|
||||
];
|
||||
|
||||
try {
|
||||
// Mengirim request POST ke service Python
|
||||
$response = Http::timeout(30)->post($this->lisServiceUrl . '/command', $payload);
|
||||
|
||||
if ($response->failed()) {
|
||||
Log::error('Gagal terhubung ke LIS service saat meminta hasil.', [
|
||||
'status' => $response->status(),
|
||||
'body' => $response->body()
|
||||
]);
|
||||
return response()->json([
|
||||
'error' => 'Tidak dapat terhubung ke LIS service.',
|
||||
'details' => $response->body()
|
||||
], 503);
|
||||
}
|
||||
|
||||
return response()->json($response->json(), $response->status());
|
||||
|
||||
} catch (\Illuminate\Http\Client\ConnectionException $e) {
|
||||
Log::error('Koneksi ke LIS service gagal.', ['exception' => $e->getMessage()]);
|
||||
return response()->json(['error' => 'Koneksi ke LIS service gagal.'], 504);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,50 +13,21 @@ use App\Jawaban;
|
||||
use App\Pasien;
|
||||
use App\User;
|
||||
use App\Jadwalperiksa;
|
||||
use App\PendaftaranOnListiner;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use DateTime;
|
||||
use Session;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
class ListController extends Controller
|
||||
{
|
||||
public function index() {
|
||||
if (Session::get('previlage') == ''){
|
||||
return redirect('/login');
|
||||
} else {
|
||||
$polis = Poli::all();
|
||||
$ruangans = Ruangan::all();
|
||||
$dokters = Dokter::all();
|
||||
$answers = Jawaban::all();
|
||||
$details = Subjawaban::all();
|
||||
$ruangpolis = Ruangan::groupBy('poli')->select('poli')->get();
|
||||
$data = [];
|
||||
$i = 0;
|
||||
foreach ($ruangpolis as $ruangpoli) {
|
||||
$j = 0;
|
||||
$ruangpoli = $ruangpoli->poli;
|
||||
$rooms = Ruangan::where('poli', $ruangpoli)->get();
|
||||
foreach ($rooms as $room) {
|
||||
$data['ruangans'][$i][$j]['id'] = $room->id;
|
||||
$data['ruangans'][$i][$j]['ruangan'] = $room->ruangan;
|
||||
$j++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
$x = 0;
|
||||
foreach ($ruangpolis as $ruangpoli) {
|
||||
$data['ruangpolis'][$x] = $ruangpoli->poli;
|
||||
$x++;
|
||||
}
|
||||
|
||||
$data['polis'] = $polis;
|
||||
$data['dokters'] = $dokters;
|
||||
$data['answers'] = $answers;
|
||||
$data['details'] = $details;
|
||||
|
||||
return view('admin.list', $data);
|
||||
return redirect('/pendaftaran');
|
||||
}
|
||||
|
||||
}
|
||||
public function getList(Request $request) {
|
||||
$jenis = $request->input('jenis');
|
||||
@@ -65,155 +36,425 @@ class ListController extends Controller
|
||||
$lokasi = $request->input('poli');
|
||||
$valcari = $request->input('valcari');
|
||||
$master = $request->input('master');
|
||||
if ($jenis == 'verificationppds'){
|
||||
$valcari = $request->input('poli');
|
||||
$lamanurlhasil = url('/').'/hasil/';
|
||||
if ($jenis === null){$jenis = '';}
|
||||
if ($master == 'logbook') {
|
||||
list($start, $end) = explode(' - ', $mulai);
|
||||
$startDate = Carbon::createFromFormat('m/d/Y', $start)->format('Y-m-d');
|
||||
$endDate = Carbon::createFromFormat('m/d/Y', $end)->format('Y-m-d');
|
||||
$arraylist = Periksa::select('id', 'mulai', 'akhir', 'noloket', 'nofoto', 'noregister', 'asalpasien', 'nmrs', 'pasien_id', 'nmpasien', 'jkpasien', 'tgllahirpasien', 'tlppasien', 'alamatpasien', 'reques', 'usia', 'berat', 'ruangan_id', 'ruangan', 'dokter_id', 'ppdssenior', 'middleppds', 'ppdsjunior', 'ppdsmiddle2', 'ppdsjunior2', 'analis', 'excutor', 'nmdokter', 'nmppdssenior', 'nmmiddleppds', 'nmppdsjunior', 'nmppdsmiddle2', 'nmppdsjunior2', 'nmanalis', 'nmexcutor', 'klinisi', 'klinis', 'keterangan', 'kesimpulan', 'poli_id', 'asuransi', 'urgensi', 'diagnosa', 'diagnosa2', 'modality', 'dlp', 'daftar', 'foto', 'tgldraft', 'nmdrafter', 'baca', 'nmpembaca', 'verifikasi', 'export', 'tgladendum', 'nmadendum', 'filefoto', 'status', 'created_at', 'updated_at',
|
||||
DB::raw("CASE
|
||||
WHEN ppdssenior = $valcari THEN 'SENIOR'
|
||||
WHEN middleppds = $valcari THEN 'MIDDLE'
|
||||
WHEN ppdsjunior = $valcari THEN 'JUNIOR'
|
||||
WHEN ppdsmiddle2 = $valcari THEN 'MIDDLE'
|
||||
ELSE 'JUNIOR'
|
||||
END AS role"));
|
||||
$arraylist = $arraylist->whereBetween('daftar', [$startDate, $endDate]);
|
||||
$arraylist = $arraylist->where(function($query) use ($valcari) {
|
||||
$query->where('ppdssenior', $valcari)
|
||||
->orWhere('middleppds', $valcari)
|
||||
->orWhere('ppdsjunior', $valcari)
|
||||
->orWhere('ppdsmiddle2', $valcari)
|
||||
->orWhere('ppdsjunior2', $valcari);
|
||||
})->get();
|
||||
} else if ($master == 'pengambilan') {
|
||||
$arraylist = Periksa::select(
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nofoto, '</span>') as tlsnofoto"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', noregister, '</span>') as tlsnoregister"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nmpasien, '</span>') as tlsnama"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', urgensi, '</span>') as tlsurgensi"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', reques, '</span>') as tlsreques"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', ruangan, '</span>') as tlsruangan"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', daftar, '</span>') as tlsdaftar"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', status, '</span>') as tlsstatus"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', jkpasien, '</span>') as tlsjk"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', asalpasien, '</span>') as asalpasien"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', kd_spesimen, '</span>') as kd_spesimen"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nm_spesimen, '</span>') as nm_spesimen"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nmanalis, '</span>') as nmanalis"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nmppdssenior, '</span>') as nmppdssenior"),
|
||||
DB::raw("CONCAT('<span class=\"badge badge-success\">', nmdokter, '</span>') as nmdokter"),
|
||||
DB::raw("DATE(verifikasi) as daftartgl"),
|
||||
DB::raw("TO_CHAR(verifikasi, 'HH24:MI:SS') as daftarjam"),
|
||||
'nofoto')->whereNotNull('verifikasi')->where('status', '!=', 'Arsip');
|
||||
if ($valcari != ''){
|
||||
if ($jenis == 'norm'){
|
||||
$arraylist = $arraylist->where('noregister', $valcari);
|
||||
} else {
|
||||
$arraylist = $arraylist->where('nofoto', $valcari);
|
||||
}
|
||||
}
|
||||
if ($akhir != '' AND $mulai != $akhir){
|
||||
$arraylist = $arraylist->whereBetween('verifikasi', [$mulai, $akhir]);
|
||||
} else {
|
||||
if ($jenis == 'ThisDay' OR $jenis == ''){
|
||||
if ($mulai == '' OR is_null($mulai)){ $mulai = date('Y-m-d'); }
|
||||
$arraylist = $arraylist->whereDate('verifikasi', $mulai);
|
||||
} else if ($jenis == 'mundur2'){
|
||||
$arraylist = $arraylist->whereDate('verifikasi', '>=', Carbon::today()->subDays(2));
|
||||
} else if ($jenis == 'mundur3'){
|
||||
$arraylist = $arraylist->whereDate('verifikasi', '>=', Carbon::today()->subDays(2));
|
||||
} else {
|
||||
if ($mulai == $akhir){
|
||||
$arraylist = $arraylist->whereDate('verifikasi', $mulai);
|
||||
} else {
|
||||
$arraylist = $arraylist->whereBetween('verifikasi', [$mulai, $akhir]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$arraylist = $arraylist->get();
|
||||
} else if ($master == 'verificationppds' OR $jenis == 'verificationppds') {
|
||||
$arraylist = Periksa::select(
|
||||
'id', 'mulai', 'akhir', 'orderid', 'noloket', 'nofoto', 'noregister', 'asalpasien', 'nmrs', 'pasien_id', 'nmpasien',
|
||||
'jkpasien', 'tgllahirpasien', 'tlppasien', 'alamatpasien', 'reques', 'usia', 'berat', 'ktp', 'bpjs', 'ruangan_id',
|
||||
'ruangan', 'dokter_id', 'ppdssenior', 'middleppds', 'ppdsjunior', 'ppdsmiddle2', 'ppdsjunior2', 'analis', 'excutor',
|
||||
'nmdokter', 'nmppdssenior', 'nmmiddleppds', 'nmppdsjunior', 'nmppdsmiddle2', 'nmppdsjunior2', 'nmanalis', 'nmexcutor',
|
||||
'klinisi', 'klinis', 'keterangan', 'kesimpulan', 'poli_id', 'asuransi', 'urgensi', 'diagnosa', 'diagnosa2', 'modality',
|
||||
'kd_spesimen', 'nm_spesimen', 'dlp', 'daftar', 'foto', 'tgldraft', 'nmdrafter', 'baca', 'nmpembaca', 'verifikasi',
|
||||
'export', 'tgladendum', 'nmadendum', 'filefoto', 'pendaftar', 'status', 'created_at', 'updated_at',
|
||||
'bhp_media', 'bhp_potsputum', 'bhp_poturine', 'bhp_oshe', 'bhp_obyekglass', 'bhp_botolbd', 'bhp_parafilm',
|
||||
'bhp_tips', 'bhp_cottonswab', 'bhp_antibiotiktambahan', 'id_esbl', 'id_mrsa', 'rating', 'nmpendaftar',
|
||||
|
||||
DB::raw("DATE(daftar) as daftartgl"),
|
||||
DB::raw("TO_CHAR(daftar, 'HH24:MI:SS') as daftarjam"),
|
||||
DB::raw("TO_CHAR(export, 'HH24:MI:SS') as cetakjam"),
|
||||
DB::raw("TO_CHAR(verifikasi, 'HH24:MI:SS') as verifikasijam"),
|
||||
DB::raw("TO_CHAR(baca, 'HH24:MI:SS') as bacajam"),
|
||||
DB::raw("TO_CHAR(foto, 'HH24:MI:SS') as fotojam"),
|
||||
|
||||
DB::raw("CASE WHEN jkpasien = 'L' THEN '1' ELSE '' END AS l"),
|
||||
DB::raw("CASE WHEN jkpasien = 'P' THEN '1' ELSE '' END AS p"),
|
||||
DB::raw("CONCAT('https://10.10.123.218/hasil/', nofoto::text) as urlhasil"),
|
||||
|
||||
DB::raw("CASE WHEN asuransi IN ('JKN', 'BPJS') THEN '1' ELSE '' END AS jkn"),
|
||||
DB::raw("CASE WHEN asuransi = 'Billing' THEN '1' ELSE '' END AS billing"),
|
||||
DB::raw("CASE WHEN asuransi = 'GCU' THEN '1' ELSE '' END AS gcu"),
|
||||
DB::raw("CASE WHEN asuransi IN ('MANDIRI', 'Umum') THEN '1' ELSE '' END AS umum"),
|
||||
DB::raw("CASE WHEN asuransi = 'SWASTA' THEN '1' ELSE '' END AS swasta"),
|
||||
DB::raw("CASE WHEN asuransi = 'TAG' THEN '1' ELSE '' END AS tag"),
|
||||
|
||||
DB::raw("CASE WHEN urgensi != 'CITO' THEN '1' ELSE '' END AS elective"),
|
||||
DB::raw("CASE WHEN urgensi = 'CITO' THEN '1' ELSE '' END AS cito"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status = '' THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status LIKE '%Dibatalkan%' THEN '<font color=grey>Batal</font>'
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN '<font color=green>Pemeriksaan Sampel</font>'
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN '<strong>Diperiksa</strong>'
|
||||
WHEN status LIKE '%Draft%' THEN '<font color=green>Draft</font>'
|
||||
WHEN status LIKE '%Expertise%' THEN '<strong><font color=green>Expertise</font></strong>'
|
||||
WHEN status LIKE '%Decliend%' THEN '<strong><font color=red>Decliend</font></strong>'
|
||||
WHEN status LIKE '%Selesai%' THEN '<span class=\"badge badge-success\">Selesai</span>'
|
||||
WHEN status LIKE '%Arsip%' THEN '<span class=\"badge badge-primary\">Arsip</span>'
|
||||
WHEN status LIKE '%Data Vitek di Terima%' THEN '<span class=\"badge badge-warning\">Data Vitek di Terima</span>'
|
||||
ELSE CONCAT('<span class=\"badge badge-info\">', status::text, '</span>')
|
||||
END AS tlsstatus"),
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nofoto::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nofoto::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nofoto::text, '</font>')
|
||||
END AS tlsnofoto"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', noregister::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', noregister::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', noregister::text, '</font>')
|
||||
END AS tlsnoregister"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nmpasien::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nmpasien::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nmpasien::text, '</font>')
|
||||
END AS tlsnama"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', reques::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', reques::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', reques::text, '</font>')
|
||||
END AS tlsreques")
|
||||
);
|
||||
|
||||
|
||||
if ($lokasi == 'allspv'){
|
||||
$arraylist = $arraylist->where('status', 'LIKE', 'Expertise Saved (Un Verified)')->whereNull('periksa.verifikasi');
|
||||
} else {
|
||||
$arraylist = $arraylist->where('status', 'LIKE', 'Expertise Saved (Un Verified)')->whereNull('periksa.verifikasi')->where('periksa.dokter_id', Session('id'));
|
||||
}
|
||||
$arraylist = $arraylist->get();
|
||||
} else {
|
||||
$cairansteril = [15,16,43,47,48,66,96,205,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223];
|
||||
$cci = 20;
|
||||
$darah = [7,8,13,17,29,33,44,107,114,115,199,200,201,202];
|
||||
$feces = [37,38,148,149,204];
|
||||
$hiv = 30;
|
||||
$kukukulit = [165,179,180,181,183,184,185,187,188,189,190,192,194,195,196,198];
|
||||
$kulturtb = [26,40,45,52,53,56,60,61,68,69,75,92,102,122,123,136,137,144,145,152,153,233];
|
||||
$pusdanjaringan = [18,19,32,35,46,49,50,54,57,58,59,72,160,182,186,191,193,197,206,207,208,224,225,226,227,228,234,235,236,237];
|
||||
$sputum = [1,12,23,24,36,39,229,230,231,232];
|
||||
$swab = [2,4,5,9,10,11,21,22,27,34,41,42,51,63,64,65,85,86,87,88,93,97,118,67,121,125,126,127,128,129,130,132,133,134,135,140,147,158,159,161,162,163,164,166,167,168,169,170,171,172,173,174,175,176,177,178];
|
||||
$tcmnontb = [79,80,81,82,83,84,203];
|
||||
$tcmtb = [14,28,55,62,94,104,105,124,138,146];
|
||||
$urine = [3,6,25,31,154,155,156,157];
|
||||
//jikabukan_array_tambahkan_kurung
|
||||
$mapped = array_merge(
|
||||
$cairansteril,
|
||||
[$cci],
|
||||
$darah,
|
||||
$feces,
|
||||
[$hiv],
|
||||
$kukukulit,
|
||||
$kulturtb,
|
||||
$pusdanjaringan,
|
||||
$sputum,
|
||||
$swab,
|
||||
$tcmnontb,
|
||||
$tcmtb,
|
||||
$urine
|
||||
);
|
||||
$batasWaktu = Carbon::now()->subHours(7*24);
|
||||
Periksa::whereNull('status')->where('created_at', '<', $batasWaktu)->update([
|
||||
'status' => 'Dibatalkan (Arsip)',
|
||||
'updated_at' => now()
|
||||
]);
|
||||
$arraylist = Periksa::select(
|
||||
'id', 'mulai', 'akhir', 'orderid', 'noloket', 'nofoto', 'noregister', 'asalpasien', 'nmrs', 'pasien_id', 'nmpasien',
|
||||
'jkpasien', 'tgllahirpasien', 'tlppasien', 'alamatpasien', 'reques', 'usia', 'berat', 'ktp', 'bpjs', 'ruangan_id',
|
||||
'ruangan', 'dokter_id', 'ppdssenior', 'middleppds', 'ppdsjunior', 'ppdsmiddle2', 'ppdsjunior2', 'analis', 'excutor',
|
||||
'nmdokter', 'nmppdssenior', 'nmmiddleppds', 'nmppdsjunior', 'nmppdsmiddle2', 'nmppdsjunior2', 'nmanalis', 'nmexcutor',
|
||||
'klinisi', 'klinis', 'keterangan', 'kesimpulan', 'poli_id', 'asuransi', 'urgensi', 'diagnosa', 'diagnosa2', 'modality',
|
||||
'kd_spesimen', 'nm_spesimen', 'dlp', 'daftar', 'foto', 'tgldraft', 'nmdrafter', 'baca', 'nmpembaca', 'verifikasi',
|
||||
'export', 'tgladendum', 'nmadendum', 'filefoto', 'pendaftar', 'status', 'created_at', 'updated_at',
|
||||
'bhp_media', 'bhp_potsputum', 'bhp_poturine', 'bhp_oshe', 'bhp_obyekglass', 'bhp_botolbd', 'bhp_parafilm',
|
||||
'bhp_tips', 'bhp_cottonswab', 'bhp_antibiotiktambahan', 'id_esbl', 'id_mrsa', 'rating', 'nmpendaftar', 'tanggalregis', 'tanggalsampel', 'pengambilan', 'asalpengirim',
|
||||
DB::raw("DATE(daftar) as daftartgl"),
|
||||
DB::raw("TO_CHAR(daftar, 'HH24:MI:SS') as daftarjam"),
|
||||
DB::raw("TO_CHAR(export, 'HH24:MI:SS') as cetakjam"),
|
||||
DB::raw("TO_CHAR(verifikasi, 'HH24:MI:SS') as verifikasijam"),
|
||||
DB::raw("TO_CHAR(baca, 'HH24:MI:SS') as bacajam"),
|
||||
DB::raw("TO_CHAR(foto, 'HH24:MI:SS') as fotojam"),
|
||||
|
||||
DB::raw("CASE WHEN jkpasien = 'L' THEN '1' ELSE '' END AS l"),
|
||||
DB::raw("CASE WHEN jkpasien = 'P' THEN '1' ELSE '' END AS p"),
|
||||
DB::raw("CONCAT('https://10.10.123.218/hasil/', nofoto::text) as urlhasil"),
|
||||
|
||||
DB::raw("CASE WHEN asuransi IN ('JKN', 'BPJS') THEN '1' ELSE '' END AS jkn"),
|
||||
DB::raw("CASE WHEN asuransi = 'Billing' THEN '1' ELSE '' END AS billing"),
|
||||
DB::raw("CASE WHEN asuransi = 'GCU' THEN '1' ELSE '' END AS gcu"),
|
||||
DB::raw("CASE WHEN asuransi IN ('MANDIRI', 'Umum') THEN '1' ELSE '' END AS umum"),
|
||||
DB::raw("CASE WHEN asuransi = 'SWASTA' THEN '1' ELSE '' END AS swasta"),
|
||||
DB::raw("CASE WHEN asuransi = 'TAG' THEN '1' ELSE '' END AS tag"),
|
||||
|
||||
DB::raw("CASE WHEN urgensi != 'CITO' THEN '1' ELSE '' END AS elective"),
|
||||
DB::raw("CASE WHEN urgensi = 'CITO' THEN '1' ELSE '' END AS cito"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status = '' THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status LIKE '%Dibatalkan%' THEN '<font color=grey>Batal</font>'
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN '<font color=green>Pemeriksaan Sampel</font>'
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN '<strong>Diperiksa</strong>'
|
||||
WHEN status LIKE '%Draft%' THEN '<font color=green>Draft</font>'
|
||||
WHEN status LIKE '%Expertise%' THEN '<strong><font color=green>Expertise</font></strong>'
|
||||
WHEN status LIKE '%Decliend%' THEN '<strong><font color=red>Decliend</font></strong>'
|
||||
WHEN status LIKE '%Selesai%' THEN '<span class=\"badge badge-success\">Selesai</span>'
|
||||
WHEN status LIKE '%Arsip%' THEN '<span class=\"badge badge-primary\">Arsip</span>'
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN '<span class=\"badge badge-primary\">Pemeriksaan awal</span>'
|
||||
WHEN status LIKE '%Data Vitek di Terima%' THEN '<span class=\"badge badge-warning\">Data Vitek di Terima</span>'
|
||||
ELSE CONCAT('<span class=\"badge badge-info\">', status::text, '</span>')
|
||||
END AS tlsstatus"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nofoto::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nofoto::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nofoto::text, '</font>')
|
||||
END AS tlsnofoto"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', noregister::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', noregister::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', noregister::text, '</font>')
|
||||
END AS tlsnoregister"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nmpasien::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nmpasien::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nmpasien::text, '</font>')
|
||||
END AS tlsnama"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', reques::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', reques::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', reques::text, '</font>')
|
||||
END AS tlsreques")
|
||||
);
|
||||
|
||||
|
||||
if ($master == 'ABSES'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'ABSES HEPAR');
|
||||
} else if ($master == 'PERITONEUM'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'C. PERITONEUM');
|
||||
} else if ($master == 'PLEURA'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'C. PLEURA');
|
||||
} else if ($master == 'SENDI'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'C. SENDI');
|
||||
} else if ($master == 'PERITONEUM'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'C. PERITONEUM');
|
||||
} else if ($master == 'ASPIRASI'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'CAIRAN ASPIRASI');
|
||||
} else if ($master == 'HIDUNG'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'SWAB HIDUNG');
|
||||
} else if ($master == 'SWABLAIN'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'SWAB LAIN LAIN<');
|
||||
} else if ($master == 'TELINGA'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'SWAB TELINGA');
|
||||
} else if ($master == 'TENGGOROKAN'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'SWAB TENGGOROKAN');
|
||||
} else if ($master == 'TUBO'){
|
||||
$arraylist = $arraylist->where('nm_spesimen', 'TUBO O');
|
||||
} else if ($master == 'buku01'){
|
||||
$arraylist = $arraylist->whereIn('poli_id', $cairansteril);
|
||||
} else if ($master == 'buku02') {
|
||||
$arraylist = $arraylist->where('poli_id', $cci);
|
||||
} else if ($master == 'buku03') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $darah);
|
||||
} else if ($master == 'buku04') {
|
||||
$arraylist = $arraylist->where('poli_id', $hiv);
|
||||
} else if ($master == 'buku05') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $kukukulit);
|
||||
} else if ($master == 'buku06') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $kulturtb);
|
||||
} else if ($master == 'buku07') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $pusdanjaringan);
|
||||
} else if ($master == 'buku08') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $sputum);
|
||||
} else if ($master == 'buku09') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $swab);
|
||||
} else if ($master == 'buku10') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $tcmtb);
|
||||
} else if ($master == 'buku11') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $tcmnontb);
|
||||
} else if ($master == 'buku12') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $urine);
|
||||
} else if ($master == 'buku13') {
|
||||
$arraylist = $arraylist->whereIn('poli_id', $feces);
|
||||
} else if ($master == 'buku0') {
|
||||
$arraylist = $arraylist->whereNotIn('poli_id', $mapped);
|
||||
} else if ($master == '' OR $master == 'all' OR $master == 'mikro'){
|
||||
// no filter
|
||||
} else {
|
||||
$arraylist = $arraylist->where('nm_spesimen', $master);
|
||||
}
|
||||
if ($jenis == 'ThisDay') {
|
||||
$arraylist = $arraylist->where(function($q) {
|
||||
$q->where(function($sub) {
|
||||
$sub->whereNotNull('status')
|
||||
->whereNotIn('status', ['', 'Selesai', 'Arsip', 'Penerimaan Sampel'])
|
||||
->where('status', 'not like', 'Dibatalkan%');
|
||||
});
|
||||
});
|
||||
} else if ($jenis == 'ThisDayPendaftaran') {
|
||||
$arraylist = $arraylist->whereDate('daftar', Carbon::today());
|
||||
} else if ($jenis == 'mundur2') {
|
||||
$arraylist = $arraylist->whereDate('daftar', '>=', Carbon::today()->subDays(2));
|
||||
} else if ($jenis == 'mundur3') {
|
||||
$arraylist = $arraylist->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'));
|
||||
}
|
||||
$arraylist = $arraylist->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'));
|
||||
}
|
||||
$arraylist = $arraylist->whereBetween('daftar', [$mulai, $akhir])->whereNotIn('pendaftar', ['supervisor', 'admin', 'analis', 'ppds', 'developer']);
|
||||
} else if ($jenis === 'norm'){
|
||||
$arraylist = $arraylist->where('noregister', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'nofoto'){
|
||||
$arraylist = $arraylist->where('nofoto', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'rekues'){
|
||||
$arraylist = $arraylist->where('reques', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'keterangan'){
|
||||
$arraylist = $arraylist->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'kesimpulan'){
|
||||
$arraylist = $arraylist->where('kesimpulan', 'LIKE', '%'.$valcari.'%');
|
||||
} else {
|
||||
$arraylist = $arraylist->where('nmpasien', 'LIKE', '%'.$valcari.'%');
|
||||
}
|
||||
if ($jenis == 'ThisDayPendaftaran'){
|
||||
$arraylist = $arraylist->orderBy('updated_at', 'ASC')->orderBy('id', 'DESC')->get();
|
||||
} else {
|
||||
$arraylist = $arraylist->orderBy('id', 'DESC')->get();
|
||||
}
|
||||
|
||||
}
|
||||
$total = 0;
|
||||
$data = $this->getDataBasedOnMaster($master, $jenis, $mulai, $akhir, $valcari);
|
||||
if (!empty($data)){
|
||||
$dataArray = $data->get()->toArray();
|
||||
$total = count($dataArray);
|
||||
$arraylist = array_map(function ($list) use ($master) {
|
||||
$tgl = $list['tgllahirpasien'];
|
||||
$poli_id = $list['poli_id'];
|
||||
$foto = $list['foto'];
|
||||
$baca = $list['baca'];
|
||||
$export = $list['export'];
|
||||
$nofoto = $list['nofoto'];
|
||||
$noregister = $list['noregister'];
|
||||
$usia = $list['usia'];
|
||||
$urgensi = $list['urgensi'];
|
||||
$reques = $list['reques'];
|
||||
$ruangan = $list['ruangan'];
|
||||
$daftar = $list['daftar'];
|
||||
$status = $list['status'];
|
||||
$asalpasien = $list['asalpasien'];
|
||||
$dokter_id = $list['dokter_id'];
|
||||
$ppdssenior = $list['ppdssenior'];
|
||||
$middleppds = $list['middleppds'];
|
||||
$ppdsjunior = $list['ppdsjunior'];
|
||||
$middleppds2= $list['ppdsmiddle2'];
|
||||
$ppdsjunior2= $list['ppdsjunior2'];
|
||||
$pasiedin = $list['pasien_id'];
|
||||
$keterangan = $list['keterangan'];
|
||||
$kesimpulan = $list['kesimpulan'];
|
||||
$verifikasi = $list['verifikasi'];
|
||||
$nama = $list['nmpasien'];
|
||||
$jk = $list['jkpasien'];
|
||||
$telpon = $list['tlppasien'];
|
||||
$alamat = $list['alamatpasien'];
|
||||
$tgllahir = $list['tgllahirpasien'];
|
||||
$ktp = $list['ktp'];
|
||||
$bpjs = $list['bpjs'];
|
||||
$nmpendaftar= $list['pendaftar'];
|
||||
if ($nmpendaftar == 'supervisor' OR $nmpendaftar == 'admin' OR $nmpendaftar == 'analis' OR $nmpendaftar == 'ppds' OR $nmpendaftar == 'developer'){
|
||||
$nmpendaftar = $list['nmpendaftar'];
|
||||
} else {
|
||||
$nmpendaftar = 'SIMRS';
|
||||
}
|
||||
$from = $verifikasi ? \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $verifikasi) : null;
|
||||
$to = $verifikasi ? \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $verifikasi)->toString() : '';
|
||||
if ($from && $from->isValid()) {
|
||||
$durasi = $verifikasi ? \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $verifikasi)->diffForHumans($from) : 'On Progress';
|
||||
} else {
|
||||
$durasi = 'On Progress';
|
||||
}
|
||||
if ($middleppds2 != 0){
|
||||
$ppdsas = 'Middle';
|
||||
$otherppds = $list['nmppdsmiddle2'];
|
||||
} else {
|
||||
$ppdsas = 'Junior';
|
||||
$otherppds = $ppdsjunior2;
|
||||
$otherppds = $list['nmppdsjunior2'];
|
||||
}
|
||||
|
||||
$arrdaftar = explode(" ", $daftar);
|
||||
$tgldaftar = $arrdaftar[0];
|
||||
$jamdaftar = $arrdaftar[1];
|
||||
$daftar = $tgldaftar;
|
||||
$tglfoto = $foto ?: date("Y-m-d H:i:s");
|
||||
$datatampilan = $this->setStatusStyles($status, $nofoto, $noregister, $nama, $telpon, $jk, $usia, $urgensi, $reques, $ruangan, $daftar, $asalpasien);
|
||||
return [
|
||||
'asalpasien' => $list['asalpasien'],
|
||||
'tlsnofoto' => $datatampilan['nofoto'],
|
||||
'tlsnoregister' => $datatampilan['noregister'],
|
||||
'tlsnama' => $datatampilan['nama'],
|
||||
'tlsjk' => $datatampilan['jk'],
|
||||
'tlsusia' => $datatampilan['usia'],
|
||||
'tlsurgensi' => ($list['urgensi'] == 'CITO') ? '<span style="background-color: red;">C I T O</span>' : $datatampilan['urgensi'],
|
||||
'tlsreques' => $datatampilan['reques'],
|
||||
'tlsruangan' => $list['ruangan'],
|
||||
'tlsdaftar' => $datatampilan['daftar'],
|
||||
'tlsstatus' => $datatampilan['status'],
|
||||
'id' => $list['id'],
|
||||
'nofoto' => $nofoto,
|
||||
'noregister' => $noregister,
|
||||
'nama' => $nama,
|
||||
'jk' => $jk,
|
||||
'usia' => $usia,
|
||||
'urgensi' => $urgensi,
|
||||
'poli' => $reques,
|
||||
'idpasien' => $pasiedin,
|
||||
'ruangan' => $ruangan,
|
||||
'daftar' => $list['daftar'],
|
||||
'daftartgl' => $daftar,
|
||||
'daftarjam' => $jamdaftar,
|
||||
'status' => $status,
|
||||
'dokter' => $master != 'kiriman' ? $list['nmdokter'] : '',
|
||||
'ppds1' => $master != 'kiriman' ? $list['nmppdssenior'] : '',
|
||||
'ppds2' => $master != 'kiriman' ? $list['nmmiddleppds'] : '',
|
||||
'ppds3' => $master != 'kiriman' ? $list['nmppdsjunior'] : '',
|
||||
'keterangan' => $keterangan,
|
||||
'kesimpulan' => $kesimpulan,
|
||||
'noloket' => $list['noloket'],
|
||||
'idruangan' => $list['ruangan_id'],
|
||||
'iddokter' => $list['dokter_id'],
|
||||
'ppdssenior' => $list['ppdssenior'],
|
||||
'middleppds' => $list['middleppds'],
|
||||
'ppdsjunior' => $list['ppdsjunior'],
|
||||
'diagnosa' => $list['diagnosa'],
|
||||
'diagnosa2' => $list['diagnosa2'],
|
||||
'kd_spesimen' => $list['kd_spesimen'],
|
||||
'nm_spesimen' => $list['nm_spesimen'],
|
||||
'berat' => $list['berat'],
|
||||
'klinis' => $list['klinis'],
|
||||
'klinisi' => $list['klinisi'],
|
||||
'filefoto' => $list['filefoto'],
|
||||
'dlp' => $list['dlp'],
|
||||
'analis' => $list['analis'],
|
||||
'excutor' => $list['excutor'],
|
||||
'modality' => $list['modality'],
|
||||
'viewfoto' => $list['foto'],
|
||||
'tglfoto' => $tglfoto,
|
||||
'nmppdssenior' => $list['nmppdssenior'],
|
||||
'nmmiddleppds' => $list['nmmiddleppds'],
|
||||
'nmppdsjunior' => $list['nmppdsjunior'],
|
||||
'nmppdsmiddle2' => $list['nmppdsmiddle2'],
|
||||
'nmppdsjunior2' => $list['nmppdsjunior2'],
|
||||
'nmanalis' => $list['nmanalis'],
|
||||
'nmexcutor' => $list['nmexcutor'],
|
||||
'telpon' => $list['tlppasien'],
|
||||
'asuransi' => $list['asuransi'],
|
||||
'tgllahir' => $list['tgllahirpasien'],
|
||||
'alamat' => $list['alamatpasien'],
|
||||
'poli_id' => $list['poli_id'],
|
||||
'nmpendaftar' => $nmpendaftar,
|
||||
'timestamp1' => $from ? $from->toString() : null,
|
||||
'timestamp2' => $to,
|
||||
'durasi' => $durasi,
|
||||
'ppdsas' => $ppdsas,
|
||||
'otherppds' => $otherppds,
|
||||
'ktp' => $ktp,
|
||||
'bpjs' => $bpjs,
|
||||
];
|
||||
}, $dataArray);
|
||||
}
|
||||
$response = [
|
||||
'message' => 'List Laporan',
|
||||
'data' => $arraylist,
|
||||
'total' => $total
|
||||
];
|
||||
return response()->json($response, 200);
|
||||
echo json_encode($arraylist);
|
||||
}
|
||||
public function listDetail(Request $request) {
|
||||
$id = $request->input('id');
|
||||
@@ -265,31 +506,6 @@ class ListController extends Controller
|
||||
'orderid' => $getdata->orderid,
|
||||
]);
|
||||
try {
|
||||
if ($getdata->kd_spesimen != '' AND $getdata->nm_spesimen != ''){
|
||||
PendaftaranOnListiner::updateOrCreate(
|
||||
[
|
||||
'rnoreg' => $getdata->nofoto,
|
||||
],
|
||||
[
|
||||
'rtglast' => date('Y-m-d'),
|
||||
'norm' => $getdata->noregister,
|
||||
'nama' => $getdata->nmpasien,
|
||||
'alamat' => $getdata->alamatpasien,
|
||||
'telp' => $getdata->tlppasien,
|
||||
'hp' => $getdata->tlppasien,
|
||||
'tgllahir' => $getdata->tgllahirpasien,
|
||||
'umur' => $getdata->usia,
|
||||
'rjenis' => $getdata->jkpasien,
|
||||
'kodedok' => Session('id'),
|
||||
'namadok' => Session('nama'),
|
||||
'ruangan' => $getdata->ruangan,
|
||||
'tes' => '',
|
||||
'alat' => 'All',
|
||||
'kd_spesimen' => $getdata->kd_spesimen,
|
||||
'nm_spesimen' => $getdata->nm_spesimen,
|
||||
]
|
||||
);
|
||||
}
|
||||
return response()->json(['status' => 'Sukses', 'message' => 'Data Order Berhasil di Gandakan'], 201);
|
||||
} catch (Exception $e) {
|
||||
return response()->json(['status' => 'Sukses', 'message' => 'Data Order Berhasil di Gandakan'], 201);
|
||||
@@ -338,4 +554,175 @@ class ListController extends Controller
|
||||
}
|
||||
|
||||
}
|
||||
public function getListDataTables(Request $request){
|
||||
$jenis = $request->input('jenis');
|
||||
$mulai = $request->input('mulai');
|
||||
$akhir = $request->input('akhir');
|
||||
$lokasi = $request->input('lokasi');
|
||||
$valcari = $request->input('valcari');
|
||||
$master = $request->input('master');
|
||||
$arraylist = Periksa::select(
|
||||
'id', 'mulai', 'akhir', 'orderid', 'noloket', 'nofoto', 'noregister', 'asalpasien', 'nmrs', 'pasien_id', 'nmpasien',
|
||||
'jkpasien', 'tgllahirpasien', 'tlppasien', 'alamatpasien', 'reques', 'usia', 'berat', 'ktp', 'bpjs', 'ruangan_id',
|
||||
'ruangan', 'dokter_id', 'ppdssenior', 'middleppds', 'ppdsjunior', 'ppdsmiddle2', 'ppdsjunior2', 'analis', 'excutor',
|
||||
'nmdokter', 'nmppdssenior', 'nmmiddleppds', 'nmppdsjunior', 'nmppdsmiddle2', 'nmppdsjunior2', 'nmanalis', 'nmexcutor',
|
||||
'klinisi', 'klinis', 'keterangan', 'kesimpulan', 'poli_id', 'asuransi', 'urgensi', 'diagnosa', 'diagnosa2', 'modality',
|
||||
'kd_spesimen', 'nm_spesimen', 'dlp', 'daftar', 'foto', 'tgldraft', 'nmdrafter', 'baca', 'nmpembaca', 'verifikasi',
|
||||
'export', 'tgladendum', 'nmadendum', 'filefoto', 'pendaftar', 'status', 'created_at', 'updated_at',
|
||||
'bhp_media', 'bhp_potsputum', 'bhp_poturine', 'bhp_oshe', 'bhp_obyekglass', 'bhp_botolbd', 'bhp_parafilm',
|
||||
'bhp_tips', 'bhp_cottonswab', 'bhp_antibiotiktambahan', 'id_esbl', 'id_mrsa', 'rating', 'nmpendaftar',
|
||||
|
||||
DB::raw("DATE(daftar) as daftartgl"),
|
||||
DB::raw("TO_CHAR(daftar, 'HH24:MI:SS') as daftarjam"),
|
||||
DB::raw("TO_CHAR(export, 'HH24:MI:SS') as cetakjam"),
|
||||
DB::raw("TO_CHAR(verifikasi, 'HH24:MI:SS') as verifikasijam"),
|
||||
DB::raw("TO_CHAR(baca, 'HH24:MI:SS') as bacajam"),
|
||||
DB::raw("TO_CHAR(foto, 'HH24:MI:SS') as fotojam"),
|
||||
|
||||
DB::raw("CASE WHEN jkpasien = 'L' THEN '1' ELSE '' END AS l"),
|
||||
DB::raw("CASE WHEN jkpasien = 'P' THEN '1' ELSE '' END AS p"),
|
||||
DB::raw("CONCAT('https://10.10.123.218/hasil/', nofoto::text) as urlhasil"),
|
||||
|
||||
DB::raw("CASE WHEN asuransi IN ('JKN', 'BPJS') THEN '1' ELSE '' END AS jkn"),
|
||||
DB::raw("CASE WHEN asuransi = 'Billing' THEN '1' ELSE '' END AS billing"),
|
||||
DB::raw("CASE WHEN asuransi = 'GCU' THEN '1' ELSE '' END AS gcu"),
|
||||
DB::raw("CASE WHEN asuransi IN ('MANDIRI', 'Umum') THEN '1' ELSE '' END AS umum"),
|
||||
DB::raw("CASE WHEN asuransi = 'SWASTA' THEN '1' ELSE '' END AS swasta"),
|
||||
DB::raw("CASE WHEN asuransi = 'TAG' THEN '1' ELSE '' END AS tag"),
|
||||
|
||||
DB::raw("CASE WHEN urgensi != 'CITO' THEN '1' ELSE '' END AS elective"),
|
||||
DB::raw("CASE WHEN urgensi = 'CITO' THEN '1' ELSE '' END AS cito"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status = '' THEN '<span class=\"badge badge-danger\">NEW</span>'
|
||||
WHEN status LIKE '%Dibatalkan%' THEN '<font color=grey>Batal</font>'
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN '<font color=green>Pemeriksaan Sampel</font>'
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN '<strong>Diperiksa</strong>'
|
||||
WHEN status LIKE '%Draft%' THEN '<font color=green>Draft</font>'
|
||||
WHEN status LIKE '%Expertise%' THEN '<strong><font color=green>Expertise</font></strong>'
|
||||
WHEN status LIKE '%Decliend%' THEN '<strong><font color=red>Decliend</font></strong>'
|
||||
WHEN status LIKE '%Selesai%' THEN '<span class=\"badge badge-success\">Selesai</span>'
|
||||
WHEN status LIKE '%Arsip%' THEN '<span class=\"badge badge-primary\">Arsip</span>'
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN '<span class=\"badge badge-primary\">Pemeriksaan awal</span>'
|
||||
WHEN status LIKE '%Data Vitek di Terima%' THEN '<span class=\"badge badge-warning\">Data Vitek di Terima</span>'
|
||||
ELSE CONCAT('<span class=\"badge badge-info\">', status::text, '</span>')
|
||||
END AS tlsstatus"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nofoto::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nofoto::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nofoto::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', nofoto::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nofoto::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nofoto::text, '</font>')
|
||||
END AS tlsnofoto"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', noregister::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', noregister::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', noregister::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', noregister::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', noregister::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', noregister::text, '</font>')
|
||||
END AS tlsnoregister"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', nmpasien::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', nmpasien::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', nmpasien::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', nmpasien::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', nmpasien::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', nmpasien::text, '</font>')
|
||||
END AS tlsnama"),
|
||||
|
||||
DB::raw("CASE
|
||||
WHEN status IS NULL THEN CONCAT('<span class=\"badge badge-danger\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Dibatalkan%' THEN CONCAT('<font color=grey>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('<strong>', reques::text, '</strong>')
|
||||
WHEN status LIKE '%Draft%' THEN CONCAT('<font color=green>', reques::text, '</font>')
|
||||
WHEN status LIKE '%Expertise%' THEN CONCAT('<strong><font color=green>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Decliend%' THEN CONCAT('<strong><font color=red>', reques::text, '</font></strong>')
|
||||
WHEN status LIKE '%Selesai%' THEN CONCAT('<span class=\"badge badge-success\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Pemeriksaan awal%' THEN CONCAT('<span class=\"badge badge-primary\">', reques::text, '</span>')
|
||||
WHEN status LIKE '%Arsip%' THEN CONCAT('<span class=\"badge badge-primary\">', reques::text, '</span>')
|
||||
ELSE CONCAT('<font color=red>', reques::text, '</font>')
|
||||
END AS tlsreques")
|
||||
);
|
||||
if ($jenis == 'ThisDay') {
|
||||
$arraylist = $arraylist->where(function($q) {
|
||||
$q->where(function($sub) {
|
||||
$sub->whereNotIn('status', ['Selesai', 'Arsip'])
|
||||
->where('status', 'not like', 'Dibatalkan%');
|
||||
})->orWhereNull('status');
|
||||
});
|
||||
} else if ($jenis == 'ThisDayPendaftaran') {
|
||||
$arraylist = $arraylist->whereDate('daftar', Carbon::today());
|
||||
} else if ($jenis == 'mundur2') {
|
||||
$arraylist = $arraylist->whereDate('daftar', '>=', Carbon::today()->subDays(2));
|
||||
} else if ($jenis == 'mundur3') {
|
||||
$arraylist = $arraylist->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'));
|
||||
}
|
||||
$arraylist = $arraylist->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'));
|
||||
}
|
||||
$arraylist = $arraylist->whereBetween('daftar', [$mulai, $akhir])->whereNotIn('pendaftar', ['supervisor', 'admin', 'analis', 'ppds', 'developer']);
|
||||
} else if ($jenis === 'norm'){
|
||||
$arraylist = $arraylist->where('noregister', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'nofoto'){
|
||||
$arraylist = $arraylist->where('nofoto', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'rekues'){
|
||||
$arraylist = $arraylist->where('reques', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'keterangan'){
|
||||
$arraylist = $arraylist->where('keterangan', 'LIKE', '%'.$valcari.'%');
|
||||
} else if ($jenis === 'kesimpulan'){
|
||||
$arraylist = $arraylist->where('kesimpulan', 'LIKE', '%'.$valcari.'%');
|
||||
} else {
|
||||
$arraylist = $arraylist->where('nmpasien', 'LIKE', '%'.$valcari.'%');
|
||||
}
|
||||
$arraylist->whereIn('status', ['Penerimaan Sampel', 'Pemeriksaan Sampel', 'Pemeriksaan Awal'])->orderBy('id', 'DESC');
|
||||
return DataTables::of($arraylist)
|
||||
->addColumn('aksi', function ($row) {
|
||||
return '
|
||||
<div class="btn-group-vertical mb-2">
|
||||
<button type="button" class="btn btn-sm btn-outline-primary waves-effect" onClick="btnMarking('.$row->id.')">
|
||||
<i class="me-50 fa fa-flag"></i>
|
||||
</button>
|
||||
</div>';
|
||||
})
|
||||
->addColumn('batalaksi', function ($row) {
|
||||
return '
|
||||
<button type="button" class="btn btn-sm btn-danger waves-effect" onClick="btnBatal('.$row->id.')">
|
||||
<i class="me-50 fa fa-ban"></i> Kembalikan ke Loket
|
||||
</button>';
|
||||
})
|
||||
->rawColumns(['aksi', 'tlsstatus', 'tlsnofoto', 'tlsnoregister', 'tlsnama', 'tlsreques', 'batalaksi'])
|
||||
->make(true);
|
||||
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
@@ -106,7 +106,7 @@ class PasienController extends Controller
|
||||
} else {
|
||||
try {
|
||||
$client = new Client();
|
||||
$res = $client->request('GET', env('GETPASIEN_API'), ['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());
|
||||
if (isset($response_data->response[0])) {
|
||||
$hasil = $response_data->response[0];
|
||||
|
||||
@@ -3,14 +3,9 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Poli;
|
||||
use App\Ruangan;
|
||||
use App\Organisms;
|
||||
use App\XFiles;
|
||||
use App\SIMBHPJenis;
|
||||
use App\SIMBHPReport;
|
||||
use App\User;
|
||||
use App\Periksa;
|
||||
|
||||
use Validator;
|
||||
use Session;
|
||||
@@ -19,558 +14,137 @@ class PoliController extends Controller
|
||||
{
|
||||
public function index() {
|
||||
if (Session::get('previlage') == ''){
|
||||
return redirect('/login');
|
||||
} else {
|
||||
$data = [];
|
||||
$data['polis'] = Poli::all();
|
||||
$data['ruangans'] = Ruangan::all();
|
||||
return redirect('/login');
|
||||
} else {
|
||||
$data = [];
|
||||
$data['polis'] = Poli::all();
|
||||
$data['ruangans'] = Ruangan::all();
|
||||
return view('admin.poli', $data);
|
||||
}
|
||||
}
|
||||
public function viewGudangIndex() {
|
||||
if (Session::get('previlage') == ''){
|
||||
return redirect('/login');
|
||||
} else {
|
||||
$tasks = [];
|
||||
$homebase = url("/");
|
||||
$sekarang = date("Y-m-d");
|
||||
$pegawais = User::select('id', 'nama', 'previlage')->orderBy('nama', 'ASC')->get();
|
||||
$cdatane = SIMBHPJenis::all();
|
||||
$cjenis = count($cdatane);
|
||||
if ($cjenis == 0){
|
||||
$tasks['jjenis'][0]['jenis'] = 'Belum Ada Jenis Barang';
|
||||
$tasks['jjenis'][0]['satuan'] = '';
|
||||
} else {
|
||||
$i = 0;
|
||||
foreach($cdatane as $rdata){
|
||||
$tasks['jjenis'][$i]['jenis'] = $rdata->jenis;
|
||||
$tasks['jjenis'][$i]['satuan'] = $rdata->satuan;
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
$getdebet = SIMBHPReport::select(DB::raw('SUM(pemasukan) as pemasukan'))->groupBy('marking')->first();
|
||||
if (isset($getdebet->pemasukan)){
|
||||
$totpemasukan = $getdebet->pemasukan;
|
||||
} else { $totpemasukan = 0 ;}
|
||||
$getkredit = SIMBHPReport::select(DB::raw('SUM(pengeluaran) as pengeluaran'))->groupBy('marking')->first();
|
||||
if (isset($getkredit->pengeluaran)){
|
||||
$totpepengeluaran = $getkredit->pengeluaran;
|
||||
} else { $totpepengeluaran = 0 ;}
|
||||
|
||||
$tasks['masuk'] = $totpemasukan;
|
||||
$tasks['keluar'] = $totpepengeluaran;
|
||||
$tasks['pegawai'] = $pegawais;
|
||||
$tasks['tahunne'] = date("Y");
|
||||
$tasks['tanggal'] = $sekarang;
|
||||
$tasks['sidebar'] = 'simbhp';
|
||||
$previlage = Session('previlage');
|
||||
return view('admin.gudang', $tasks);
|
||||
}
|
||||
}
|
||||
|
||||
public function storePoli(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'poli' => 'required',
|
||||
'poli' => 'required',
|
||||
'modaliti' => 'required'
|
||||
$validator = Validator::make($request->all(), [
|
||||
'poli' => 'required',
|
||||
'poli' => 'required',
|
||||
'modaliti' => 'required'
|
||||
]);
|
||||
if($validator->fails()) {
|
||||
return response()->json(['status' => 'error', 'message' => 'Please fill input field or fill with right input']);
|
||||
} else {
|
||||
$poli = $request->input('poli');
|
||||
$subpoli = $request->input('subpoli');
|
||||
$subsubpoli = $request->input('subsubpoli');
|
||||
$modaliti = $request->input('modaliti');
|
||||
Poli::create([
|
||||
'poli' => $request->input('poli'),
|
||||
'subpoli' => $request->input('subpoli'),
|
||||
'subsubpoli'=> $request->input('subsubpoli'),
|
||||
'modaliti' => $request->input('modaliti'),
|
||||
'modaliti2' => $request->input('modaliti2')
|
||||
]);
|
||||
$tulis = 'Data '.$poli.' '.$subpoli.' '.$subsubpoli.' Saved..!!';
|
||||
return response()->json(['status' => 'success', 'message' => $tulis]);
|
||||
}
|
||||
}
|
||||
public function getListPoli() {
|
||||
$results = Poli::orderBy('subpoli', 'ASC')->get();
|
||||
echo json_encode($results);
|
||||
}
|
||||
public function updatePoli(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'id' => 'required',
|
||||
'poli' => 'required',
|
||||
'subpoli' => 'required',
|
||||
'modaliti' => 'required'
|
||||
]);
|
||||
if($validator->fails()) {
|
||||
if($validator->fails()) {
|
||||
return response()->json(['status' => 'error', 'message' => 'Please fill input field or fill with right input']);
|
||||
} else {
|
||||
$id = $request->input('id');
|
||||
$poli = $request->input('poli');
|
||||
$subpoli = $request->input('subpoli');
|
||||
$subsubpoli = $request->input('subsubpoli');
|
||||
Poli::where('id', $id)->update([
|
||||
'poli' => $poli,
|
||||
'subpoli' => $subpoli,
|
||||
'subsubpoli'=> $subsubpoli,
|
||||
'modaliti' => $request->input('modaliti'),
|
||||
'modaliti2' => $request->input('modaliti2')
|
||||
]);
|
||||
$tulis = 'Data '.$poli.' '.$subpoli.' '.$subsubpoli.' Updated..!!';
|
||||
return response()->json(['status' => 'success', 'message' => $tulis]);
|
||||
$poli = $request->input('poli');
|
||||
$subpoli = $request->input('subpoli');
|
||||
$subsubpoli = $request->input('subsubpoli');
|
||||
Poli::create([
|
||||
'poli' => $request->input('poli'),
|
||||
'subpoli' => $request->input('subpoli'),
|
||||
'subsubpoli'=> $request->input('subsubpoli'),
|
||||
'modaliti' => $request->input('modaliti'),
|
||||
'modaliti2' => $request->input('modaliti2'),
|
||||
'kelompok' => $request->input('kelompok')
|
||||
]);
|
||||
Periksa::where('reques', $subpoli)->update([
|
||||
'kd_spesimen' => $request->input('subsubpoli'),
|
||||
'nm_spesimen' => $request->input('modaliti'),
|
||||
]);
|
||||
$tulis = 'Data '.$poli.' '.$subpoli.' '.$subsubpoli.' Saved..!!';
|
||||
return response()->json(['status' => 'success', 'message' => $tulis]);
|
||||
}
|
||||
}
|
||||
public function deletePoli(Request $request) {
|
||||
$id = $request->id;
|
||||
$poli = Poli::find($id);
|
||||
$poli->delete();
|
||||
return back();
|
||||
|
||||
public function getListPoli() {
|
||||
$results = Poli::orderBy('subpoli', 'ASC')->get();
|
||||
echo json_encode($results);
|
||||
}
|
||||
|
||||
public function updatePoli(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'id' => 'required',
|
||||
'poli' => 'required',
|
||||
'subpoli' => 'required',
|
||||
'modaliti' => 'required'
|
||||
]);
|
||||
if($validator->fails()) {
|
||||
return response()->json(['status' => 'error', 'message' => 'Please fill input field or fill with right input']);
|
||||
} else {
|
||||
$id = $request->input('id');
|
||||
$poli = $request->input('poli');
|
||||
$subpoli = $request->input('subpoli');
|
||||
$subsubpoli = $request->input('subsubpoli');
|
||||
$kelompok = $request->input('kelompok');
|
||||
Poli::where('id', $id)->update([
|
||||
'poli' => $poli,
|
||||
'subpoli' => $subpoli,
|
||||
'subsubpoli'=> $subsubpoli,
|
||||
'modaliti' => $request->input('modaliti'),
|
||||
'modaliti2' => $request->input('modaliti2'),
|
||||
'kelompok' => $request->input('kelompok')
|
||||
]);
|
||||
if ($kelompok != ''){
|
||||
Periksa::where('reques', $subpoli)->whereNull('status')->update([
|
||||
'dlp' => $kelompok
|
||||
]);
|
||||
}
|
||||
Periksa::where('reques', $subpoli)->update([
|
||||
'kd_spesimen' => $subsubpoli,
|
||||
'nm_spesimen' => $request->input('modaliti'),
|
||||
]);
|
||||
$tulis = 'Data '.$poli.' '.$subpoli.' '.$subsubpoli.' Updated..!!';
|
||||
return response()->json(['status' => 'success', 'message' => $tulis]);
|
||||
}
|
||||
}
|
||||
|
||||
public function deletePoli(Request $request) {
|
||||
$id = $request->id;
|
||||
$poli = Poli::find($id);
|
||||
$poli->delete();
|
||||
return back();
|
||||
}
|
||||
|
||||
public function storeRuangan(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'poli' => 'required',
|
||||
'ruangan' => 'required'
|
||||
$validator = Validator::make($request->all(), [
|
||||
'poli' => 'required',
|
||||
'ruangan' => 'required'
|
||||
]);
|
||||
if($validator->fails()) {
|
||||
return response()->json(['status' => 'error', 'message' => 'Please fill input field or fill with right input']);
|
||||
} else {
|
||||
Ruangan::create([
|
||||
'poli' => $request->input('poli'),
|
||||
'ruangan' => $request->input('ruangan')
|
||||
'poli' => $request->input('poli'),
|
||||
'ruangan' => $request->input('ruangan')
|
||||
]);
|
||||
Session::flash('message', 'Data berhasil disimpan');
|
||||
Session::flash('message', 'Data berhasil disimpan');
|
||||
Session::flash('alert-class', 'alert-success');
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
public function getListRuangan(Request $request) {
|
||||
$results = Ruangan::all();
|
||||
$results = Ruangan::all();
|
||||
echo json_encode($results);
|
||||
}
|
||||
|
||||
public function updateRuangan(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'id' => 'required',
|
||||
'poli' => 'required',
|
||||
'ruangan' => 'required'
|
||||
'id' => 'required',
|
||||
'poli' => 'required',
|
||||
'ruangan' => 'required'
|
||||
]);
|
||||
if($validator->fails()) {
|
||||
return response()->json(['status' => 'error', 'message' => 'Please fill input field or fill with right input']);
|
||||
} else {
|
||||
$id = $request->input('id');
|
||||
$id = $request->input('id');
|
||||
Ruangan::where('id', $id)->update([
|
||||
'poli' => $request->input('poli'),
|
||||
'ruangan' => $request->input('ruangan')
|
||||
'poli' => $request->input('poli'),
|
||||
'ruangan' => $request->input('ruangan')
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteRuangan(Request $request) {
|
||||
$id = $request->id;
|
||||
$ruangan = Ruangan::find($id);
|
||||
$id = $request->id;
|
||||
$ruangan = Ruangan::find($id);
|
||||
$ruangan->delete();
|
||||
return back();
|
||||
}
|
||||
public function jsonRekapbhp() {
|
||||
$tahun = date("Y");
|
||||
$thnlalu = $tahun - 1;
|
||||
$totale = 0;
|
||||
$arraysurat = [];
|
||||
$getdata = SIMBHPJenis::all();
|
||||
if (!empty($getdata)){
|
||||
foreach($getdata as $hasil){
|
||||
$jenis = $hasil->kodejenis;
|
||||
$satuan = $hasil->satuan;
|
||||
$tlsjenis = $hasil->jenis;;
|
||||
$getdebet = SIMBHPReport::select(DB::raw('SUM(pemasukan) as pemasukan'))->where('jenis', $tlsjenis)->groupBy('jenis')->first();
|
||||
if (isset($getdebet->pemasukan)){
|
||||
$totpemasukan = $getdebet->pemasukan;
|
||||
} else { $totpemasukan = 0 ;}
|
||||
$getkredit = SIMBHPReport::select(DB::raw('SUM(pengeluaran) as pengeluaran'))->where('jenis', $tlsjenis)->groupBy('jenis')->first();
|
||||
if (isset($getkredit->pengeluaran)){
|
||||
$totpepengeluaran = $getkredit->pengeluaran;
|
||||
} else { $totpepengeluaran = 0 ;}
|
||||
|
||||
$saldoakhir = $totpemasukan - $totpepengeluaran;
|
||||
$arraysurat[] = array(
|
||||
'id' => $hasil->id,
|
||||
'satuan' => $satuan,
|
||||
'jenis' => $jenis,
|
||||
'tlsjenis' => $tlsjenis,
|
||||
'saldo' => number_format( $saldoakhir , 0 , '.' , ',' ),
|
||||
);
|
||||
}
|
||||
}
|
||||
echo json_encode($arraysurat);
|
||||
}
|
||||
public function jsonReportbhp(Request $request) {
|
||||
$bulan = $request->input('val01');
|
||||
$tahun = $request->input('val02');
|
||||
$hasil = [];
|
||||
if ($tahun == 'ALL'){
|
||||
$bulan = date("m");
|
||||
$tahun = date("Y");
|
||||
$getdata = SIMBHPReport::where('bulan', $bulan)->where('tahun', $tahun)->orderBy('id', 'DESC')->get();
|
||||
} else {
|
||||
if ($bulan == 'ALL'){
|
||||
$getdata = SIMBHPReport::where('tahun', $tahun)->orderBy('id', 'DESC')->get();
|
||||
} else {
|
||||
$getdata = SIMBHPReport::where('bulan', $bulan)->where('tahun', $tahun)->orderBy('id', 'DESC')->get();
|
||||
}
|
||||
|
||||
}
|
||||
foreach($getdata as $rdata){
|
||||
$dd = $rdata->tanggal;
|
||||
$mm = $rdata->bulan;
|
||||
$yy = $rdata->tahun;
|
||||
$pengeluaran= $rdata->pengeluaran;
|
||||
$pemasukan = $rdata->pemasukan;
|
||||
if ($mm < 10){
|
||||
$tgllengkap = $dd.'-0'.$mm.'-'.$yy;
|
||||
} else {
|
||||
$tgllengkap = $dd.'-'.$mm.'-'.$yy;
|
||||
}
|
||||
if ($pengeluaran == '' OR $pengeluaran == 0) {$total = $pemasukan;}
|
||||
else { $total = $pengeluaran; }
|
||||
|
||||
$hasil[] = array(
|
||||
'id' => $rdata->id,
|
||||
'tanggal' => $rdata->tanggal,
|
||||
'bulan' => $rdata->bulan,
|
||||
'tahun' => $rdata->tahun,
|
||||
'deskripsi' => $rdata->deskripsi,
|
||||
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ),
|
||||
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ),
|
||||
'jenis' => $rdata->jenis,
|
||||
'keterangan' => $rdata->keterangan,
|
||||
'tgllengkap' => $tgllengkap,
|
||||
'total' => $total,
|
||||
);
|
||||
}
|
||||
echo json_encode($hasil);
|
||||
}
|
||||
public function jsonReportbhpPaginated(Request $request) {
|
||||
$tanggal = $request->input('tanggal');
|
||||
$deskripsi = $request->input('deskripsi');
|
||||
$kategori = $request->input('kategori');
|
||||
$lm = 10;
|
||||
$limit = ($request->input('limit') == null ? $lm : $request->input('limit'));
|
||||
$order = ($request->input('order') == null ? 'id desc' : $request->input('order'));
|
||||
$data = new SIMBHPReport;
|
||||
if ($kategori != null AND $kategori != '') $data = $data->where('jenis', $kategori);
|
||||
if ($tanggal != null AND $tanggal != '') $data = $data->where('created_at', 'LIKE', '%'.$tanggal.'%');
|
||||
if ($deskripsi != null AND $deskripsi != '') $data = $data->where('deskripsi', 'LIKE', '%'.$deskripsi.'%');
|
||||
$data = $data->orderByRaw($order)->paginate($limit);
|
||||
$hasil = [];
|
||||
$totaldata = $data->total();
|
||||
$debet = 0;
|
||||
$kredit = 0;
|
||||
if (!empty($data)){
|
||||
foreach($data as $rdata){
|
||||
$dd = $rdata->tanggal;
|
||||
$mm = $rdata->bulan;
|
||||
$yy = $rdata->tahun;
|
||||
$pengeluaran = $rdata->pengeluaran;
|
||||
$pemasukan = $rdata->pemasukan;
|
||||
$deskripsi = $rdata->deskripsi;
|
||||
$jenis = $rdata->jenis;
|
||||
$debet = $debet + $pemasukan;
|
||||
$kredit = $kredit + $pengeluaran;
|
||||
$cekjenis = SIMBHPJenis::where('kodejenis', $jenis)->first();
|
||||
if (isset($cekjenis->id)){
|
||||
$kodejenis = $cekjenis->kodejenis;
|
||||
$jenis = $cekjenis->jenis;
|
||||
$satuan = $cekjenis->satuan;
|
||||
} else {
|
||||
$kodejenis = $jenis;
|
||||
$jenis = '';
|
||||
$satuan = '';
|
||||
}
|
||||
|
||||
if ($jenis != ''){
|
||||
$deskripsi = '<strong>'.$jenis.'</strong><br />'.$deskripsi;
|
||||
}
|
||||
|
||||
if ($mm < 10){
|
||||
$tgllengkap = $yy.'-0'.$mm.'-'.$dd;
|
||||
} else {
|
||||
$tgllengkap = $yy.'-'.$mm.'-'.$dd;
|
||||
}
|
||||
if ($pengeluaran == '' OR $pengeluaran == 0) {
|
||||
$total = $pemasukan;
|
||||
$jentrans = 'PEMASUKAN';
|
||||
}
|
||||
else {
|
||||
$total = $pengeluaran;
|
||||
$jentrans = 'PENGELUARAN';
|
||||
}
|
||||
|
||||
$hasil[] = array(
|
||||
'id' => $rdata->id,
|
||||
'tanggal' => $rdata->tanggal,
|
||||
'bulan' => $rdata->bulan,
|
||||
'tahun' => $rdata->tahun,
|
||||
'tlsdeskripsi' => $deskripsi,
|
||||
'deskripsi' => $rdata->deskripsi,
|
||||
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ),
|
||||
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ),
|
||||
'jenis' => $kodejenis,
|
||||
'keterangan' => $rdata->keterangan,
|
||||
'tgllengkap' => $tgllengkap,
|
||||
'created_at' => $rdata->created_at,
|
||||
'nominal' => $total.' '.$satuan,
|
||||
'jentrans' => $jentrans,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$response = [
|
||||
'message' => 'List Data',
|
||||
'data' => $hasil,
|
||||
'totaldata' => $totaldata
|
||||
];
|
||||
return response()->json($response, 200);
|
||||
}
|
||||
public function exAddbarang(Request $request) {
|
||||
$deskripsi = $request->input('set01');
|
||||
$pos = $request->input('set02');
|
||||
$tanggal = $request->input('set03');
|
||||
$jumlah = $request->input('set04');
|
||||
$jenis = $request->input('set05');
|
||||
$postujuan = $request->input('set06');
|
||||
$alasan = $request->input('set07');
|
||||
$nama = Session('nama');
|
||||
if ($tanggal == '' OR is_null($tanggal)){
|
||||
$tanggal = date("d-m-Y");
|
||||
}
|
||||
$total = (int)str_replace(',','',$jumlah);
|
||||
if ($jenis == 'jenis'){ $jumlah = '-';}
|
||||
if ($deskripsi != '' and $pos != '' and $tanggal != '' and $jumlah != '' and $jenis != ''){
|
||||
if ($jenis == 'jenis'){
|
||||
$jenis = $request->input('set02');
|
||||
$satuan = $request->input('set03');
|
||||
$idne = $request->input('set04');
|
||||
$kodejenis = preg_replace('/\s+/', '', $jenis);
|
||||
if ($idne == 'new' OR $idne == ''){
|
||||
$ceksudah = SIMBHPJenis::where('kodejenis', $kodejenis)->where('satuan', $satuan)->count();
|
||||
if ($ceksudah != 0){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Sudah Ada, Silahkan Masukkan Jenis Barang Lain']);
|
||||
return back();
|
||||
} else {
|
||||
$input = SIMBHPJenis::create([
|
||||
'kodejenis' => $kodejenis,
|
||||
'jenis' => $jenis,
|
||||
'satuan' => $satuan,
|
||||
]);
|
||||
if ($input){
|
||||
return response()->json(['status' => 'Success', 'message' => 'Data '.$jenis.' Sukses Ditambahkan']);
|
||||
return back();
|
||||
} else {
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Gagal di masukkan, silahkan ulangi beberapa saat lagi']);
|
||||
return back();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$ceksudah = SIMBHPJenis::where('id', '!=', $idne)->where('kodejenis', $kodejenis)->where('satuan', $satuan)->count();
|
||||
if ($ceksudah != 0){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Sudah Ada, Silahkan Masukkan Jenis Barang Lain']);
|
||||
return back();
|
||||
} else {
|
||||
$input = SIMBHPJenis::where('id', $idne)->update([
|
||||
'kodejenis' => $kodejenis,
|
||||
'jenis' => $jenis,
|
||||
'satuan' => $satuan,
|
||||
]);
|
||||
if ($input){
|
||||
return response()->json(['status' => 'Success', 'message' => 'Data '.$jenis.' Sukses Diupdate']);
|
||||
return back();
|
||||
} else {
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Gagal di masukkan, silahkan ulangi beberapa saat lagi']);
|
||||
return back();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$ahrf = explode("-", $tanggal);
|
||||
$tahun = $ahrf[0];
|
||||
if(isset($ahrf[1])){
|
||||
$wulan = (int)$ahrf[1];
|
||||
} else { $wulan = date("m"); $wulan = (int)$wulan; }
|
||||
if(isset($ahrf[2])){
|
||||
$dino = (int)$ahrf[2];
|
||||
} else { $dino = date("d"); }
|
||||
if ($jenis == 'pemasukan'){
|
||||
$bayar = SIMBHPReport::create([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'deskripsi' => $deskripsi,
|
||||
'pemasukan' => $total,
|
||||
'pengeluaran' => null,
|
||||
'jenis' => $pos,
|
||||
'keterangan' => '',
|
||||
'marking' => '',
|
||||
]);
|
||||
} else if ($jenis == 'pengeluaran'){
|
||||
$getnama = User::where('id', $deskripsi)->first();
|
||||
$nama = $getnama->nama ?? 'Unkown';
|
||||
$deskripsi = 'Diterima oleh '.$nama;
|
||||
$getdebet = SIMBHPReport::select(DB::raw('SUM(pemasukan) as pemasukan'))->where('jenis', $pos)->groupBy('jenis')->first();
|
||||
if (isset($getdebet->pemasukan)){
|
||||
$totpemasukan = $getdebet->pemasukan;
|
||||
} else { $totpemasukan = 0 ;}
|
||||
$getkredit = SIMBHPReport::select(DB::raw('SUM(pengeluaran) as pengeluaran'))->where('jenis', $pos)->groupBy('jenis')->first();
|
||||
if (isset($getkredit->pengeluaran)){
|
||||
$totpepengeluaran = $getkredit->pengeluaran;
|
||||
} else { $totpepengeluaran = 0 ;}
|
||||
$totpepengeluaran = $totpepengeluaran + $total;
|
||||
if ($totpepengeluaran > $totpemasukan){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']);
|
||||
return back();
|
||||
} else {
|
||||
$bayar = SIMBHPReport::create([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'deskripsi' => $deskripsi,
|
||||
'pemasukan' => null,
|
||||
'pengeluaran' => $total,
|
||||
'jenis' => $pos,
|
||||
'keterangan' => '',
|
||||
'marking' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
} else if ($jenis == 'editor'){
|
||||
if ($alasan == ''){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Alasan Perubahan Data Wajib Di Isi!!!']);
|
||||
return back();
|
||||
} else {
|
||||
$getdebet = SIMBHPReport::select(DB::raw('SUM(pemasukan) as pemasukan'))->where('jenis', $pos)->groupBy('jenis')->first();
|
||||
if (isset($getdebet->pemasukan)){
|
||||
$totpemasukan = $getdebet->pemasukan;
|
||||
} else { $totpemasukan = 0 ;}
|
||||
$getkredit = SIMBHPReport::select(DB::raw('SUM(pengeluaran) as pengeluaran'))->where('jenis', $pos)->groupBy('jenis')->first();
|
||||
if (isset($getkredit->pengeluaran)){
|
||||
$totpepengeluaran = $getkredit->pengeluaran;
|
||||
} else { $totpepengeluaran = 0 ;}
|
||||
$totpepengeluaran = $totpepengeluaran + $total;
|
||||
|
||||
$rdatalama = SIMBHPReport::where('id', $postujuan)->first();
|
||||
$ldeskripsi = $rdatalama->deskripsi;
|
||||
$lpemasukan = $rdatalama->pemasukan;
|
||||
$lpengeluaran = $rdatalama->pengeluaran;
|
||||
$ljenis = $rdatalama->jenis;
|
||||
$marking = $rdatalama->marking;
|
||||
if ($lpengeluaran == '' OR $lpengeluaran == 0) {
|
||||
$ltotal = number_format( $lpemasukan , 0 , '.' , ',' );
|
||||
if ($marking != ''){
|
||||
SIMBHPReport::where('marking', $marking)->whereNotIn('id', [$postujuan])->update([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'pengeluaran' => $total
|
||||
]);
|
||||
}
|
||||
$bayar = SIMBHPReport::where('id', $postujuan)->update([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'deskripsi' => $deskripsi,
|
||||
'jenis' => $pos,
|
||||
'pemasukan' => $total,
|
||||
'keterangan' => $alasan,
|
||||
'updated_at' => date("Y-m-d H:i:s")
|
||||
]);
|
||||
} else {
|
||||
$totpepengeluaran = $totpepengeluaran + $total;
|
||||
if ($totpepengeluaran > $totpemasukan){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']);
|
||||
return back();
|
||||
} else {
|
||||
$ltotal = number_format( $lpengeluaran , 0 , '.' , ',' );
|
||||
if ($marking != ''){
|
||||
SIMBHPReport::where('marking', $marking)->whereNotIn('id', [$postujuan])->update([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'pemasukan' => $total
|
||||
]);
|
||||
}
|
||||
$bayar = SIMBHPReport::where('id', $postujuan)->update([
|
||||
'tanggal' => $dino,
|
||||
'bulan' => $wulan,
|
||||
'tahun' => $tahun,
|
||||
'deskripsi' => $deskripsi,
|
||||
'jenis' => $pos,
|
||||
'pengeluaran' => $total,
|
||||
'keterangan' => $alasan,
|
||||
'updated_at' => date("Y-m-d H:i:s")
|
||||
]);
|
||||
}
|
||||
}
|
||||
$baris1 = '<table class="table table-bordered table-striped"><tr><td colspan=2><p align=center><b>Data Lama</b></p></td><td colspan=2><p align=center><b>Data Perubahan</b></p></td></tr>';
|
||||
$baris2 = '<tr><td>Deskripsi</td><td>'.$ldeskripsi.'</td><td><font color=red>Diubah Menjadi</font></td><td>'.$deskripsi.'</td></tr>';
|
||||
$baris3 = '<tr><td>Jenis</td><td>'.$ljenis.'</td><td><font color=red>Diubah Menjadi</font></td><td>'.$pos.'</td></tr>';
|
||||
$baris4 = '<tr><td>Total</td><td>'.$ltotal.'</td><td><font color=red>Diubah Menjadi</font></td><td>'.$jumlah.'</td></tr>';
|
||||
$baris5 = '<tr><td><b>Dengan Alasan</b></td><td colspan=3>'.$alasan.'</td</tr>';
|
||||
$baris6 = '<tr><td><b>Eksekutor</b></td><td colspan=3>'.Session('nama').'</td</tr></table>';
|
||||
$perubahan = $baris1.$baris2.$baris3.$baris4.$baris5.$baris6;
|
||||
Xfiles::create([
|
||||
'xmarking' => 'SIMBHP-'.$postujuan.'-'.time(),
|
||||
'xtabel' => 'History SIMBHP',
|
||||
'xjenis' => '',
|
||||
'xfile' => $perubahan
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
if ($alasan == ''){
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Alasan Perubahan Data Wajib Di Isi!!!']);
|
||||
return back();
|
||||
}
|
||||
else {
|
||||
$rdatalama = SIMBHPReport::where('id', $postujuan)->first();
|
||||
$ldeskripsi = $rdatalama->deskripsi;
|
||||
$lpemasukan = $rdatalama->pemasukan;
|
||||
$lpengeluaran = $rdatalama->pengeluaran;
|
||||
$ljenis = $rdatalama->jenis;
|
||||
$marking = $rdatalama->marking;
|
||||
if ($lpengeluaran == '' or $lpengeluaran == 0) {
|
||||
$ltotal = number_format( $lpemasukan , 0 , '.' , ',' );
|
||||
} else {
|
||||
$ltotal = number_format( $lpengeluaran , 0 , '.' , ',' );
|
||||
}
|
||||
$baris1 = '<table class="table table-bordered table-striped"><tr><td colspan=2><p align=center><b>Data Lama</b></p></td><td colspan=2><p align=center><b>Data Perubahan</b></p></td></tr>';
|
||||
$baris2 = '<tr><td>Deskripsi</td><td>'.$ldeskripsi.'</td><td colspan=2><font color=red>DIHAPUS</font></td></tr>';
|
||||
$baris3 = '<tr><td>Jenis</td><td>'.$ljenis.'</td><td colspan=2><font color=red>DIHAPUS</font></td></tr>';
|
||||
$baris4 = '<tr><td>Total</td><td>'.$ltotal.'</td><td colspan=2><font color=red>DIHAPUS</font></td></tr>';
|
||||
$baris5 = '<tr><td><b>Dengan Alasan</b></td><td colspan=3>'.$alasan.'</td</tr>';
|
||||
$baris6 = '<tr><td><b>Eksekutor</b></td><td colspan=3>'.Session('nama').'</td</tr></table>';
|
||||
$perubahan = $baris1.$baris2.$baris3.$baris4.$baris5.$baris6;
|
||||
|
||||
Xfiles::create([
|
||||
'xmarking' => 'SIMBHP-'.$postujuan.'-'.time(),
|
||||
'xtabel' => 'History SIMBHP',
|
||||
'xjenis' => '',
|
||||
'xfile' => $perubahan
|
||||
]);
|
||||
if ($marking != ''){
|
||||
$bayar = SIMBHPReport::where('marking', $marking)->delete();
|
||||
} else {
|
||||
$bayar = SIMBHPReport::where('id', $postujuan)->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($bayar){
|
||||
return response()->json(['status' => 'Success', 'message' => 'Transaksi '.$jenis.' Sukses Dilaksanakan']);
|
||||
return back();
|
||||
} else {
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Update Gagal, Pastikan Data Yang anda Isi Sudah Sesuai']);
|
||||
return back();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Pastikan Formnya Anda Isi dengan Lengkap']);
|
||||
return back();
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
@@ -9,7 +9,8 @@ use App\Jawaban;
|
||||
use App\Subjawaban;
|
||||
use App\SiraB;
|
||||
use App\Organisms;
|
||||
|
||||
use App\Periksa;
|
||||
use App\KomponenJawaban;
|
||||
use Validator;
|
||||
use Picqer\Barcode\BarcodeGeneratorPNG;
|
||||
use Session;
|
||||
@@ -246,6 +247,7 @@ class TemplateController extends Controller
|
||||
try {
|
||||
$id = $request->id;
|
||||
$tabel = $request->tabel;
|
||||
$data = null;
|
||||
$pesan = 'Unkown Error';
|
||||
if ($tabel == 'Organisme'){
|
||||
if ($id == 'new'){
|
||||
@@ -276,8 +278,9 @@ class TemplateController extends Controller
|
||||
return back();
|
||||
}
|
||||
} else if ($tabel == 'Speciment'){
|
||||
$kodelama = '';
|
||||
if ($id == 'new'){
|
||||
$ceksudah = Organisms::where('name', $request->name)->where('category', $request->category)->where('kelompok', $request->kelompok)->count();
|
||||
$ceksudah = Organisms::where('name', $request->name)->where('kelompok', $request->kelompok)->count();
|
||||
if ($ceksudah == 0){
|
||||
$data = new Organisms;
|
||||
$inputData = $request->except(['id', 'tabel', '_token']);
|
||||
@@ -287,9 +290,11 @@ class TemplateController extends Controller
|
||||
$pesan = $request->name.' ('.$request->category.') Sudah ada, Mohon ubah Data sebelum simpan kembali';
|
||||
}
|
||||
} else {
|
||||
$ceksudah = Organisms::where('id', '!=', $id)->where('name', $request->name)->where('category', $request->category)->where('kelompok', $request->kelompok)->count();
|
||||
$ceksudah = Organisms::where('id', '!=', $id)->where('name', $request->name)->where('kelompok', $request->kelompok)->count();
|
||||
if ($ceksudah == 0){
|
||||
$data = Organisms::find($id);
|
||||
$kodelama = $data->category;
|
||||
$kodebaru = $request->category;
|
||||
$inputData = $request->except(['id', 'tabel', '_token']);
|
||||
$data->update($inputData);
|
||||
} else {
|
||||
@@ -297,6 +302,9 @@ class TemplateController extends Controller
|
||||
}
|
||||
}
|
||||
if ($data){
|
||||
if ($kodelama != ''){
|
||||
Periksa::where('kd_spesimen', $kodelama)->update(['kd_spesimen' => $kodebaru]);
|
||||
}
|
||||
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Saved']);
|
||||
return back();
|
||||
} else {
|
||||
@@ -306,7 +314,6 @@ class TemplateController extends Controller
|
||||
} else if ($tabel == 'Parameter'){
|
||||
$getdatalama = Organisms::where('kelompok', $request->kelompok)->first();
|
||||
$category = $getdatalama->category ?? $request->kelompok;
|
||||
|
||||
if ($id == 'new'){
|
||||
$ceksudah = Organisms::where('name', $request->name)->where('category', $category)->where('kelompok', $request->kelompok)->count();
|
||||
if ($ceksudah == 0){
|
||||
@@ -337,6 +344,95 @@ class TemplateController extends Controller
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Failed', 'message' => 'Unkown Error']);
|
||||
return back();
|
||||
}
|
||||
} else if ($tabel == 'BioRepository'){
|
||||
$kategorisimpan = $request->kategorisimpan;
|
||||
$shelfnomor = $request->shelfnomor;
|
||||
$raknomor = $request->raknomor;
|
||||
$slotnomor = $request->slotnomor;
|
||||
$boxnomor = $request->boxnomor;
|
||||
$tubenomor = $request->tubenomor;
|
||||
$nomor = $kategorisimpan.''.$shelfnomor.''.$raknomor.''.$slotnomor.''.$boxnomor.'-'.$tubenomor;
|
||||
$data = KomponenJawaban::where('id', $id)->update([
|
||||
'isidata' => $request->nmbakteri,
|
||||
'nobiorepository' => $nomor,
|
||||
'strain' => $request->strain,
|
||||
'atcc' => $request->atcc,
|
||||
'sample' => $request->nmbakteri,
|
||||
'tglpenyimpanan' => $request->tglpenyimpanan,
|
||||
'created_by' => $request->created_by
|
||||
]);
|
||||
if ($data){
|
||||
return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Saved']);
|
||||
return back();
|
||||
} else {
|
||||
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Failed', 'message' => 'Unkown Error']);
|
||||
return back();
|
||||
}
|
||||
} else if ($tabel == 'uploadexcelsirab'){
|
||||
$path = $_FILES['file']['tmp_name'];
|
||||
$sukses = 0;
|
||||
$error = '';
|
||||
$baris = '1';
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
$spreadsheet = $reader->load($path);
|
||||
$getalldata = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
|
||||
foreach($getalldata as $val){
|
||||
if(is_null($val['H']) OR $val['H'] == 'kodedok' OR $val['H'] == ''){
|
||||
//
|
||||
} else {
|
||||
$baris++;
|
||||
$setmanual = $val['A'] ?? '';
|
||||
$subantibiotik = $val['B'] ?? '';
|
||||
$diskcontent = $val['C'] ?? '';
|
||||
$batasatas = $val['D'] ?? '';
|
||||
$midrange = $val['E'] ?? '';
|
||||
$batasbawah = $val['F'] ?? '';
|
||||
$sumber = $val['G'] ?? '';
|
||||
$kodedok = $val['H'] ?? '';
|
||||
if ($kodedok == '' OR $subantibiotik == '' OR $diskcontent == '' OR $sumber == '' OR $setmanual == ''){
|
||||
$error .= $baris.' Data KodeDok '.$kodedok.' dengan Antibiotik '.$subantibiotik.' dan DiskContent '.$diskcontent.' Sumber '.$sumber.' Untuk Set Manual '.$setmanual.' tidak lengkap; <br />';
|
||||
} else {
|
||||
$cekada = SiraB::where('kodedok', $kodedok)->where('setmanual', $setmanual)->where('subantibiotik', $subantibiotik)->where('diskcontent', $diskcontent)->where('sumber', $sumber)->first();
|
||||
if (isset($cekada->id)){
|
||||
$idsirab = $cekada->id;
|
||||
$updatesirab = SiraB::where('id', $idsirab)->update([
|
||||
'batasatas' => $batasatas,
|
||||
'midrange' => $midrange,
|
||||
'batasbawah' => $batasbawah,
|
||||
]);
|
||||
if ($updatesirab){
|
||||
$sukses++;
|
||||
} else {
|
||||
$error .= 'ID '.$idsirab.' Gagal diupdate; <br />';
|
||||
}
|
||||
} else {
|
||||
$cekada2 = SiraB::where('kodedok', $kodedok)->where('subantibiotik', $subantibiotik)->where('diskcontent', $diskcontent)->where('sumber', $sumber)->first();
|
||||
if (isset($cekada2->id)){
|
||||
$idsirab = $cekada2->id;
|
||||
$updatesirab = SiraB::where('id', $idsirab)->update([
|
||||
'setmanual' => $setmanual,
|
||||
'batasatas' => $batasatas,
|
||||
'midrange' => $midrange,
|
||||
'batasbawah' => $batasbawah,
|
||||
]);
|
||||
if ($updatesirab){
|
||||
$sukses++;
|
||||
} else {
|
||||
$error .= 'ID '.$idsirab.' Gagal diupdate; <br />';
|
||||
}
|
||||
} else {
|
||||
$error .= $baris.' Data KodeDok '.$kodedok.' dengan Antibiotik '.$subantibiotik.' dan DiskContent '.$diskcontent.' tidak ditemukan untuk Antiobik manual Group '.$setmanual.'; <br />';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($error == ''){
|
||||
$pesanakhir = 'Sukses mengupdate '.$sukses.' data.';
|
||||
} else {
|
||||
$pesanakhir = 'Sukses mengupdate '.$sukses.' data dengan catatan: <br />'.$error;
|
||||
}
|
||||
echo $pesanakhir;
|
||||
} else {
|
||||
if ($id == 'new'){
|
||||
$data = new SiraB;
|
||||
|
||||
@@ -19,21 +19,24 @@ class UserController extends Controller
|
||||
if (Session::get('previlage') == ''){
|
||||
return redirect('/login');
|
||||
} else {
|
||||
if ($cekkelompok == 'supervisor' OR $cekkelompok == 'admin' OR $cekkelompok == 'developer'){
|
||||
$users = User::all();
|
||||
if ($cekkelompok == 'supervisor' OR $cekkelompok == 'developer'){
|
||||
$getsetting = Setting::where('id', '1')->first();
|
||||
$data = [];
|
||||
$data['users'] = User::orderBy('nama', 'ASC')->get();
|
||||
$data['pacsaddr'] = $getsetting->pacs ?? '';
|
||||
$data['zfpaddr'] = $getsetting->zfp ?? '';
|
||||
$data['port'] = $getsetting->port ?? '';
|
||||
$data['portzfp'] = $getsetting->portzfp ?? '';
|
||||
$data['username'] = $getsetting->username ?? '';
|
||||
$data['password'] = $getsetting->password ?? '';
|
||||
return view('admin.user', $data);
|
||||
} else {
|
||||
$users = User::where('previlage', $cekkelompok)->get();
|
||||
$data = [];
|
||||
$data['kalimatheader'] = 'Access Denied';
|
||||
$data['kalimatbody'] = 'Laman khusus SPV';
|
||||
return view('errors.error', $data);
|
||||
}
|
||||
$getsetting = Setting::where('id', '1')->first();
|
||||
$data = [];
|
||||
$data['users'] = $users;
|
||||
$data['pacsaddr'] = $getsetting->pacs ?? '';
|
||||
$data['zfpaddr'] = $getsetting->zfp ?? '';
|
||||
$data['port'] = $getsetting->port ?? '';
|
||||
$data['portzfp'] = $getsetting->portzfp ?? '';
|
||||
$data['username'] = $getsetting->username ?? '';
|
||||
$data['password'] = $getsetting->password ?? '';
|
||||
return view('admin.user', $data);
|
||||
|
||||
}
|
||||
}
|
||||
public function exSetting(Request $request) {
|
||||
|
||||
@@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
'registerpasien', 'registerjson', 'ekstrakhasil', 'prosesbatal', 'cekaksess'
|
||||
'registerpasien', 'registerjson', 'ekstrakhasil', 'prosesbatal', 'cekaksess', 'ekstrakexpertise', 'getnolabnorm', 'registerulang'
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\BioCabinet;
|
||||
use App\BioRack;
|
||||
use Livewire\Component;
|
||||
|
||||
class BiorepositoryVisual extends Component
|
||||
{
|
||||
public ?int $selectedCabinetId = null;
|
||||
public ?int $selectedRackId = null;
|
||||
public ?int $selectedSlot = null;
|
||||
public ?int $selectedShelf = null;
|
||||
public ?int $selectedBox = null;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->selectedCabinetId = BioCabinet::orderBy('name', 'ASC')->value('id');
|
||||
}
|
||||
|
||||
public function selectCabinet(int $cabinetId): void
|
||||
{
|
||||
$this->selectedCabinetId = $cabinetId;
|
||||
$this->selectedRackId = null;
|
||||
$this->resetPosition();
|
||||
}
|
||||
|
||||
public function selectRack(int $rackId): void
|
||||
{
|
||||
$this->selectedRackId = $rackId;
|
||||
$this->resetPosition();
|
||||
}
|
||||
|
||||
public function selectSlot(int $slot): void
|
||||
{
|
||||
$this->selectedSlot = $slot;
|
||||
$this->selectedShelf = null;
|
||||
$this->selectedBox = null;
|
||||
}
|
||||
|
||||
public function selectShelf(int $shelf): void
|
||||
{
|
||||
$this->selectedShelf = $shelf;
|
||||
$this->selectedBox = null;
|
||||
}
|
||||
|
||||
public function selectBox(int $box): void
|
||||
{
|
||||
$this->selectedBox = $box;
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
$cabinets = BioCabinet::withCount(['racks', 'specimens'])
|
||||
->orderBy('name', 'ASC')
|
||||
->get();
|
||||
|
||||
if (!$this->selectedCabinetId && $cabinets->isNotEmpty()) {
|
||||
$this->selectedCabinetId = (int) $cabinets->first()->id;
|
||||
}
|
||||
|
||||
$selectedCabinet = $this->selectedCabinetId
|
||||
? BioCabinet::with([
|
||||
'racks' => function ($query) {
|
||||
$query->withCount('specimens')
|
||||
->orderBy('rack_number', 'ASC')
|
||||
->orderBy('code', 'ASC');
|
||||
},
|
||||
])->find($this->selectedCabinetId)
|
||||
: null;
|
||||
|
||||
$selectedRack = $this->selectedRackId
|
||||
? BioRack::with(['specimens' => function ($query) {
|
||||
$query->orderBy('slot_number', 'ASC')
|
||||
->orderBy('shelf_number', 'ASC')
|
||||
->orderBy('box_number', 'ASC')
|
||||
->orderBy('tube_number', 'ASC');
|
||||
}])->find($this->selectedRackId)
|
||||
: null;
|
||||
|
||||
if ($selectedRack && (int) $selectedRack->cabinet_id !== (int) $this->selectedCabinetId) {
|
||||
$selectedRack = null;
|
||||
$this->selectedRackId = null;
|
||||
$this->resetPosition();
|
||||
}
|
||||
|
||||
return view('livewire.biorepository-visual', [
|
||||
'cabinets' => $cabinets,
|
||||
'selectedCabinet' => $selectedCabinet,
|
||||
'selectedRack' => $selectedRack,
|
||||
]);
|
||||
}
|
||||
|
||||
private function resetPosition(): void
|
||||
{
|
||||
$this->selectedSlot = null;
|
||||
$this->selectedShelf = null;
|
||||
$this->selectedBox = null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,428 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\Services\SimbhpStockService;
|
||||
use App\SIMBHPJenis;
|
||||
use App\SIMBHPReport;
|
||||
use App\User;
|
||||
use Carbon\Carbon;
|
||||
use Livewire\Component;
|
||||
use Livewire\Attributes\On;
|
||||
use Livewire\WithPagination;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class GudangPos extends Component
|
||||
{
|
||||
use WithPagination;
|
||||
|
||||
public string $tanggal = '';
|
||||
public string $namaRuangan = '';
|
||||
public string $penerimaId = '';
|
||||
public string $penerimaManual = '';
|
||||
|
||||
public string $scan = '';
|
||||
public string $selectedKode = '';
|
||||
public string $satuanTransaksi = 'besar';
|
||||
public int $qty = 1;
|
||||
public string $keterangan = '';
|
||||
|
||||
public string $search = '';
|
||||
|
||||
/**
|
||||
* @var array<int, array{kode:string, jenis:string, qty:int, satuan_transaksi:string}>
|
||||
*/
|
||||
public array $cart = [];
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->tanggal = date('Y-m-d');
|
||||
$firstUserId = User::orderBy('nama', 'ASC')->value('id');
|
||||
$this->penerimaId = $firstUserId ? (string) $firstUserId : '';
|
||||
}
|
||||
|
||||
public function updatingSearch(): void
|
||||
{
|
||||
$this->resetPage();
|
||||
}
|
||||
|
||||
public function scanLookup(): void
|
||||
{
|
||||
$service = app(SimbhpStockService::class);
|
||||
$raw = (string) $this->scan;
|
||||
$parsed = $service->parseBarcode($raw);
|
||||
$kode = (string) ($parsed['kode'] ?? '');
|
||||
$jenisId = $parsed['jenis_id'] ?? null;
|
||||
$this->scan = '';
|
||||
|
||||
if ($kode === '' && (is_null($jenisId) || (int) $jenisId <= 0)) {
|
||||
$this->toast('error', 'Kode barcode kosong.');
|
||||
return;
|
||||
}
|
||||
|
||||
$jenis = $service->getJenisByKode($raw);
|
||||
if (!$jenis) {
|
||||
$this->toast('error', 'Kode barang tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
$saldoBase = $service->getStockBaseByJenis((string) ($jenis->jenis ?? ''));
|
||||
if ($saldoBase <= 0) {
|
||||
$this->toast('error', 'Stok kosong untuk ' . ((string) ($jenis->jenis ?? 'barang')) . '.');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->selectedKode = (string) ($jenis->kodejenis ?? '');
|
||||
$this->qty = 1;
|
||||
$this->keterangan = '';
|
||||
$this->satuanTransaksi = (string) ($parsed['satuan_transaksi'] ?? 'besar');
|
||||
$this->syncSatuanAvailability();
|
||||
$this->dispatch('gudangpos-open-modal');
|
||||
}
|
||||
|
||||
#[On('gudangpos-select')]
|
||||
public function selectProduct(string $kode): void
|
||||
{
|
||||
$service = app(SimbhpStockService::class);
|
||||
$kode = $service->sanitizeKode($kode);
|
||||
$jenis = $service->getJenisByKode($kode);
|
||||
|
||||
if (!$jenis) {
|
||||
$this->toast('error', 'Kode barang tidak ditemukan: ' . $kode);
|
||||
return;
|
||||
}
|
||||
|
||||
$saldoBase = $service->getStockBaseByJenis((string) ($jenis->jenis ?? ''));
|
||||
if ($saldoBase <= 0) {
|
||||
$this->toast('error', 'Stok kosong untuk ' . ((string) ($jenis->jenis ?? 'barang')) . '.');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->selectedKode = (string) ($jenis->kodejenis ?? '');
|
||||
$this->qty = 1;
|
||||
$this->keterangan = '';
|
||||
$this->syncSatuanAvailability();
|
||||
$this->dispatch('gudangpos-open-modal');
|
||||
}
|
||||
|
||||
#[On('gudangpos-refresh')]
|
||||
public function refreshComponent(): void
|
||||
{
|
||||
// Force rerender + keep UI responsive when stok berubah dari tab lain.
|
||||
$this->resetPage();
|
||||
}
|
||||
|
||||
public function addSelected(): void
|
||||
{
|
||||
$service = app(SimbhpStockService::class);
|
||||
$kode = $service->sanitizeKode($this->selectedKode);
|
||||
if ($kode === '') {
|
||||
$this->toast('error', 'Pilih barang dulu (scan barcode / klik daftar produk).');
|
||||
return;
|
||||
}
|
||||
|
||||
$jenis = $service->getJenisByKode($kode);
|
||||
if (!$jenis) {
|
||||
$this->toast('error', 'Kode barang tidak ditemukan: ' . $kode);
|
||||
return;
|
||||
}
|
||||
|
||||
$qty = (int) $this->qty;
|
||||
$keterangan = trim((string) $this->keterangan);
|
||||
if ($qty <= 0) {
|
||||
$this->toast('error', 'Jumlah harus lebih dari 0.');
|
||||
return;
|
||||
}
|
||||
|
||||
$setting = $service->getUnitSetting($jenis);
|
||||
if ($this->satuanTransaksi === 'kecil' && !$setting['has_breakdown']) {
|
||||
$this->satuanTransaksi = 'besar';
|
||||
$this->toast('info', 'Barang ini tidak memiliki satuan kecil, otomatis pakai satuan besar.');
|
||||
}
|
||||
|
||||
$found = false;
|
||||
foreach ($this->cart as $i => $line) {
|
||||
if (
|
||||
($line['kode'] ?? '') === $kode
|
||||
&& ($line['satuan_transaksi'] ?? '') === $this->satuanTransaksi
|
||||
&& trim((string) ($line['keterangan'] ?? '')) === $keterangan
|
||||
) {
|
||||
$this->cart[$i]['qty'] = ((int) ($this->cart[$i]['qty'] ?? 0)) + $qty;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
$this->cart[] = [
|
||||
'kode' => $kode,
|
||||
'jenis' => (string) ($jenis->jenis ?? ''),
|
||||
'qty' => $qty,
|
||||
'satuan_transaksi' => $this->satuanTransaksi,
|
||||
'keterangan' => $keterangan,
|
||||
];
|
||||
}
|
||||
|
||||
$this->qty = 1;
|
||||
$this->keterangan = '';
|
||||
$this->dispatch('gudangpos-close-modal');
|
||||
$this->dispatch('gudangpos-focus', field: 'scan');
|
||||
}
|
||||
|
||||
public function removeLine(int $index): void
|
||||
{
|
||||
if (!isset($this->cart[$index])) {
|
||||
return;
|
||||
}
|
||||
|
||||
array_splice($this->cart, $index, 1);
|
||||
}
|
||||
|
||||
public function processCart(): void
|
||||
{
|
||||
if (count($this->cart) === 0) {
|
||||
$this->toast('info', 'Keranjang masih kosong.');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->penerimaId === '') {
|
||||
$this->toast('error', 'Penerima wajib dipilih.');
|
||||
return;
|
||||
}
|
||||
|
||||
$tanggal = trim((string) $this->tanggal);
|
||||
if ($tanggal === '') {
|
||||
$this->toast('error', 'Tanggal wajib diisi.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$date = Carbon::parse($tanggal);
|
||||
} catch (\Throwable $e) {
|
||||
$this->toast('error', 'Format tanggal tidak valid.');
|
||||
return;
|
||||
}
|
||||
|
||||
$namaRuangan = trim((string) $this->namaRuangan);
|
||||
if ($namaRuangan === '') {
|
||||
$this->toast('error', 'Nama ruang wajib diisi.');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->penerimaId === '__manual__') {
|
||||
$penerima = trim((string) $this->penerimaManual);
|
||||
if ($penerima === '') {
|
||||
$this->toast('error', 'Nama penerima manual wajib diisi.');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$user = User::select('id', 'nama')->find((int) $this->penerimaId);
|
||||
if (!$user) {
|
||||
$this->toast('error', 'Penerima tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
$penerima = trim((string) ($user->nama ?? ''));
|
||||
}
|
||||
|
||||
$service = app(SimbhpStockService::class);
|
||||
|
||||
$prepared = [];
|
||||
$stockCache = [];
|
||||
foreach ($this->cart as $line) {
|
||||
$kode = $service->sanitizeKode((string) ($line['kode'] ?? ''));
|
||||
$qty = (int) ($line['qty'] ?? 0);
|
||||
$satuan = (string) ($line['satuan_transaksi'] ?? 'besar');
|
||||
$keterangan = trim((string) ($line['keterangan'] ?? ''));
|
||||
if ($kode === '' || $qty <= 0) {
|
||||
$this->toast('error', 'Ada item keranjang yang tidak valid.');
|
||||
return;
|
||||
}
|
||||
|
||||
$jenis = $service->getJenisByKode($kode);
|
||||
if (!$jenis) {
|
||||
$this->toast('error', 'Kode barang tidak ditemukan: ' . $kode);
|
||||
return;
|
||||
}
|
||||
|
||||
$setting = $service->getUnitSetting($jenis);
|
||||
if ($satuan === 'kecil' && !$setting['has_breakdown']) {
|
||||
$satuan = 'besar';
|
||||
}
|
||||
|
||||
$qtyBase = $service->calculateBaseQty($jenis, $qty, $satuan);
|
||||
$jenisNama = (string) ($jenis->jenis ?? '');
|
||||
if (!array_key_exists($jenisNama, $stockCache)) {
|
||||
$stockCache[$jenisNama] = $service->getStockBaseByJenis($jenisNama);
|
||||
}
|
||||
|
||||
if ($qtyBase > $stockCache[$jenisNama]) {
|
||||
if ((int) $stockCache[$jenisNama] <= 0) {
|
||||
$this->toast('error', 'Stok kosong untuk ' . $jenisNama . '.');
|
||||
} else {
|
||||
$this->toast('error', 'Stok tidak cukup untuk ' . $jenisNama . '.');
|
||||
}
|
||||
return;
|
||||
}
|
||||
$stockCache[$jenisNama] -= $qtyBase;
|
||||
|
||||
$prepared[] = [
|
||||
'jenis' => $jenis,
|
||||
'qty' => $qty,
|
||||
'qty_base' => $qtyBase,
|
||||
'satuan_transaksi' => $satuan,
|
||||
'keterangan' => $keterangan,
|
||||
];
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($prepared, $date, $penerima, $namaRuangan) {
|
||||
foreach ($prepared as $row) {
|
||||
/** @var SIMBHPJenis $jenis */
|
||||
$jenis = $row['jenis'];
|
||||
SIMBHPReport::create([
|
||||
'tanggal' => (int) $date->format('d'),
|
||||
'bulan' => (int) $date->format('m'),
|
||||
'tahun' => (int) $date->format('Y'),
|
||||
'deskripsi' => 'Ruangan: ' . $namaRuangan . ' | Diterima oleh ' . ($penerima !== '' ? $penerima : 'Unknown'),
|
||||
'pemasukan' => null,
|
||||
'pengeluaran' => (int) $row['qty'],
|
||||
'qty_base' => (int) $row['qty_base'],
|
||||
'satuan_transaksi' => (string) $row['satuan_transaksi'],
|
||||
'masa_expired' => null,
|
||||
'jenis' => (string) ($jenis->jenis ?? ''),
|
||||
'keterangan' => (string) ($row['keterangan'] ?? ''),
|
||||
'marking' => '',
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
$this->cart = [];
|
||||
$this->qty = 1;
|
||||
$this->keterangan = '';
|
||||
$this->penerimaManual = '';
|
||||
$this->toast('success', 'Barang keluar berhasil diproses.');
|
||||
$this->dispatch('gudang-refresh');
|
||||
$this->dispatch('gudangpos-close-modal');
|
||||
$this->dispatch('gudangpos-focus', field: 'scan');
|
||||
}
|
||||
|
||||
public function updatedSelectedKode(): void
|
||||
{
|
||||
$this->syncSatuanAvailability();
|
||||
}
|
||||
|
||||
public function updatedSatuanTransaksi(): void
|
||||
{
|
||||
$this->syncSatuanAvailability();
|
||||
}
|
||||
|
||||
private function syncSatuanAvailability(): void
|
||||
{
|
||||
$service = app(SimbhpStockService::class);
|
||||
$kode = $service->sanitizeKode($this->selectedKode);
|
||||
if ($kode === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$jenis = $service->getJenisByKode($kode);
|
||||
if (!$jenis) {
|
||||
return;
|
||||
}
|
||||
|
||||
$setting = $service->getUnitSetting($jenis);
|
||||
if (!$setting['has_breakdown'] && $this->satuanTransaksi === 'kecil') {
|
||||
$this->satuanTransaksi = 'besar';
|
||||
}
|
||||
}
|
||||
|
||||
private function toast(string $type, string $message): void
|
||||
{
|
||||
$this->dispatch('gudangpos-toast', type: $type, message: $message);
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
$service = app(SimbhpStockService::class);
|
||||
|
||||
$users = User::select('id', 'nama', 'previlage')->orderBy('nama', 'ASC')->get();
|
||||
|
||||
$query = SIMBHPJenis::query()->orderBy('jenis', 'ASC');
|
||||
$search = trim((string) $this->search);
|
||||
if ($search !== '') {
|
||||
$searchLike = '%' . $search . '%';
|
||||
$driver = DB::connection()->getDriverName();
|
||||
$operator = ($driver === 'pgsql') ? 'ILIKE' : 'LIKE';
|
||||
$query->where(function ($q) use ($searchLike, $operator) {
|
||||
$q->where('jenis', $operator, $searchLike)
|
||||
->orWhere('kodejenis', $operator, $searchLike);
|
||||
});
|
||||
}
|
||||
|
||||
$products = $query->paginate(12);
|
||||
|
||||
$jenisNames = $products->getCollection()->pluck('jenis')->filter()->values()->all();
|
||||
$stockMap = $service->getStockBaseByJenisMany($jenisNames);
|
||||
$latestExpiredMap = [];
|
||||
if (count($jenisNames) > 0) {
|
||||
$expiredRows = SIMBHPReport::query()
|
||||
->select('jenis', DB::raw('MAX(masa_expired) as latest_expired'))
|
||||
->whereIn('jenis', $jenisNames)
|
||||
->whereNotNull('masa_expired')
|
||||
->whereNotNull('pemasukan')
|
||||
->where('pemasukan', '>', 0)
|
||||
->groupBy('jenis')
|
||||
->get();
|
||||
|
||||
foreach ($expiredRows as $row) {
|
||||
$jenisNama = (string) ($row->jenis ?? '');
|
||||
$expired = (string) ($row->latest_expired ?? '');
|
||||
if ($jenisNama !== '' && $expired !== '') {
|
||||
$expiredDate = Carbon::parse($expired)->startOfDay();
|
||||
$today = Carbon::today();
|
||||
$daysLeft = $today->diffInDays($expiredDate, false);
|
||||
$badgeClass = 'success';
|
||||
if ($daysLeft < 0) {
|
||||
$badgeClass = 'danger';
|
||||
} elseif ($daysLeft <= 30) {
|
||||
$badgeClass = 'warning';
|
||||
}
|
||||
|
||||
$latestExpiredMap[$jenisNama] = [
|
||||
'date' => $expiredDate->format('d-m-Y'),
|
||||
'badge_class' => $badgeClass,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$selectedJenis = null;
|
||||
$selectedStockDisplay = null;
|
||||
$selectedSetting = null;
|
||||
$selectedLatestExpired = null;
|
||||
$kode = $service->sanitizeKode($this->selectedKode);
|
||||
if ($kode !== '') {
|
||||
$selectedJenis = $service->getJenisByKode($kode);
|
||||
if ($selectedJenis) {
|
||||
$saldoBase = $service->getStockBaseByJenis((string) $selectedJenis->jenis);
|
||||
$selectedSetting = $service->getUnitSetting($selectedJenis);
|
||||
$selectedStockDisplay = $service->formatStockDisplay(
|
||||
$saldoBase,
|
||||
(string) ($selectedJenis->satuan ?? ''),
|
||||
(string) ($selectedJenis->satuan_kecil ?? ''),
|
||||
(int) ($selectedJenis->konversi_kecil ?? 1),
|
||||
);
|
||||
$selectedLatestExpired = $latestExpiredMap[(string) $selectedJenis->jenis] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
return view('livewire.gudang-pos', [
|
||||
'users' => $users,
|
||||
'products' => $products,
|
||||
'stockMap' => $stockMap,
|
||||
'latestExpiredMap' => $latestExpiredMap,
|
||||
'selectedJenis' => $selectedJenis,
|
||||
'selectedStockDisplay' => $selectedStockDisplay,
|
||||
'selectedSetting' => $selectedSetting,
|
||||
'selectedLatestExpired' => $selectedLatestExpired,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Paslab extends Model
|
||||
{
|
||||
protected $table = "paslab";
|
||||
protected $primaryKey = "urut";
|
||||
public $timestamps = false;
|
||||
protected $guarded = [];
|
||||
}
|
||||
@@ -3,6 +3,10 @@
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\KomponenJawaban;
|
||||
use App\Riwayat;
|
||||
use App\ResultSample;
|
||||
use App\PertumKolomNi;
|
||||
|
||||
class Periksa extends Model
|
||||
{
|
||||
@@ -52,4 +56,56 @@ class Periksa extends Model
|
||||
{
|
||||
return $this->hasOne('App\Logbook','id','diagnosa');
|
||||
}
|
||||
public function komponen()
|
||||
{
|
||||
return $this->hasMany(KomponenJawaban::class, 'accnumber', 'nofoto');
|
||||
}
|
||||
public function riwayats()
|
||||
{
|
||||
return $this->hasMany(Riwayat::class, 'nofoto', 'nofoto');
|
||||
}
|
||||
public function rawResult()
|
||||
{
|
||||
return $this->hasOne(ResultSample::class, 'accession_number', 'nofoto');
|
||||
}
|
||||
public function pertumkolomni()
|
||||
{
|
||||
return $this->hasMany(PertumKolomNi::class, 'orderid', 'id');
|
||||
}
|
||||
public function lastMediaBAP()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media BAP')
|
||||
->latest();
|
||||
}
|
||||
public function lastMediaCAP()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media CAP')
|
||||
->latest();
|
||||
}
|
||||
public function lastMediaMcConkey()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media Mc Conkey')
|
||||
->latest();
|
||||
}
|
||||
public function lastMediaSDA()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media SDA')
|
||||
->latest();
|
||||
}
|
||||
public function lastMediaSelLain()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media Selektif lainnya')
|
||||
->latest();
|
||||
}
|
||||
public function lastMediaTamLain()
|
||||
{
|
||||
return $this->hasOne(PertumKolomNi::class, 'orderid', 'id')
|
||||
->where('media', 'Media Tambahan Lainnya')
|
||||
->latest();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class PertumKolomNi extends Model
|
||||
{
|
||||
protected $table = "pertumkolomni";
|
||||
protected $guarded = [];
|
||||
}
|
||||
+6
-2
@@ -8,10 +8,14 @@ class Poli extends Model
|
||||
{
|
||||
protected $table = "poli";
|
||||
protected $fillable = [
|
||||
'id',
|
||||
'poli',
|
||||
'subpoli',
|
||||
'subsubpoli',
|
||||
'modaliti',
|
||||
'modaliti2',
|
||||
'modaliti',
|
||||
'kelompok',
|
||||
'modaliti2',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RekapPenerimaanSamplePrintHistory extends Model
|
||||
{
|
||||
protected $table = 'rekap_penerimaan_sample_print_histories';
|
||||
protected $guarded = [];
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\SIMBHPJenis;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class SimbhpStockService
|
||||
{
|
||||
/**
|
||||
* Barcode format:
|
||||
* - MAIN (satuan besar): 91{ID(8-digit)}1 (example: 91000001231)
|
||||
* - BREAKDOWN (satuan kecil): 91{ID(8-digit)}2 (example: 91000001232)
|
||||
*
|
||||
* Backward compatibility:
|
||||
* - {KODE}-B / {KODE}-K
|
||||
* - plain {KODE} treated as "besar"
|
||||
*
|
||||
* @return array{kode:string, jenis_id:int|null, satuan_transaksi:string, barcode_value:string}
|
||||
*/
|
||||
public function parseBarcode(string $raw): array
|
||||
{
|
||||
$raw = $this->sanitizeKode($raw);
|
||||
if ($raw === '') {
|
||||
return [
|
||||
'kode' => '',
|
||||
'jenis_id' => null,
|
||||
'satuan_transaksi' => 'besar',
|
||||
'barcode_value' => '',
|
||||
];
|
||||
}
|
||||
|
||||
if (preg_match('/^91(\d{8})([12])$/', $raw, $m)) {
|
||||
$id = (int) ltrim((string) $m[1], '0');
|
||||
$unitDigit = (string) $m[2];
|
||||
|
||||
return [
|
||||
'kode' => '',
|
||||
'jenis_id' => $id > 0 ? $id : null,
|
||||
'satuan_transaksi' => ($unitDigit === '2') ? 'kecil' : 'besar',
|
||||
'barcode_value' => $raw,
|
||||
];
|
||||
}
|
||||
|
||||
if (preg_match('/^(.*)-(B|K)$/', $raw, $m)) {
|
||||
$base = $this->sanitizeKode((string) $m[1]);
|
||||
$suffix = (string) $m[2];
|
||||
return [
|
||||
'kode' => $base,
|
||||
'jenis_id' => null,
|
||||
'satuan_transaksi' => ($suffix === 'K') ? 'kecil' : 'besar',
|
||||
'barcode_value' => $base . '-' . $suffix,
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'kode' => $raw,
|
||||
'jenis_id' => null,
|
||||
'satuan_transaksi' => 'besar',
|
||||
'barcode_value' => $raw,
|
||||
];
|
||||
}
|
||||
|
||||
public function sanitizeKode(string $kode): string
|
||||
{
|
||||
$kode = strtoupper(trim($kode));
|
||||
$kode = preg_replace('/\s+/', '', $kode);
|
||||
$kode = preg_replace('/[^A-Z0-9._-]/', '', $kode);
|
||||
|
||||
return substr($kode, 0, 40);
|
||||
}
|
||||
|
||||
public function getJenisByKode(string $kode): ?SIMBHPJenis
|
||||
{
|
||||
$parsed = $this->parseBarcode($kode);
|
||||
$jenisId = $parsed['jenis_id'] ?? null;
|
||||
if (!is_null($jenisId) && (int) $jenisId > 0) {
|
||||
return SIMBHPJenis::where('id', (int) $jenisId)->first();
|
||||
}
|
||||
|
||||
$kode = $parsed['kode'] ?? '';
|
||||
if ($kode === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return SIMBHPJenis::where('kodejenis', $kode)->first();
|
||||
}
|
||||
|
||||
public function makeBarcodeValue(int $jenisId, string $satuanTransaksi = 'besar'): string
|
||||
{
|
||||
if ($jenisId <= 0) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$idPart = str_pad((string) $jenisId, 8, '0', STR_PAD_LEFT);
|
||||
$unitDigit = ($satuanTransaksi === 'kecil') ? '2' : '1';
|
||||
|
||||
return '91' . $idPart . $unitDigit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{has_breakdown: bool, konversi: int, satuan_kecil: string}
|
||||
*/
|
||||
public function getUnitSetting(SIMBHPJenis $jenis): array
|
||||
{
|
||||
$satuanKecil = trim((string) ($jenis->satuan_kecil ?? ''));
|
||||
$konversi = (int) ($jenis->konversi_kecil ?? 1);
|
||||
if ($konversi <= 0) {
|
||||
$konversi = 1;
|
||||
}
|
||||
$hasBreakdown = ($satuanKecil !== '' && $konversi > 1);
|
||||
|
||||
return [
|
||||
'has_breakdown' => $hasBreakdown,
|
||||
'konversi' => $konversi,
|
||||
'satuan_kecil' => $satuanKecil,
|
||||
];
|
||||
}
|
||||
|
||||
public function calculateBaseQty(SIMBHPJenis $jenis, int $qtyInput, string $satuanTransaksi = 'besar'): int
|
||||
{
|
||||
$qtyInput = (int) $qtyInput;
|
||||
if ($qtyInput < 0) {
|
||||
$qtyInput = 0;
|
||||
}
|
||||
|
||||
$setting = $this->getUnitSetting($jenis);
|
||||
$konversi = (int) ($setting['konversi'] ?? 1);
|
||||
if ($konversi <= 0) {
|
||||
$konversi = 1;
|
||||
}
|
||||
|
||||
if ($satuanTransaksi === 'kecil') {
|
||||
return $qtyInput;
|
||||
}
|
||||
|
||||
return $qtyInput * $konversi;
|
||||
}
|
||||
|
||||
public function getStockBaseByJenis(string $jenisNama): int
|
||||
{
|
||||
$jenisNama = trim((string) $jenisNama);
|
||||
if ($jenisNama === '') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$row = DB::table('simbhpreport')
|
||||
->where('jenis', $jenisNama)
|
||||
->selectRaw("SUM(CASE WHEN pemasukan IS NOT NULL AND pemasukan > 0 THEN COALESCE(qty_base, pemasukan) ELSE 0 END) AS masuk_base")
|
||||
->selectRaw("SUM(CASE WHEN pengeluaran IS NOT NULL AND pengeluaran > 0 THEN COALESCE(qty_base, pengeluaran) ELSE 0 END) AS keluar_base")
|
||||
->first();
|
||||
|
||||
$masuk = (int) ($row->masuk_base ?? 0);
|
||||
$keluar = (int) ($row->keluar_base ?? 0);
|
||||
|
||||
return $masuk - $keluar;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int, string> $jenisNames
|
||||
* @return array<string, int> map jenis => saldo_base
|
||||
*/
|
||||
public function getStockBaseByJenisMany(array $jenisNames): array
|
||||
{
|
||||
$jenisNames = array_values(array_filter(array_map(function ($v) {
|
||||
return trim((string) $v);
|
||||
}, $jenisNames)));
|
||||
|
||||
if (count($jenisNames) === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$rows = DB::table('simbhpreport')
|
||||
->whereIn('jenis', $jenisNames)
|
||||
->select('jenis')
|
||||
->selectRaw("SUM(CASE WHEN pemasukan IS NOT NULL AND pemasukan > 0 THEN COALESCE(qty_base, pemasukan) ELSE 0 END) AS masuk_base")
|
||||
->selectRaw("SUM(CASE WHEN pengeluaran IS NOT NULL AND pengeluaran > 0 THEN COALESCE(qty_base, pengeluaran) ELSE 0 END) AS keluar_base")
|
||||
->groupBy('jenis')
|
||||
->get();
|
||||
|
||||
$map = [];
|
||||
foreach ($rows as $row) {
|
||||
$jenis = (string) ($row->jenis ?? '');
|
||||
if ($jenis === '') {
|
||||
continue;
|
||||
}
|
||||
$map[$jenis] = ((int) ($row->masuk_base ?? 0)) - ((int) ($row->keluar_base ?? 0));
|
||||
}
|
||||
|
||||
foreach ($jenisNames as $jenis) {
|
||||
if (!array_key_exists($jenis, $map)) {
|
||||
$map[$jenis] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return $map;
|
||||
}
|
||||
|
||||
public function formatStockDisplay(int $saldoBase, string $satuanBesar, string $satuanKecil, int $konversi): string
|
||||
{
|
||||
$saldoBase = (int) $saldoBase;
|
||||
$konversi = (int) $konversi;
|
||||
if ($konversi <= 1 || trim($satuanKecil) === '') {
|
||||
return number_format($saldoBase, 0, '.', ',') . ' ' . $satuanBesar;
|
||||
}
|
||||
|
||||
$besar = intdiv($saldoBase, $konversi);
|
||||
$kecil = $saldoBase % $konversi;
|
||||
|
||||
return number_format($besar, 0, '.', ',') . ' ' . $satuanBesar . ' + ' . number_format($kecil, 0, '.', ',') . ' ' . $satuanKecil;
|
||||
}
|
||||
}
|
||||
Regular → Executable
+10
-4
@@ -8,21 +8,23 @@
|
||||
"php": "^8.1",
|
||||
"aamdsam/bridging-bpjs": "^1.11",
|
||||
"aranyasen/hl7": "^3.1",
|
||||
"arcanedev/log-viewer": "^10.1",
|
||||
"elibyy/tcpdf-laravel": "^11.1",
|
||||
"fawno/php-serial": "^2.0",
|
||||
"guzzlehttp/guzzle": "^7.8",
|
||||
"halaxa/json-machine": "^1.2",
|
||||
"laravel/framework": "^10.10",
|
||||
"laravel/passport": "^11.10",
|
||||
"laravel/sanctum": "^3.3",
|
||||
"laravel/tinker": "^2.8",
|
||||
"munafio/chatify": "^1.6",
|
||||
"livewire/livewire": "^3.5",
|
||||
"onecentlin/laravel-adminer": "^7.0",
|
||||
"opcodesio/log-viewer": "^3.21",
|
||||
"phpoffice/phpspreadsheet": "^3.3",
|
||||
"picqer/php-barcode-generator": "^3.2",
|
||||
"pusher/pusher-php-server": "^7.2",
|
||||
"setasign/fpdi": "^2.6",
|
||||
"simplesoftwareio/simple-qrcode": "^4.2"
|
||||
"simplesoftwareio/simple-qrcode": "^4.2",
|
||||
"spatie/laravel-backup": "^9.3",
|
||||
"yajra/laravel-datatables-oracle": "^10.11"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.9.1",
|
||||
@@ -66,7 +68,11 @@
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "8.4"
|
||||
},
|
||||
"optimize-autoloader": true,
|
||||
"platform-check": false,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
|
||||
Generated
+1760
-1207
File diff suppressed because it is too large
Load diff
Binary file not shown.
@@ -70,7 +70,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => 'UTC',
|
||||
'timezone' => 'Asia/Jakarta',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -182,7 +182,7 @@ return [
|
||||
*/
|
||||
|
||||
'aliases' => Facade::defaultAliases()->merge([
|
||||
// 'Example' => App\Facades\Example::class,
|
||||
'PDFCREATOR' => Elibyy\TCPDF\Facades\TCPDF::class,
|
||||
])->toArray(),
|
||||
|
||||
];
|
||||
@@ -0,0 +1,341 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'backup' => [
|
||||
/*
|
||||
* The name of this application. You can use this name to monitor
|
||||
* the backups.
|
||||
*/
|
||||
'name' => env('APP_NAME', 'laravel-backup'),
|
||||
|
||||
'source' => [
|
||||
'files' => [
|
||||
/*
|
||||
* The list of directories and files that will be included in the backup.
|
||||
*/
|
||||
'include' => [
|
||||
base_path(),
|
||||
],
|
||||
|
||||
/*
|
||||
* These directories and files will be excluded from the backup.
|
||||
*
|
||||
* Directories used by the backup process will automatically be excluded.
|
||||
*/
|
||||
'exclude' => [
|
||||
base_path('vendor'),
|
||||
base_path('node_modules'),
|
||||
],
|
||||
|
||||
/*
|
||||
* Determines if symlinks should be followed.
|
||||
*/
|
||||
'follow_links' => false,
|
||||
|
||||
/*
|
||||
* Determines if it should avoid unreadable folders.
|
||||
*/
|
||||
'ignore_unreadable_directories' => false,
|
||||
|
||||
/*
|
||||
* This path is used to make directories in resulting zip-file relative
|
||||
* Set to `null` to include complete absolute path
|
||||
* Example: base_path()
|
||||
*/
|
||||
'relative_path' => null,
|
||||
],
|
||||
|
||||
/*
|
||||
* The names of the connections to the databases that should be backed up
|
||||
* MySQL, PostgreSQL, SQLite and Mongo databases are supported.
|
||||
*
|
||||
* The content of the database dump may be customized for each connection
|
||||
* by adding a 'dump' key to the connection settings in config/database.php.
|
||||
* E.g.
|
||||
* 'mysql' => [
|
||||
* ...
|
||||
* 'dump' => [
|
||||
* 'excludeTables' => [
|
||||
* 'table_to_exclude_from_backup',
|
||||
* 'another_table_to_exclude'
|
||||
* ]
|
||||
* ],
|
||||
* ],
|
||||
*
|
||||
* If you are using only InnoDB tables on a MySQL server, you can
|
||||
* also supply the useSingleTransaction option to avoid table locking.
|
||||
*
|
||||
* E.g.
|
||||
* 'mysql' => [
|
||||
* ...
|
||||
* 'dump' => [
|
||||
* 'useSingleTransaction' => true,
|
||||
* ],
|
||||
* ],
|
||||
*
|
||||
* For a complete list of available customization options, see https://github.com/spatie/db-dumper
|
||||
*/
|
||||
'databases' => [
|
||||
env('DB_CONNECTION', 'mysql'),
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
* The database dump can be compressed to decrease disk space usage.
|
||||
*
|
||||
* Out of the box Laravel-backup supplies
|
||||
* Spatie\DbDumper\Compressors\GzipCompressor::class.
|
||||
*
|
||||
* You can also create custom compressor. More info on that here:
|
||||
* https://github.com/spatie/db-dumper#using-compression
|
||||
*
|
||||
* If you do not want any compressor at all, set it to null.
|
||||
*/
|
||||
'database_dump_compressor' => null,
|
||||
|
||||
/*
|
||||
* If specified, the database dumped file name will contain a timestamp (e.g.: 'Y-m-d-H-i-s').
|
||||
*/
|
||||
'database_dump_file_timestamp_format' => null,
|
||||
|
||||
/*
|
||||
* The base of the dump filename, either 'database' or 'connection'
|
||||
*
|
||||
* If 'database' (default), the dumped filename will contain the database name.
|
||||
* If 'connection', the dumped filename will contain the connection name.
|
||||
*/
|
||||
'database_dump_filename_base' => 'database',
|
||||
|
||||
/*
|
||||
* The file extension used for the database dump files.
|
||||
*
|
||||
* If not specified, the file extension will be .archive for MongoDB and .sql for all other databases
|
||||
* The file extension should be specified without a leading .
|
||||
*/
|
||||
'database_dump_file_extension' => '',
|
||||
|
||||
'destination' => [
|
||||
/*
|
||||
* The compression algorithm to be used for creating the zip archive.
|
||||
*
|
||||
* If backing up only database, you may choose gzip compression for db dump and no compression at zip.
|
||||
*
|
||||
* Some common algorithms are listed below:
|
||||
* ZipArchive::CM_STORE (no compression at all; set 0 as compression level)
|
||||
* ZipArchive::CM_DEFAULT
|
||||
* ZipArchive::CM_DEFLATE
|
||||
* ZipArchive::CM_BZIP2
|
||||
* ZipArchive::CM_XZ
|
||||
*
|
||||
* For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system.
|
||||
*/
|
||||
'compression_method' => ZipArchive::CM_DEFAULT,
|
||||
|
||||
/*
|
||||
* The compression level corresponding to the used algorithm; an integer between 0 and 9.
|
||||
*
|
||||
* Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression,
|
||||
* while 9 the slowest and strongest one.
|
||||
*
|
||||
* Setting of 0 for some algorithms may switch to the strongest compression.
|
||||
*/
|
||||
'compression_level' => 9,
|
||||
|
||||
/*
|
||||
* The filename prefix used for the backup zip file.
|
||||
*/
|
||||
'filename_prefix' => '',
|
||||
|
||||
/*
|
||||
* The disk names on which the backups will be stored.
|
||||
*/
|
||||
'disks' => [
|
||||
'local',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
* The directory where the temporary files will be stored.
|
||||
*/
|
||||
'temporary_directory' => storage_path('app/backup-temp'),
|
||||
|
||||
/*
|
||||
* The password to be used for archive encryption.
|
||||
* Set to `null` to disable encryption.
|
||||
*/
|
||||
'password' => env('BACKUP_ARCHIVE_PASSWORD'),
|
||||
|
||||
/*
|
||||
* The encryption algorithm to be used for archive encryption.
|
||||
* You can set it to `null` or `false` to disable encryption.
|
||||
*
|
||||
* When set to 'default', we'll use ZipArchive::EM_AES_256 if it is
|
||||
* available on your system.
|
||||
*/
|
||||
'encryption' => 'default',
|
||||
|
||||
/*
|
||||
* The number of attempts, in case the backup command encounters an exception
|
||||
*/
|
||||
'tries' => 1,
|
||||
|
||||
/*
|
||||
* The number of seconds to wait before attempting a new backup if the previous try failed
|
||||
* Set to `0` for none
|
||||
*/
|
||||
'retry_delay' => 0,
|
||||
],
|
||||
|
||||
/*
|
||||
* You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.
|
||||
* For Slack you need to install laravel/slack-notification-channel.
|
||||
*
|
||||
* You can also use your own notification classes, just make sure the class is named after one of
|
||||
* the `Spatie\Backup\Notifications\Notifications` classes.
|
||||
*/
|
||||
'notifications' => [
|
||||
'notifications' => [
|
||||
\Spatie\Backup\Notifications\Notifications\BackupHasFailedNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFoundNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupHasFailedNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessfulNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFoundNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessfulNotification::class => ['mail'],
|
||||
],
|
||||
|
||||
/*
|
||||
* Here you can specify the notifiable to which the notifications should be sent. The default
|
||||
* notifiable will use the variables specified in this config file.
|
||||
*/
|
||||
'notifiable' => \Spatie\Backup\Notifications\Notifiable::class,
|
||||
|
||||
'mail' => [
|
||||
'to' => '[email protected]',
|
||||
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
|
||||
'name' => env('MAIL_FROM_NAME', 'Example'),
|
||||
],
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'webhook_url' => '',
|
||||
|
||||
/*
|
||||
* If this is set to null the default channel of the webhook will be used.
|
||||
*/
|
||||
'channel' => null,
|
||||
|
||||
'username' => null,
|
||||
|
||||
'icon' => null,
|
||||
],
|
||||
|
||||
'discord' => [
|
||||
'webhook_url' => '',
|
||||
|
||||
/*
|
||||
* If this is an empty string, the name field on the webhook will be used.
|
||||
*/
|
||||
'username' => '',
|
||||
|
||||
/*
|
||||
* If this is an empty string, the avatar on the webhook will be used.
|
||||
*/
|
||||
'avatar_url' => '',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
* Here you can specify which backups should be monitored.
|
||||
* If a backup does not meet the specified requirements the
|
||||
* UnHealthyBackupWasFound event will be fired.
|
||||
*/
|
||||
'monitor_backups' => [
|
||||
[
|
||||
'name' => env('APP_NAME', 'laravel-backup'),
|
||||
'disks' => ['local'],
|
||||
'health_checks' => [
|
||||
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
|
||||
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
[
|
||||
'name' => 'name of the second app',
|
||||
'disks' => ['local', 's3'],
|
||||
'health_checks' => [
|
||||
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
|
||||
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
|
||||
],
|
||||
],
|
||||
*/
|
||||
],
|
||||
|
||||
'cleanup' => [
|
||||
/*
|
||||
* The strategy that will be used to cleanup old backups. The default strategy
|
||||
* will keep all backups for a certain amount of days. After that period only
|
||||
* a daily backup will be kept. After that period only weekly backups will
|
||||
* be kept and so on.
|
||||
*
|
||||
* No matter how you configure it the default strategy will never
|
||||
* delete the newest backup.
|
||||
*/
|
||||
'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
|
||||
'default_strategy' => [
|
||||
/*
|
||||
* The number of days for which backups must be kept.
|
||||
*/
|
||||
'keep_all_backups_for_days' => 7,
|
||||
|
||||
/*
|
||||
* After the "keep_all_backups_for_days" period is over, the most recent backup
|
||||
* of that day will be kept. Older backups within the same day will be removed.
|
||||
* If you create backups only once a day, no backups will be removed yet.
|
||||
*/
|
||||
'keep_daily_backups_for_days' => 16,
|
||||
|
||||
/*
|
||||
* After the "keep_daily_backups_for_days" period is over, the most recent backup
|
||||
* of that week will be kept. Older backups within the same week will be removed.
|
||||
* If you create backups only once a week, no backups will be removed yet.
|
||||
*/
|
||||
'keep_weekly_backups_for_weeks' => 8,
|
||||
|
||||
/*
|
||||
* After the "keep_weekly_backups_for_weeks" period is over, the most recent backup
|
||||
* of that month will be kept. Older backups within the same month will be removed.
|
||||
*/
|
||||
'keep_monthly_backups_for_months' => 4,
|
||||
|
||||
/*
|
||||
* After the "keep_monthly_backups_for_months" period is over, the most recent backup
|
||||
* of that year will be kept. Older backups within the same year will be removed.
|
||||
*/
|
||||
'keep_yearly_backups_for_years' => 2,
|
||||
|
||||
/*
|
||||
* After cleaning up the backups remove the oldest backup until
|
||||
* this amount of megabytes has been reached.
|
||||
* Set null for unlimited size.
|
||||
*/
|
||||
'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
|
||||
],
|
||||
|
||||
/*
|
||||
* The number of attempts, in case the cleanup command encounters an exception
|
||||
*/
|
||||
'tries' => 1,
|
||||
|
||||
/*
|
||||
* The number of seconds to wait before attempting a new cleanup if the previous try failed
|
||||
* Set to `0` for none
|
||||
*/
|
||||
'retry_delay' => 0,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -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'),
|
||||
];
|
||||
@@ -58,9 +58,6 @@ return [
|
||||
'prefix_indexes'=> true,
|
||||
'strict' => false,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'pgsql' => [
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?php
|
||||
return [
|
||||
'Title' => 'LIS',
|
||||
'namaapps' => 'Laboratory Information System',
|
||||
'Title' => 'MyLIS-RSSA',
|
||||
'namaapps' => 'Mikrobiologi Information System',
|
||||
'domainapps' => 'RSUD Dr. Saiful Anwar',
|
||||
'subdomainapps' => 'Kota Malang',
|
||||
'subsubdomainapps' => 'Jawa Timur',
|
||||
'addressapps' => 'Jl. Lamandau 18A Bunulrejo Blimbing Malang',
|
||||
'kota' => 'Lumajang',
|
||||
'kota' => 'Malang',
|
||||
'emailapps' => '[email protected]',
|
||||
'lamanapps' => 'https://lis.swandhana.test',
|
||||
'lamanapps' => 'https://mylis.rssa.id',
|
||||
'logofrontapps' => 'header.png',
|
||||
];
|
||||
?>
|
||||
+309
-123
@@ -1,146 +1,332 @@
|
||||
<?php
|
||||
|
||||
use Arcanedev\LogViewer\Contracts\Utilities\Filesystem;
|
||||
use Opcodes\LogViewer\Enums\SortingMethod;
|
||||
use Opcodes\LogViewer\Enums\SortingOrder;
|
||||
use Opcodes\LogViewer\Enums\Theme;
|
||||
|
||||
return [
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Log files storage path
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer can be disabled, so it's no longer accessible via browser.
|
||||
|
|
||||
*/
|
||||
|
||||
'storage-path' => storage_path('logs'),
|
||||
'enabled' => env('LOG_VIEWER_ENABLED', true),
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Log files pattern
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
'api_only' => env('LOG_VIEWER_API_ONLY', false),
|
||||
|
||||
'pattern' => [
|
||||
'prefix' => Filesystem::PATTERN_PREFIX, // 'laravel-'
|
||||
'date' => Filesystem::PATTERN_DATE, // '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
|
||||
'extension' => Filesystem::PATTERN_EXTENSION, // '.log'
|
||||
'require_auth_in_production' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer Domain
|
||||
|--------------------------------------------------------------------------
|
||||
| You may change the domain where Log Viewer should be active.
|
||||
| If the domain is empty, all domains will be valid.
|
||||
|
|
||||
*/
|
||||
|
||||
'route_domain' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer Route
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer will be available under this URL.
|
||||
|
|
||||
*/
|
||||
|
||||
'route_path' => 'log-viewer',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer Assets Path
|
||||
|--------------------------------------------------------------------------
|
||||
| The path to the Log Viewer assets.
|
||||
|
|
||||
*/
|
||||
|
||||
'assets_path' => 'vendor/log-viewer',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Back to system URL
|
||||
|--------------------------------------------------------------------------
|
||||
| When set, displays a link to easily get back to this URL.
|
||||
| Set to `null` to hide this link.
|
||||
|
|
||||
| Optional label to display for the above URL.
|
||||
|
|
||||
*/
|
||||
|
||||
'back_to_system_url' => config('app.url', null),
|
||||
|
||||
'back_to_system_label' => null, // Displayed by default: "Back to {{ app.name }}"
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer time zone.
|
||||
|--------------------------------------------------------------------------
|
||||
| The time zone in which to display the times in the UI. Defaults to
|
||||
| the application's timezone defined in config/app.php.
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer datetime format.
|
||||
|--------------------------------------------------------------------------
|
||||
| The format used to display timestamps in the UI.
|
||||
|
|
||||
*/
|
||||
|
||||
'datetime_format' => 'Y-m-d H:i:s',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer route middleware.
|
||||
|--------------------------------------------------------------------------
|
||||
| Optional middleware to use when loading the initial Log Viewer page.
|
||||
|
|
||||
*/
|
||||
|
||||
'middleware' => [
|
||||
'web',
|
||||
\Opcodes\LogViewer\Http\Middleware\AuthorizeLogViewer::class,
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Locale
|
||||
| -----------------------------------------------------------------
|
||||
| Supported locales :
|
||||
| 'auto', 'ar', 'bg', 'de', 'en', 'es', 'et', 'fa', 'fr', 'hu', 'hy', 'id', 'it', 'ja', 'ko', 'nl',
|
||||
| 'pl', 'pt-BR', 'ro', 'ru', 'sv', 'th', 'tr', 'zh-TW', 'zh'
|
||||
*/
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer API middleware.
|
||||
|--------------------------------------------------------------------------
|
||||
| Optional middleware to use on every API request. The same API is also
|
||||
| used from within the Log Viewer user interface.
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => 'auto',
|
||||
'api_middleware' => [
|
||||
\Opcodes\LogViewer\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||
\Opcodes\LogViewer\Http\Middleware\AuthorizeLogViewer::class,
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Theme
|
||||
| -----------------------------------------------------------------
|
||||
| Supported themes :
|
||||
| 'bootstrap-5'
|
||||
| 'bootstrap-4'
|
||||
| 'bootstrap-3'
|
||||
|
|
||||
| You can make your own theme by adding a folder to the views directory and specifying it here.
|
||||
*/
|
||||
'api_stateful_domains' => env('LOG_VIEWER_API_STATEFUL_DOMAINS') ? explode(',', env('LOG_VIEWER_API_STATEFUL_DOMAINS')) : null,
|
||||
|
||||
'theme' => 'bootstrap-5',
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer Remote hosts.
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer supports viewing Laravel logs from remote hosts. They must
|
||||
| be running Log Viewer as well. Below you can define the hosts you
|
||||
| would like to show in this Log Viewer instance.
|
||||
|
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Route settings
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'route' => [
|
||||
'enabled' => true,
|
||||
|
||||
'attributes' => [
|
||||
'prefix' => 'log-viewer',
|
||||
|
||||
'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : null,
|
||||
'hosts' => [
|
||||
'local' => [
|
||||
'name' => ucfirst(env('APP_ENV', 'local')),
|
||||
],
|
||||
|
||||
'show' => 'log-viewer::logs.show'
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Log entries per page
|
||||
| -----------------------------------------------------------------
|
||||
| This defines how many logs & entries are displayed per page.
|
||||
*/
|
||||
|
||||
'per-page' => 30,
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Download settings
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'download' => [
|
||||
'prefix' => 'laravel-',
|
||||
|
||||
'extension' => 'log',
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Menu settings
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'menu' => [
|
||||
'filter-route' => 'log-viewer::logs.filter',
|
||||
|
||||
'icons-enabled' => true,
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Icons
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'icons' => [
|
||||
/**
|
||||
* Font awesome >= 4.3
|
||||
* http://fontawesome.io/icons/
|
||||
*/
|
||||
'all' => 'fa fa-fw fa-list', // http://fontawesome.io/icon/list/
|
||||
'emergency' => 'fa fa-fw fa-bug', // http://fontawesome.io/icon/bug/
|
||||
'alert' => 'fa fa-fw fa-bullhorn', // http://fontawesome.io/icon/bullhorn/
|
||||
'critical' => 'fa fa-fw fa-heartbeat', // http://fontawesome.io/icon/heartbeat/
|
||||
'error' => 'fa fa-fw fa-times-circle', // http://fontawesome.io/icon/times-circle/
|
||||
'warning' => 'fa fa-fw fa-exclamation-triangle', // http://fontawesome.io/icon/exclamation-triangle/
|
||||
'notice' => 'fa fa-fw fa-exclamation-circle', // http://fontawesome.io/icon/exclamation-circle/
|
||||
'info' => 'fa fa-fw fa-info-circle', // http://fontawesome.io/icon/info-circle/
|
||||
'debug' => 'fa fa-fw fa-life-ring', // http://fontawesome.io/icon/life-ring/
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Colors
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'colors' => [
|
||||
'levels' => [
|
||||
'empty' => '#D1D1D1',
|
||||
'all' => '#8A8A8A',
|
||||
'emergency' => '#B71C1C',
|
||||
'alert' => '#D32F2F',
|
||||
'critical' => '#F44336',
|
||||
'error' => '#FF5722',
|
||||
'warning' => '#FF9100',
|
||||
'notice' => '#4CAF50',
|
||||
'info' => '#1976D2',
|
||||
'debug' => '#90CAF9',
|
||||
// 'staging' => [
|
||||
// 'name' => 'Staging',
|
||||
// 'host' => 'https://staging.example.com/log-viewer',
|
||||
// 'auth' => [ // Example of HTTP Basic auth
|
||||
// 'username' => 'username',
|
||||
// 'password' => 'password',
|
||||
// ],
|
||||
// 'verify_server_certificate' => true,
|
||||
// ],
|
||||
//
|
||||
'production' => [
|
||||
'name' => 'Production',
|
||||
'host' => 'https://example.com/log-viewer',
|
||||
'auth' => [
|
||||
'token' => env('LOG_VIEWER_PRODUCTION_TOKEN'),
|
||||
],
|
||||
'headers' => [
|
||||
'X-Foo' => 'Bar',
|
||||
],
|
||||
'verify_server_certificate' => true,
|
||||
],
|
||||
],
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Strings to highlight in stack trace
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Include file patterns
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
*/
|
||||
|
||||
'highlight' => [
|
||||
'^#\d+',
|
||||
'^Stack trace:',
|
||||
'include_files' => [
|
||||
'*.log',
|
||||
'**/*.log',
|
||||
|
||||
// You can include paths to other log types as well, such as apache, nginx, and more.
|
||||
// This key => value pair can be used to rename and group multiple paths into one folder in the UI.
|
||||
'/var/log/httpd/*' => 'Apache',
|
||||
'/var/log/nginx/*' => 'Nginx',
|
||||
|
||||
// MacOS Apple Silicon logs
|
||||
'/opt/homebrew/var/log/nginx/*',
|
||||
'/opt/homebrew/var/log/httpd/*',
|
||||
'/opt/homebrew/var/log/php-fpm.log',
|
||||
'/opt/homebrew/var/log/postgres*log',
|
||||
'/opt/homebrew/var/log/redis*log',
|
||||
'/opt/homebrew/var/log/supervisor*log',
|
||||
|
||||
// '/absolute/paths/supported',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Exclude file patterns.
|
||||
|--------------------------------------------------------------------------
|
||||
| This will take precedence over included files.
|
||||
|
|
||||
*/
|
||||
|
||||
'exclude_files' => [
|
||||
// 'my_secret.log'
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Hide unknown files.
|
||||
|--------------------------------------------------------------------------
|
||||
| The include/exclude options above might catch files which are not
|
||||
| logs supported by Log Viewer. In that case, you can hide them
|
||||
| from the UI and API calls by setting this to true.
|
||||
|
|
||||
*/
|
||||
|
||||
'hide_unknown_files' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shorter stack trace filters.
|
||||
|--------------------------------------------------------------------------
|
||||
| Lines containing any of these strings will be excluded from the full log.
|
||||
| This setting is only active when the function is enabled via the user interface.
|
||||
|
|
||||
*/
|
||||
|
||||
'shorter_stack_trace_excludes' => [
|
||||
'/vendor/symfony/',
|
||||
'/vendor/laravel/framework/',
|
||||
'/vendor/barryvdh/laravel-debugbar/',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache driver
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache driver to use for storing the log indices. Indices are used to speed up
|
||||
| log navigation. Defaults to your application's default cache driver.
|
||||
|
|
||||
*/
|
||||
|
||||
'cache_driver' => env('LOG_VIEWER_CACHE_DRIVER', null),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache key prefix
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer prefixes all the cache keys created with this value. If for
|
||||
| some reason you would like to change this prefix, you can do so here.
|
||||
| The format of Log Viewer cache keys is:
|
||||
| {prefix}:{version}:{rest-of-the-key}
|
||||
|
|
||||
*/
|
||||
|
||||
'cache_key_prefix' => 'lv',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Chunk size when scanning log files lazily
|
||||
|--------------------------------------------------------------------------
|
||||
| The size in MB of files to scan before updating the progress bar when searching across all files.
|
||||
|
|
||||
*/
|
||||
|
||||
'lazy_scan_chunk_size_in_mb' => 50,
|
||||
|
||||
'strip_extracted_context' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Per page options
|
||||
|--------------------------------------------------------------------------
|
||||
| Define the available options for number of results per page
|
||||
|
|
||||
*/
|
||||
|
||||
'per_page_options' => [10, 25, 50, 100, 250, 500],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default settings for Log Viewer
|
||||
|--------------------------------------------------------------------------
|
||||
| These settings determine the default behaviour of Log Viewer. Many of
|
||||
| these can be persisted for the user in their browser's localStorage,
|
||||
| if the `use_local_storage` option is set to true.
|
||||
|
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
|
||||
// Whether to use browser's localStorage to store user preferences.
|
||||
// If true, user preferences saved in the browser will take precedence over the defaults below.
|
||||
'use_local_storage' => true,
|
||||
|
||||
// Method to sort the folders. Other options: `Alphabetical`, `ModifiedTime`
|
||||
'folder_sorting_method' => SortingMethod::ModifiedTime,
|
||||
|
||||
// Order to sort the folders. Other options: `Ascending`, `Descending`
|
||||
'folder_sorting_order' => SortingOrder::Descending,
|
||||
|
||||
// Method for sorting log-files into directories. Other options: `Alphabetical`, `ModifiedTime`
|
||||
'file_sorting_method' => SortingMethod::ModifiedTime,
|
||||
|
||||
// Order to sort the logs. Other options: `Ascending`, `Descending`
|
||||
'log_sorting_order' => SortingOrder::Descending,
|
||||
|
||||
// Number of results per page. Must be one of the above `per_page_options` values
|
||||
'per_page' => 25,
|
||||
|
||||
// Color scheme for the Log Viewer. Other options: `System`, `Light`, `Dark`
|
||||
'theme' => Theme::System,
|
||||
|
||||
// Whether to enable `Shorter Stack Traces` option by default
|
||||
'shorter_stack_traces' => false,
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Exclude IP from identifiers
|
||||
|--------------------------------------------------------------------------
|
||||
| By default, file and folder identifiers include the server's IP address
|
||||
| to ensure uniqueness. In load-balanced environments with shared storage,
|
||||
| this can cause "No results" errors. Set to true to exclude IP addresses
|
||||
| from identifier generation for consistent results across servers.
|
||||
|
|
||||
*/
|
||||
|
||||
'exclude_ip_from_identifiers' => env('LOG_VIEWER_EXCLUDE_IP_FROM_IDENTIFIERS', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Root folder prefix
|
||||
|--------------------------------------------------------------------------
|
||||
| The prefix for log files inside Laravel's `storage/logs` folder.
|
||||
| Log Viewer does not show the full path to these files in the UI,
|
||||
| but only the filename prefixed with this value.
|
||||
|
|
||||
*/
|
||||
|
||||
'root_folder_prefix' => 'root',
|
||||
];
|
||||
@@ -18,7 +18,7 @@ return new class extends Migration
|
||||
$table->string('jk', 1)->nullable();
|
||||
$table->date('tgl_lahir')->nullable();
|
||||
$table->string('kota', 50)->nullable();
|
||||
$table->string('alamat', 100)->nullable();
|
||||
$table->text('alamat')->nullable();
|
||||
$table->string('telpon', 50)->nullable();
|
||||
$table->string('nik', 50)->nullable();
|
||||
$table->string('bpjs', 50)->nullable();
|
||||
|
||||
@@ -15,6 +15,7 @@ return new class extends Migration
|
||||
$table->id();
|
||||
$table->timestamp('mulai')->nullable();
|
||||
$table->timestamp('akhir')->nullable();
|
||||
$table->string('orderid', 255)->nullable();
|
||||
$table->string('nofoto', 50)->nullable();
|
||||
$table->integer('noloket')->nullable();
|
||||
$table->string('noregister', 150)->nullable();
|
||||
@@ -25,7 +26,7 @@ return new class extends Migration
|
||||
$table->string('jkpasien', 5)->nullable();
|
||||
$table->date('tgllahirpasien')->nullable();
|
||||
$table->string('tlppasien', 50)->nullable();
|
||||
$table->string('alamatpasien', 50)->nullable();
|
||||
$table->text('alamatpasien')->nullable();
|
||||
$table->string('reques', 150)->nullable();
|
||||
$table->string('usia', 25)->nullable();
|
||||
$table->string('ktp', 25)->nullable();
|
||||
@@ -50,7 +51,7 @@ return new class extends Migration
|
||||
$table->string('nmanalis', 250)->nullable();
|
||||
$table->string('nmexcutor', 250)->nullable();
|
||||
$table->string('klinisi', 250)->nullable();
|
||||
$table->string('klinis', 250)->nullable();
|
||||
$table->text('klinis')->nullable();
|
||||
$table->integer('poli_id')->nullable();
|
||||
$table->text('keterangan')->nullable();
|
||||
$table->text('kesimpulan')->nullable();
|
||||
|
||||
@@ -17,6 +17,7 @@ return new class extends Migration
|
||||
$table->string('subpoli', 250)->nullable();
|
||||
$table->string('subsubpoli', 250)->nullable();
|
||||
$table->string('modaliti', 150)->nullable();
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
$table->string('modaliti2', 150)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
|
||||
@@ -18,6 +18,8 @@ class CreateOrganismsTable extends Migration
|
||||
$table->string('name');
|
||||
$table->string('category');
|
||||
$table->string('kelompok');
|
||||
$table->string('satuan')->nullable();
|
||||
$table->string('nilai')->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
|
||||
@@ -18,13 +18,15 @@ return new class extends Migration
|
||||
$table->string('antibiotik', 150)->nullable();
|
||||
$table->string('subantibiotik', 150)->nullable();
|
||||
$table->string('diskcontent', 100)->nullable();
|
||||
$table->integer('batasatas')->nullable();
|
||||
$table->string('batasatas', 150)->nullable();
|
||||
$table->string('midrange', 150)->nullable();
|
||||
$table->integer('batasbawah')->nullable();
|
||||
$table->string('batasbawah', 150)->nullable();
|
||||
$table->string('sumber', 255)->nullable();
|
||||
$table->string('kodedok', 50)->nullable();
|
||||
$table->string('atu', 50)->nullable();
|
||||
$table->string('kelompok', 50)->nullable();
|
||||
$table->integer('cek')->nullable();
|
||||
$table->string('setmanual', 255)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
|
||||
@@ -13,12 +13,18 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('rekapantibiotik', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('kuman', 255)->nullable();
|
||||
$table->string('antibiotic', 150)->nullable();
|
||||
$table->string('resistance', 150)->nullable();
|
||||
$table->string('value', 150)->nullable();
|
||||
$table->string('interpretation', 150)->nullable();
|
||||
$table->string('glassreportname', 150)->nullable();
|
||||
$table->integer('orderid')->nullable();
|
||||
$table->boolean('printrow')->nullable();
|
||||
$table->boolean('printcol')->nullable();
|
||||
$table->string('batasatas', 150)->nullable();
|
||||
$table->string('midrange', 150)->nullable();
|
||||
$table->string('batasbawah', 150)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('db_komponenjawaban', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('accnumber', 100)->nullable();
|
||||
$table->string('template', 100)->nullable();
|
||||
$table->string('komponen', 255)->nullable();
|
||||
$table->text('isidata')->nullable();
|
||||
$table->string('nobiorepository', 100)->nullable();
|
||||
$table->string('strain', 255)->nullable();
|
||||
$table->string('atcc', 255)->nullable();
|
||||
$table->string('sample', 255)->nullable();
|
||||
$table->date('tglpenyimpanan', 100)->nullable();
|
||||
$table->string('created_by', 255)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('db_komponenjawaban');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('pertumkolomni', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('orderid')->nullable();
|
||||
$table->date('tglpenyimpanan', 100)->nullable();
|
||||
$table->string('media', 100)->nullable();
|
||||
$table->string('kuman', 100)->nullable();
|
||||
$table->string('hemolisa', 255)->nullable();
|
||||
$table->string('katalase', 255)->nullable();
|
||||
$table->string('koagulase', 255)->nullable();
|
||||
$table->string('oksidase', 255)->nullable();
|
||||
$table->string('lainnya', 255)->nullable();
|
||||
$table->string('status', 255)->nullable();
|
||||
$table->string('tindaklanjut', 255)->nullable();
|
||||
$table->string('created_by', 255)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('pertumkolomni');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('bio_cabinets', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('code', 50)->unique();
|
||||
$table->string('name', 150);
|
||||
$table->string('location', 200)->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('bio_cabinets');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('bio_racks', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('cabinet_id')->index();
|
||||
$table->string('code', 50);
|
||||
$table->string('name', 150);
|
||||
$table->integer('level')->default(1);
|
||||
$table->integer('capacity')->default(0);
|
||||
$table->text('notes')->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
|
||||
$table->unique(['cabinet_id', 'code']);
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('bio_racks');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('bio_specimens', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('cabinet_id')->index();
|
||||
$table->unsignedBigInteger('rack_id')->index();
|
||||
$table->string('specimen_code', 100)->unique();
|
||||
$table->string('specimen_name', 200);
|
||||
$table->string('patient_name', 200)->nullable();
|
||||
$table->date('collected_at')->nullable();
|
||||
$table->date('stored_at');
|
||||
$table->string('volume', 50)->nullable();
|
||||
$table->string('storage_condition', 100)->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('bio_specimens');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('bio_racks', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('bio_racks', 'rack_number')) {
|
||||
$table->integer('rack_number')->nullable()->after('level');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_racks', 'box_number')) {
|
||||
$table->integer('box_number')->nullable()->after('rack_number');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('bio_specimens', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('bio_specimens', 'category_storage')) {
|
||||
$table->string('category_storage', 1)->nullable()->after('specimen_name');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'shelf_number')) {
|
||||
$table->integer('shelf_number')->nullable()->after('category_storage');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'rack_number')) {
|
||||
$table->integer('rack_number')->nullable()->after('shelf_number');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'slot_number')) {
|
||||
$table->integer('slot_number')->nullable()->after('rack_number');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'box_number')) {
|
||||
$table->integer('box_number')->nullable()->after('slot_number');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'tube_number')) {
|
||||
$table->integer('tube_number')->nullable()->after('box_number');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'bacteria_name')) {
|
||||
$table->string('bacteria_name', 200)->nullable()->after('tube_number');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'strain')) {
|
||||
$table->string('strain', 50)->nullable()->after('bacteria_name');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'atcc')) {
|
||||
$table->string('atcc', 150)->nullable()->after('strain');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'input_by')) {
|
||||
$table->string('input_by', 150)->nullable()->after('atcc');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('bio_racks', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('bio_racks', 'rack_number')) {
|
||||
$table->dropColumn('rack_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_racks', 'box_number')) {
|
||||
$table->dropColumn('box_number');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('bio_specimens', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('bio_specimens', 'category_storage')) {
|
||||
$table->dropColumn('category_storage');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'shelf_number')) {
|
||||
$table->dropColumn('shelf_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'rack_number')) {
|
||||
$table->dropColumn('rack_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'slot_number')) {
|
||||
$table->dropColumn('slot_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'box_number')) {
|
||||
$table->dropColumn('box_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'tube_number')) {
|
||||
$table->dropColumn('tube_number');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'bacteria_name')) {
|
||||
$table->dropColumn('bacteria_name');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'strain')) {
|
||||
$table->dropColumn('strain');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'atcc')) {
|
||||
$table->dropColumn('atcc');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'input_by')) {
|
||||
$table->dropColumn('input_by');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('simbhpjenis', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('simbhpjenis', 'satuan_kecil')) {
|
||||
$table->string('satuan_kecil', 100)->nullable()->after('satuan');
|
||||
}
|
||||
if (!Schema::hasColumn('simbhpjenis', 'konversi_kecil')) {
|
||||
$table->integer('konversi_kecil')->default(1)->after('satuan_kecil');
|
||||
}
|
||||
if (!Schema::hasColumn('simbhpjenis', 'stok_minimum')) {
|
||||
$table->integer('stok_minimum')->default(0)->after('konversi_kecil');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('simbhpreport', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('simbhpreport', 'qty_base')) {
|
||||
$table->integer('qty_base')->nullable()->after('pengeluaran');
|
||||
}
|
||||
if (!Schema::hasColumn('simbhpreport', 'satuan_transaksi')) {
|
||||
$table->string('satuan_transaksi', 20)->nullable()->after('qty_base');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('simbhpreport', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('simbhpreport', 'qty_base')) {
|
||||
$table->dropColumn('qty_base');
|
||||
}
|
||||
if (Schema::hasColumn('simbhpreport', 'satuan_transaksi')) {
|
||||
$table->dropColumn('satuan_transaksi');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('simbhpjenis', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('simbhpjenis', 'satuan_kecil')) {
|
||||
$table->dropColumn('satuan_kecil');
|
||||
}
|
||||
if (Schema::hasColumn('simbhpjenis', 'konversi_kecil')) {
|
||||
$table->dropColumn('konversi_kecil');
|
||||
}
|
||||
if (Schema::hasColumn('simbhpjenis', 'stok_minimum')) {
|
||||
$table->dropColumn('stok_minimum');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('simbhpreport', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('simbhpreport', 'masa_expired')) {
|
||||
$table->date('masa_expired')->nullable()->after('satuan_transaksi');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('simbhpreport', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('simbhpreport', 'masa_expired')) {
|
||||
$table->dropColumn('masa_expired');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('rekap_penerimaan_sample_print_histories', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->date('tanggal')->nullable();
|
||||
$table->integer('printed_by_id')->nullable();
|
||||
$table->string('printed_by_name', 250)->nullable();
|
||||
$table->timestamp('printed_at')->nullable();
|
||||
$table->text('row_ids')->nullable();
|
||||
$table->longText('rows_payload')->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('rekap_penerimaan_sample_print_histories');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('critical_value_samples', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('periksa_id')->unique();
|
||||
$table->string('nofoto', 50)->nullable();
|
||||
$table->string('noregister', 150)->nullable();
|
||||
$table->string('nmpasien', 200)->nullable();
|
||||
$table->string('nm_spesimen', 255)->nullable();
|
||||
$table->timestamp('critical_set_at')->nullable();
|
||||
$table->unsignedBigInteger('critical_set_by_user_id')->nullable();
|
||||
$table->string('critical_set_by_name', 150)->nullable();
|
||||
$table->timestamp('followed_up_at')->nullable();
|
||||
$table->unsignedBigInteger('followed_up_by_user_id')->nullable();
|
||||
$table->string('followed_up_by_name', 150)->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index('nofoto');
|
||||
$table->index('critical_set_at');
|
||||
$table->index('followed_up_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('critical_value_samples');
|
||||
}
|
||||
};
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('critical_value_samples', function (Blueprint $table) {
|
||||
// Snapshot from periksa for easier listing.
|
||||
$table->string('asalpasien', 250)->nullable()->after('noregister');
|
||||
|
||||
// Follow-up details recorded when marking as read.
|
||||
$table->string('follow_up_status', 25)->nullable()->after('followed_up_by_name'); // reported|not_reported
|
||||
$table->string('follow_up_method', 50)->nullable()->after('follow_up_status');
|
||||
$table->string('follow_up_recipient', 250)->nullable()->after('follow_up_method');
|
||||
$table->string('follow_up_reason', 250)->nullable()->after('follow_up_recipient');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('critical_value_samples', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
'asalpasien',
|
||||
'follow_up_status',
|
||||
'follow_up_method',
|
||||
'follow_up_recipient',
|
||||
'follow_up_reason',
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('simbhpjenis', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('simbhpjenis', 'barcode_besar')) {
|
||||
$table->string('barcode_besar', 20)->nullable()->after('kodejenis');
|
||||
}
|
||||
if (!Schema::hasColumn('simbhpjenis', 'barcode_kecil')) {
|
||||
$table->string('barcode_kecil', 20)->nullable()->after('barcode_besar');
|
||||
}
|
||||
});
|
||||
|
||||
if (!Schema::hasColumn('simbhpjenis', 'barcode_besar')) {
|
||||
return;
|
||||
}
|
||||
|
||||
DB::table('simbhpjenis')
|
||||
->orderBy('id', 'ASC')
|
||||
->chunkById(200, function ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
$id = (int) ($row->id ?? 0);
|
||||
if ($id <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$idPart = str_pad((string) $id, 8, '0', STR_PAD_LEFT);
|
||||
$barcodeBesar = '91' . $idPart . '1';
|
||||
|
||||
$existingBesar = isset($row->barcode_besar) ? trim((string) $row->barcode_besar) : '';
|
||||
$existingKecil = isset($row->barcode_kecil) ? trim((string) $row->barcode_kecil) : '';
|
||||
|
||||
$satuanKecil = isset($row->satuan_kecil) ? trim((string) $row->satuan_kecil) : '';
|
||||
$konversi = (int) ($row->konversi_kecil ?? 1);
|
||||
if ($konversi <= 0) {
|
||||
$konversi = 1;
|
||||
}
|
||||
$hasBreakdown = ($satuanKecil !== '' && $konversi > 1);
|
||||
|
||||
$update = [];
|
||||
if ($existingBesar === '') {
|
||||
$update['barcode_besar'] = $barcodeBesar;
|
||||
}
|
||||
|
||||
if ($hasBreakdown) {
|
||||
$barcodeKecil = '91' . $idPart . '2';
|
||||
if ($existingKecil === '') {
|
||||
$update['barcode_kecil'] = $barcodeKecil;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($update) > 0) {
|
||||
DB::table('simbhpjenis')->where('id', $id)->update($update);
|
||||
}
|
||||
}
|
||||
}, 'id');
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('simbhpjenis', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('simbhpjenis', 'barcode_kecil')) {
|
||||
$table->dropColumn('barcode_kecil');
|
||||
}
|
||||
if (Schema::hasColumn('simbhpjenis', 'barcode_besar')) {
|
||||
$table->dropColumn('barcode_besar');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('periksa', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('periksa', 'tanggalregis')) {
|
||||
$table->date('tanggalregis')->nullable()->after('tgladendum');
|
||||
}
|
||||
if (!Schema::hasColumn('periksa', 'tanggalsampel')) {
|
||||
$table->date('tanggalsampel')->nullable()->after('tanggalregis');
|
||||
}
|
||||
if (!Schema::hasColumn('periksa', 'pengambilan')) {
|
||||
$table->string('pengambilan', 255)->nullable()->after('diagnosa2');
|
||||
}
|
||||
});
|
||||
Schema::table('pertumkolomni', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('pertumkolomni', 'keterangan')) {
|
||||
$table->text('keterangan')->nullable()->after('tindaklanjut');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('periksa', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('periksa', 'tanggalregis')) {
|
||||
$table->dropColumn('tanggalregis');
|
||||
}
|
||||
if (Schema::hasColumn('periksa', 'tanggalsampel')) {
|
||||
$table->dropColumn('tanggalsampel');
|
||||
}
|
||||
if (Schema::hasColumn('periksa', 'pengambilan')) {
|
||||
$table->dropColumn('pengambilan');
|
||||
}
|
||||
});
|
||||
Schema::table('pertumkolomni', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('pertumkolomni', 'keterangan')) {
|
||||
$table->dropColumn('keterangan');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
|
||||
Schema::table('bio_specimens', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('bio_specimens', 'atcc')) {
|
||||
$table->string('atcc', 150)->nullable()->after('strain');
|
||||
}
|
||||
if (!Schema::hasColumn('bio_specimens', 'sampleid')) {
|
||||
$table->string('sampleid', 150)->nullable()->after('atcc');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('bio_specimens', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('bio_specimens', 'atcc')) {
|
||||
$table->dropColumn('atcc');
|
||||
}
|
||||
if (Schema::hasColumn('bio_specimens', 'sampleid')) {
|
||||
$table->dropColumn('sampleid');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
|
||||
Schema::table('periksa', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('periksa', 'asalpengirim')) {
|
||||
$table->string('asalpengirim', 150)->nullable()->after('order_id');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('periksa', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('periksa', 'asalpengirim')) {
|
||||
$table->dropColumn('asalpengirim');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('bio_racks', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('bio_racks', 'slot_count')) {
|
||||
$table->integer('slot_count')->default(1)->after('name');
|
||||
}
|
||||
});
|
||||
|
||||
DB::table('bio_racks')
|
||||
->where(function ($query) {
|
||||
$query->whereNull('slot_count')
|
||||
->orWhere('slot_count', '<=', 1);
|
||||
})
|
||||
->orderBy('id')
|
||||
->get(['id', 'level'])
|
||||
->each(function ($rack) {
|
||||
DB::table('bio_racks')
|
||||
->where('id', $rack->id)
|
||||
->update(['slot_count' => max((int) ($rack->level ?? 1), 1)]);
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('bio_racks', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('bio_racks', 'slot_count')) {
|
||||
$table->dropColumn('slot_count');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('poli', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('poli', 'kelompok')) {
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('poli', function (Blueprint $table) {
|
||||
if (Schema::hasColumn('poli', 'kelompok')) {
|
||||
$table->dropColumn('kelompok');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
if (!Schema::hasTable('poli')) {
|
||||
Schema::create('poli', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('poli', 250)->nullable();
|
||||
$table->string('subpoli', 250)->nullable();
|
||||
$table->string('subsubpoli', 250)->nullable();
|
||||
$table->string('modaliti', 150)->nullable();
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
$table->string('modaliti2', 150)->nullable();
|
||||
$table->timestamp('created_at')->nullable();
|
||||
$table->timestamp('updated_at')->nullable();
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Schema::table('poli', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('poli', 'poli')) {
|
||||
$table->string('poli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'subpoli')) {
|
||||
$table->string('subpoli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'subsubpoli')) {
|
||||
$table->string('subsubpoli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'modaliti')) {
|
||||
$table->string('modaliti', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'kelompok')) {
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'modaliti2')) {
|
||||
$table->string('modaliti2', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'created_at')) {
|
||||
$table->timestamp('created_at')->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'updated_at')) {
|
||||
$table->timestamp('updated_at')->nullable();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
// Kolom poli dipakai data production, rollback tidak menghapus kolom.
|
||||
}
|
||||
};
|
||||
@@ -4,6 +4,10 @@ namespace Database\Seeders;
|
||||
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Database\Seeders\JawabanSeeder;
|
||||
use Database\Seeders\OrganismSeeder;
|
||||
use Database\Seeders\SirabSeeder;
|
||||
use App\User;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
@@ -13,11 +17,48 @@ class DatabaseSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
User::create([
|
||||
'nama' => 'Administrator',
|
||||
'username' => 'admin',
|
||||
'password' => bcrypt('semangat'),
|
||||
'previlage' => 'developer'
|
||||
]);
|
||||
$ceksudah = User::where('username', 'admin')->count();
|
||||
if ($ceksudah == 0){
|
||||
User::create([
|
||||
'nama' => 'Administrator',
|
||||
'username' => 'admin',
|
||||
'password' => bcrypt('semangat'),
|
||||
'previlage' => 'developer',
|
||||
]);
|
||||
}
|
||||
$ceksudah = User::where('username', 'doktestes')->count();
|
||||
if ($ceksudah == 0){
|
||||
User::create([
|
||||
'nama' => 'doktestes',
|
||||
'username' => 'doktestes',
|
||||
'password' => bcrypt('doktestes'),
|
||||
'previlage' => 'supervisor',
|
||||
]);
|
||||
}
|
||||
$ceksudah = User::where('username', 'ppdstes')->count();
|
||||
if ($ceksudah == 0){
|
||||
User::create([
|
||||
'nama' => 'ppdstes',
|
||||
'username' => 'ppdstes',
|
||||
'password' => bcrypt('ppdstes'),
|
||||
'previlage' => 'ppds',
|
||||
]);
|
||||
}
|
||||
$ceksudah = User::where('username', 'analistes')->count();
|
||||
if ($ceksudah == 0){
|
||||
User::create([
|
||||
'nama' => 'analistes',
|
||||
'username' => 'analistes',
|
||||
'password' => bcrypt('analistes'),
|
||||
'previlage' => 'analis',
|
||||
]);
|
||||
}
|
||||
$json1 = file_get_contents(database_path('seeders/data/ruangan.json'));
|
||||
$data1 = json_decode($json1, true);
|
||||
DB::table('ruangan')->insert($data1);
|
||||
$this->call(JawabanSeeder::class);
|
||||
$this->call(OrganismSeeder::class);
|
||||
$this->call(SirabSeeder::class);
|
||||
$this->call(PoliSeeder::class);
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,324 @@ class JawabanSeeder extends Seeder
|
||||
['kategori' => '1', 'judul' => 'Pewarna Langsung', 'subjawaban' => '', 'kesimpulan' => ''],
|
||||
['kategori' => '1', 'judul' => 'TBC', 'subjawaban' => '', 'kesimpulan' => ''],
|
||||
['kategori' => '1', 'judul' => 'Viral Load', 'subjawaban' => '', 'kesimpulan' => ''],
|
||||
['kategori' => '1', 'judul' => 'PCR COVID', 'subjawaban' => '', 'kesimpulan' => '']
|
||||
['kategori' => '1', 'judul' => 'PCR COVID', 'subjawaban' => '', 'kesimpulan' => ''],
|
||||
['kategori' => '1', 'judul' => 'IgM IgG Leptospira', 'subjawaban' => '', 'kesimpulan' => '']
|
||||
]);
|
||||
DB::table('dokter')->insert([
|
||||
[ 'id' => 2, 'nama' => 'NON DOKTER', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'ND', 'alamat' => 'UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 196, 'nama' => 'Dr.dr.MOCHAMAD BACHTIAR BUDIANTO,Sp.B(K)Onk,FINACS,FICS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BO_003', 'alamat' => 'BEDAH ONKOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 231, 'nama' => 'dr.RATRI ISTIQOMAH,Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_006', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 344, 'nama' => 'dr.SYAIFULLAH ASMIRAGANI,Sp.OT. Subsp. O.T.B(K),MMRS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_002', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 361, 'nama' => 'Prof.Dr.dr.ACHMAD RUDIJANTO,Sp.PD-KEMD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_021', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 377, 'nama' => 'dr.ANGGUN PUTRI YUNIASWAN,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_011', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 389, 'nama' => 'dr.ARIF WIDIATMOKO,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_006', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 395, 'nama' => 'dr.AUNUR ROFIQ, Sp.DVE, Subsp.DAI,FINSDV,FAADV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_002', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 397, 'nama' => 'dr.AZIZA MATINU KARIMA,Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_007', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 398, 'nama' => 'dr.BADRUL MUNIR,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_010', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 400, 'nama' => 'dr.BAGUS PUTU PUTRA SURYANA,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_007', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 405, 'nama' => 'dr.BOGI PRATOMO WIBOWO,Sp.PD-KGEH', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_008', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 411, 'nama' => 'dr.CATUR ARI SETIANTO,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_013', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 412, 'nama' => 'Dr.dr.CESARIUS SINGGIH W.,Sp.PD-KR', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_015', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 417, 'nama' => 'dr.DEARISA SURYA YUDHANTARA,Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_005', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 421, 'nama' => 'dr.DESSIKA RAHMAWATI,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_011', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 425, 'nama' => 'dr.DEWI INDIASTARI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_024', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 427, 'nama' => 'dr.DHANY PRAFITA EKASARI,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_012', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 428, 'nama' => 'Dr.dr.DHELYA WIDASMARA,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_007', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 435, 'nama' => 'dr.DIDI CANDRADIKUSUMA,Sp.PD-KPTI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_016', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 444, 'nama' => 'dr.DJOKO HERI HERMANTO,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_010', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 447, 'nama' => 'Prof.dr.DJOKO WAHONO S.,Sp.PD-KEMD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_002', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 457, 'nama' => 'dr.EKO ARI SETIJONO M.,Sp.S(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_005', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 486, 'nama' => 'dr.FRILYA RACHMA PUTRI,Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_004', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 501, 'nama' => 'dr.HERI SUTANTO,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_023', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 503, 'nama' => 'dr.HERWINDA BRAHMANTI,Sp.KK,M.Sc', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_008', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 506, 'nama' => 'dr.IIN NOOR CHOZIN,Sp.P', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_007', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 531, 'nama' => 'dr.LAKSMI SASIARINI,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_018', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 535, 'nama' => 'dr.LITA SETYOWATIE,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_010', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 536, 'nama' => 'dr.MACHLUSIL HUSNA,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_007', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 565, 'nama' => 'dr.NGAKAN PUTU PARSAMA PUTRA,Sp.P(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_002', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 569, 'nama' => 'dr.NINIEK BUDIARTI,Sp.PD-KPTI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_011', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 594, 'nama' => 'dr.REZKI TANTULAR,Sp.P', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_010', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 595, 'nama' => 'dr.RIA DAMAYANTI,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_016', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 602, 'nama' => 'dr.RODHIYAN RAKHMATIAR,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_015', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 606, 'nama' => 'dr.RULLI ROSANDI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_020', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 612, 'nama' => 'dr.SHAHDEVI NANDAR KURNIAWAN,Sp.S(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_008', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 613, 'nama' => 'dr.SHINTA OKTYA WARDHANI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_012', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 614, 'nama' => 'dr.SINTA MURLISTYARINI,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_009', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 627, 'nama' => 'dr.SRI BUDHI RIANAWATI,Sp.S(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_006', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 630, 'nama' => 'dr.SRI SOENARTI,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_013', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 636, 'nama' => 'dr.SUCI PRAWITASARI,Sp.KK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_013', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 643, 'nama' => 'dr.SUPRIONO,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_014', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 644, 'nama' => 'dr.SURYANTI DWI PRATIWI,Sp.P(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_008', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 648, 'nama' => 'dr.SYIFA MUSTIKA,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_022', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 661, 'nama' => 'dr.TRI WAHJU ASTUTI,M.Kes,Sp.P(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_005', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 664, 'nama' => 'dr.UNGKY AGUS SETYAWAN,Sp.P', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_009', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 675, 'nama' => 'dr.WINARNI DIAN DWIASTUTI WISNU PUTRI,Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_008', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 690, 'nama' => 'dr.ZAMRONI AFIF,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_012', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 698, 'nama' => 'dr.AGUNG RIYANTO BUDI SANTOSO,Sp.OT,Subsp.T.L.B.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_009', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 705, 'nama' => 'dr.AHMAD DIAN WAHYUDIONO,Sp.THT-KL(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_010', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 714, 'nama' => 'dr.ANANTO SATYA PRADANA DRAJAT,Sp.OT', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_013', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 715, 'nama' => 'dr.ANDHIKA YUDISTIRA,Sp.OT,Subsp.O.T.B(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_012', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 719, 'nama' => 'dr.ANDRI KUSTONO,Sp.U', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_008', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 729, 'nama' => 'dr.ANNY SULISTIYOWATI,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_008', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 733, 'nama' => 'dr.ARIES BUDIANTO,Sp.B-KBD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BD_003', 'alamat' => 'BEDAH DIGESTIF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 736, 'nama' => 'dr.ARTONO ISHARANTO,Sp.B.TKV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_002', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 737, 'nama' => 'dr.ARVIANSYAH,Sp.B.P.R.E', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BP_003', 'alamat' => 'BEDAH PLASTIK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 740, 'nama' => 'dr.AULIA ABDUL HAMID ABDULLAH, M.BioMed. Sc, Sp.M (K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_016', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 745, 'nama' => 'dr.BESUT DARYANTO,Sp.U(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_002', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 757, 'nama' => 'dr.DEBBY SHINTIYA DEWI,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_009', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 777, 'nama' => 'dr.DONNY WISNU WARDHANA,Sp.BS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BS_004', 'alamat' => 'BEDAH SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 781, 'nama' => 'dr.DWICHA RAHMAWANSA S.,Sp.B-KBD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BD_006', 'alamat' => 'BEDAH DIGESTIF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 783, 'nama' => 'Dr.dr.EDI HANDOKO,Sp.THT-KL(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_005', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 784, 'nama' => 'Dr.dr.EDI MUSTAMSIR,Sp.OT,Subsp.P.L(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_003', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 790, 'nama' => 'dr.ELISABETH PRAJANTI S.,Sp.BP-RE', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BP_006', 'alamat' => 'BEDAH PLASTIK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 801, 'nama' => 'Dr.dr.FARHAD BAL`AFIF,Sp.BS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BS_003', 'alamat' => 'BEDAH SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 823, 'nama' => 'dr.HENDRADI SURJOTOMO,Sp.THT-KL(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_008', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 825, 'nama' => 'dr.HERA DWI NOVITA,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_017', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 827, 'nama' => 'dr.HERMAN YOSEF LIMPAT WIHASTYOKO,Sp.BP-RE.,Subsp.K.M.(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BP_002', 'alamat' => 'BEDAH PLASTIK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 829, 'nama' => 'dr.HERWINDO DICKY PUTRANTO,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_018', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 830, 'nama' => 'dr.HERY SUSILO,Sp.B(K)Onk', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BO_004', 'alamat' => 'BEDAH ONKOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 831, 'nama' => 'dr.HIDAYAT SUYUTI,PhD,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_024', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 840, 'nama' => 'dr.IMAM SUSENO BAYUADI,Sp.B-TKV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_004', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 844, 'nama' => 'dr.IRIANA MAHARANI,Sp.THT-KL(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_011', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 846, 'nama' => 'dr.ISTAN IRMANSYAH,Sp.OT,Subsp.Onk.Ort.R(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_004', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 858, 'nama' => 'dr.KOERNIA KUSUMA WARDHANA,Sp.B-TKV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_003', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 859, 'nama' => 'dr.KRISNA YUARNO PHATAMA,Sp.OT,Subsp.P.L.(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_010', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 861, 'nama' => 'dr.KURNIA PENTA SEPUTRA,Sp.U(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_004', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 864, 'nama' => 'dr.LELY RETNO WULANDARI,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_010', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 869, 'nama' => 'dr.LULIK INGGARWATI,Sp.B,Sp.BA(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BA_002', 'alamat' => 'BEDAH ANAK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 876, 'nama' => 'dr.MEDIANTO,Sp.U', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_009', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 878, 'nama' => 'dr.MEYRNA HERYANING PUTRI,Sp.THT-KL', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_013', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 883, 'nama' => 'dr.MOHAMMAD DWIJO MURDIYO,Sp.THT-KL', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_012', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 894, 'nama' => 'dr.NADIA ARTHA DEWI,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_011', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 895, 'nama' => 'dr.NANDA WAHYU ANANDITA,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_012', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 901, 'nama' => 'dr.NINA HANDAYANI,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_019', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 911, 'nama' => 'dr.OVI SOFIA,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_020', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 912, 'nama' => 'dr.PAKSI SATYAGRAHA,M.Kes,Sp.U(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_005', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 913, 'nama' => 'dr.PANJI SANANTA,Sp.OT, Subsp.A (K),MKed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_006', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 915, 'nama' => 'dr.PRADANA NURHADI,Sp.U', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_006', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 942, 'nama' => 'dr.ROSY ALDINA,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_013', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 950, 'nama' => 'dr.SATRIA PANDU PERSADA ISMA,Sp.OT,Subsp.Onk.Ort.R.(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_007', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 953, 'nama' => 'dr.SESKOATI PRAYITNANINGSIH,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_014', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 954, 'nama' => 'dr.SETYO SUGIHARTO,Sp.B-KBD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BD_002', 'alamat' => 'BEDAH DIGESTIF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 960, 'nama' => 'dr.SOEHARTONO,Sp.THT-KL(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_009', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 967, 'nama' => 'dr.TAUFIQ NUR BUDAYA,Sp.U', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_007', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 970, 'nama' => 'dr.THOMAS ERWIN CHRISTIAN JUNUS HUWAE,Sp.OT,Subsp.T.L.B.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_005', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 972, 'nama' => 'dr.TITOK HARIYANTO,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_021', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 975, 'nama' => 'dr.TOMMY ALFANDY NAZWAR,Sp.BS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BS_006', 'alamat' => 'BEDAH SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 978, 'nama' => 'dr.TRIANA BUDI SULISTYA,Sp.M(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_015', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 986, 'nama' => 'dr.WILMA AGUSTINA,Sp.B.P.R.E', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BP_004', 'alamat' => 'BEDAH PLASTIK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 989, 'nama' => 'dr.WINO VRIEDA VIERLIA,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_023', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 995, 'nama' => 'dr.YUDI SISWANTO,MSc,M.Ked-Klin,Sp.B.P.R.E', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BP_005', 'alamat' => 'BEDAH PLASTIK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 999, 'nama' => 'dr.MUHAMMAD IRAWAN,Sp.A. M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_035', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1013, 'nama' => 'Dr.dr.BAMBANG RAHARDJO,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_008', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1041, 'nama' => 'dr.HERMAWAN WIBISONO,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_016', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1042, 'nama' => 'Dr.dr.I WAYAN ARSANA WIYASA,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_007', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1065, 'nama' => 'dr.MUKHAMAD NORYANTO,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_010', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1067, 'nama' => 'dr.MULYO HADI WIBOWO,Sp.OG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_023', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1076, 'nama' => 'dr.NUGRAHANTI PRASETYORINI,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_011', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1080, 'nama' => 'Dr.dr.RAHAJENG,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_012', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1097, 'nama' => 'dr.SUHENI NINIK HARIYATI,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_019', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1101, 'nama' => 'Dr.dr.SUTRISNO,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_005', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1104, 'nama' => 'Dr.dr.TATIT NURSETA,Sp.OG(K)Onk', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_014', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1117, 'nama' => 'dr.YAHYA IRWANTO,Sp.OG(K)Onk', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_015', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1123, 'nama' => 'dr.A.SUSANTO NUGROHO,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_007', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1136, 'nama' => 'dr.ARIANI,M.Kes,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_011', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1138, 'nama' => 'dr.ASTRID KRISTINA KARDANI,Sp.A(K).,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_028', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1141, 'nama' => 'dr.BRIGITTA IDA RESITA VEBRIANTI C.,Sp.A(K),M.Kes', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_023', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1145, 'nama' => 'dr.DESY WULANDARI,Sp.A,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_032', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1156, 'nama' => 'dr.DYAHRIS KOENTARTIWI,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_021', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1157, 'nama' => 'dr.EKO SULISTIJONO,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_012', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1169, 'nama' => 'dr.ERY OLIVIANTO,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_020', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1177, 'nama' => 'dr.HAJENG WULANDARI,Sp.A.,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_033', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1179, 'nama' => 'dr.HARJOEDI ADJI TJAHJONO,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_008', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1188, 'nama' => 'dr.IRENE RATRIDEWI,Sp.A(K),M.Kes', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_006', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1189, 'nama' => 'dr.IRFAN AGUS SALIM,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_034', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1199, 'nama' => 'Dr.dr.KRISNI SOEBANDIJAH,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_009', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1200, 'nama' => 'dr.KURNIAWAN TAUFIQ KADAFI,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_024', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1227, 'nama' => 'dr.NUGROHO DANU TRI SUBROTO,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_031', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1234, 'nama' => 'dr.PRASETYA ISMAIL PERMADI,Sp.A,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_025', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1257, 'nama' => 'dr.SAPTADI YULIARTO,Sp.A(K),M.Kes', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_018', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1258, 'nama' => 'Dr.dr.SATRIO WIBOWO,Sp.A(K),M.si.Med', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_015', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1259, 'nama' => 'dr.SAVITRI LAKSMI WINAPUTRI,Sp.A', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_030', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1260, 'nama' => 'dr.SETYA MITHRA HARTIASTUTI,Sp.A,M.Si.Med', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_027', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1265, 'nama' => 'dr.SONY WICAKSONO,Sp.A,M.Kes', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_029', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1280, 'nama' => 'dr.WISNU BARLIANTO,MSi.Med,Sp.A(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_016', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1313, 'nama' => 'dr.ENDANG INDERAWATI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_001', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1328, 'nama' => 'Dr.dr.I WAYAN AGUNG INDRAWAN,Sp.OG(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_009', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1349, 'nama' => 'dr.MUHAYATI KUSUMA WARDHANI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_011', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1403, 'nama' => 'dr.WIYANTI ANA OKTAVIA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_010', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1411, 'nama' => 'drg.ANGELIQUE JULIKADEWI,Sp.Ort', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_006', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1412, 'nama' => 'drg.ANGGANI PRASASTI,Sp.KG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_005', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1415, 'nama' => 'drg.EVA RIAMA PANDIANGAN,Sp.BM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_009', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1416, 'nama' => 'drg.FAIDAH,Sp.KG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_010', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1417, 'nama' => 'drg.FERTY PURNAWATIE', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_018', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1419, 'nama' => 'drg.LELY INDRIASARI,Sp.KGA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_011', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1423, 'nama' => 'drg.MOHAMAD SAMSUL ARIFIN', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_013', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1430, 'nama' => 'drg.RIFIANA TAKANAMITA,Sp.Perio', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_019', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1431, 'nama' => 'drg.RINDA ARIYANTI,Sp.Ort', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_007', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1432, 'nama' => 'drg.ROBINSON PASARIBU,Sp.BM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_002', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1436, 'nama' => 'drg.SUKEKSI DYAH INTANNINGRUM,Sp.KGA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_014', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1437, 'nama' => 'drg.SUZY RATNA DINARTI,Sp.Pros', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_016', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1441, 'nama' => 'drg.VANRISTA PARIENDRA,Sp.KG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_015', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1447, 'nama' => 'dr.ALI HAEDAR,Sp.EM,KPEC,FAHA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_007', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1458, 'nama' => 'dr.ARI PRASETYADJATI,Sp.EM, KDM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_002', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1463, 'nama' => 'dr.AURICK YUDHA NAGARA,Sp.EM,KPEC', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_009', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1480, 'nama' => 'dr.DWI WARDOYO TRIYULIARTO,Sp.EM,KEC', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_003', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1524, 'nama' => 'dr.MUNSIFAH ZAIYANAH,Sp.EM,KTox', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_004', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1558, 'nama' => 'dr.SURYANTO EKO AGUNG NUGROHO,Sp.EM,KDM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_005', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1564, 'nama' => 'dr.TAUFIQ ABDULLAH,Sp.EM,KTox', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_008', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1577, 'nama' => 'dr.YUDDY IMOWANTO,Sp.EM,KEC', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_006', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1611, 'nama' => 'dr.BUYUNG HARTIYO LAKSONO,Sp.An(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_007', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1726, 'nama' => 'dr.TAUFIQ AGUS SISWAGAMA,Sp.An', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_010', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1742, 'nama' => 'dr.WIDANTO,Sp.B,Sp.BA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BA_003', 'alamat' => 'BEDAH ANAK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1788, 'nama' => 'dr.DIANAWATI EKASARI,S.Ked', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_007', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1793, 'nama' => 'dr.DYAH AYU FAHMI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_006', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1806, 'nama' => 'dr.EVIRA TIYAKUSUMA,Sp.MK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_005', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1813, 'nama' => 'dr.FRIDA SEPTYOWATI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_004', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1893, 'nama' => 'Dr.dr.SUSANTHY DJAJALAKSANA,Sp.P(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_004', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1909, 'nama' => 'dr.WAHYU PURNOMO', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_002', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1925, 'nama' => 'dr.ACHMAD BAYHAQI NASIR ASLAM,Sp.Rad(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_006', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1927, 'nama' => 'dr.AGUNG SETYAWAN,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_003', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1943, 'nama' => 'dr.DINI RACHMA ERAWATI,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_005', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1950, 'nama' => 'dr.FARAH NURDIANA,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_008', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1962, 'nama' => 'dr.IRMA DARINAFITRI,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_002', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1966, 'nama' => 'dr.LIANA KARLIASARI,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_012', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1984, 'nama' => 'dr.SISWIDIYATI,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_009', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 1998, 'nama' => 'Prof.Dr.dr.YUYUN YUENIWATI P,M.Kes,Sp.Rad(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_011', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2352, 'nama' => 'dr.AGUSTIN ISKANDAR,M.Kes,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_009', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2363, 'nama' => 'dr.CATUR SUCI SUTRISNANI,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_002', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2369, 'nama' => 'dr.DIAN SUKMA HANGGARA,Sp.PK,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_011', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2390, 'nama' => 'Dr.dr.HANI SUSIANTI,Sp.PK(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_003', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2399, 'nama' => 'dr.INDAH ADHITA WULANDA,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_007', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2404, 'nama' => 'dr.JUNE LEGIAWATI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_008', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2410, 'nama' => 'Prof.Dr.dr.KUSWORINI,M.Kes,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_014', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2416, 'nama' => 'dr.MAIMUN ZULHAIDAH A.,M.Kes,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_001', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2449, 'nama' => 'dr.SINGGIH PUDJO WAHONO,Sp.PK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_006', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2453, 'nama' => 'dr.SITI FATONAH,Sp.PK(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_005', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2485, 'nama' => 'dr.DEWI SANTOSANINGSIH,SpMK,MKes,Phd', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_007', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2493, 'nama' => 'dr.NURIMA DIYAH PUJI HASTUTI, Sp.MK, M.Ked.Klin', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_001', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2497, 'nama' => 'dr.SIWIPENI IRMAWANTI,M.Biomed.,Sp.MK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_009', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2504, 'nama' => 'dr.AINA ANGELINA,Sp.PA,Subsp H.L.E,(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_008', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2506, 'nama' => 'dr.ARIF SATRIA HARDIKA,Sp.PA,Subsp O.G.P.(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_002', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2508, 'nama' => 'dr.DIAH PRABAWATI RETNANI,Sp.PA(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_003', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2512, 'nama' => 'dr.EVIANA NORAHMAWATI,Sp.PA(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_004', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2516, 'nama' => 'dr.KENTY WANTRI ANITA,M.Kes,Sp.PA(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_006', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2518, 'nama' => 'dr.M.LUQMAN FADLI,Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_009', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2525, 'nama' => 'dr.RA.ROSE KHASANA DEWI,Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_010', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2539, 'nama' => 'dr.DWI INDRIANI LESTARI,Sp.RM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_002', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2548, 'nama' => 'dr.MOHAMMAD BARLIAN NUGROHO,Sp.KFR', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_005', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2553, 'nama' => 'dr.RAHMAD,Sp.KFR', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_006', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2556, 'nama' => 'dr.SAMIAH RACHMAWATI,Sp.KFR', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_007', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2573, 'nama' => 'dr.ERIKO PRAWESTININGTYAS,Sp.F', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'FM_002', 'alamat' => 'IKF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2574, 'nama' => 'dr.ETTY KURNIA,Sp.F', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'FM_003', 'alamat' => 'IKF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2577, 'nama' => 'dr.MUHAMMAD FAHRUL,Sp.F', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'FM_001', 'alamat' => 'IKF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2587, 'nama' => 'dr.WENING PRASTOWO,Sp.F', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'FM_004', 'alamat' => 'IKF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2695, 'nama' => 'dr.MUCHAMMAD FAHRUL UDIN,Sp.A(K) M.Kes', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_026', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2784, 'nama' => 'dr.ANNA FUJI RAHIMAH,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_015', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2785, 'nama' => 'dr.ARDIAN RIZAL,Sp.JP(K),FIHA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_012', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2790, 'nama' => 'dr.BUDI SATRIJO,Sp.JP(K),FIHA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_013', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2792, 'nama' => 'dr.CHOLID TRI TJAHJONO,M.Kes,Sp.JP(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_006', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2814, 'nama' => 'dr.HENY MARTINI,Sp.JP(K)FIHA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_005', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2821, 'nama' => 'dr.INDRA PRASETYA,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_016', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2835, 'nama' => 'dr.MOHAMMAD SAIFUR ROHMAN,Sp.JP,(K),Ph.D', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_007', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2839, 'nama' => 'dr.NOVI KURNIANINGSIH,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_011', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2849, 'nama' => 'dr.SASMOJO WIDITO,Sp.JP(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_004', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2850, 'nama' => 'dr.SETYASIH ANJARWANI,Sp.JP(K),FIHA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_009', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2861, 'nama' => 'dr.VALERINNA YOGIBUANA S.P.,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_018', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2884, 'nama' => 'dr.FAJAR WAHYU ATMOKO', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_014', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2895, 'nama' => 'dr.SARAH INDERAYANTI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_009', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2905, 'nama' => 'dr.WIDODO MARDI SANTOSO,Sp.S', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_009', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2910, 'nama' => 'dr.ALFRED JULIUS PETRARIZKY,Sp.Onk.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RP_002', 'RADIOTERAPI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2923, 'nama' => 'dr.RAFIQ SULISTYO NUGROHO,Sp.Onk.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RP_001', 'RADIOTERAPI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2935, 'nama' => 'dr.ACHMAD RIFAI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_026', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2944, 'nama' => 'Dr.dr.ATMA GUNAWAN,Sp.PD(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_006', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 2980, 'nama' => 'dr.NUR SAMSU,Sp.PD-KGH', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_019', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3007, 'nama' => 'dr.AHMAD FEZA FADLURRAHMAN,Sp.An-TI., Subsp.An.Kv. (K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_013', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3013, 'nama' => 'dr.ARIE ZAINUL FATONI,Sp.An', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_011', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3014, 'nama' => 'Dr.dr.ASWOCO ANDYK ASMORO,Sp.An(FIPM)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_003', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3041, 'nama' => 'dr.ISNGADI,M.Kes,Sp.An(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_006', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3047, 'nama' => 'dr.KARMINI,Sp.An(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_002', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3068, 'nama' => 'dr.RISTIAWAN MUJI LAKSONO,Sp.An.KMN', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_008', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3072, 'nama' => 'dr.RUDDI HARTONO,Sp.An', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_009', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3073, 'nama' => 'dr.RUDY VITRALUDYONO,Sp.An', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_012', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3087, 'nama' => 'dr.WIWI JAYA,Sp.An (K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_005', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3090, 'nama' => 'dr.HERWINDO PUDJO BRAHMANTYO,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_025', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3092, 'nama' => 'dr.ZUHROTUN ULYA, Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_009', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3102, 'nama' => 'dr.HARTADI TANJOYO, Sp.Em', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'EM_010', 'alamat' => 'EMERGENCY', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3103, 'nama' => 'dr.INDRASTUTI NORMAHAYU, Sp.Rad(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_001', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3104, 'nama' => 'dr.ERY SATRIAWAN,Sp.OT', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_014', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3105, 'nama' => 'dr.WELLA KAROLINA, Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_019', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3106, 'nama' => 'dr.VENY MAYANGSARI,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_020', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3107, 'nama' => 'dr.PERDANA ADITYA RAHMAN,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_028', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3109, 'nama' => 'dr.RIZKI EKAPUTRA HANDOKO,Sp.THT-KL', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_014', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3110, 'nama' => 'dr.NINA NUR ARIFAH,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_030', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3113, 'nama' => 'dr.ZENDY SAGITA,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_025', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3114, 'nama' => 'dr.HABIBA AURORA,M.Biomed,Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_010', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3115, 'nama' => 'dr.HENDY SETYO YUDHANTO,Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_001', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3117, 'nama' => 'dr.HERU SULISTYO,Sp.B-KBD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BD_007', 'alamat' => 'BEDAH DIGESTIF', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3118, 'nama' => 'dr.VATIEN RAHMAWATI,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_026', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3121, 'nama' => 'dr.NUGRAHITA SAFIRAWIDI WITJAKSONO', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_017', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3125, 'nama' => 'dr.RUDI PRIYO UTOMO,Sp.OG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_024', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3126, 'nama' => 'dr.FADILAH MUTAQIN,Sp.A, M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_036', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3127, 'nama' => 'dr.ANGGIA PRAMESWARI WARDHANA,Sp.OG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_025', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3128, 'nama' => 'dr.ANDREW WILLIAM TULLE,M.Sc.', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_006', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3129, 'nama' => 'dr.AYU YESI AGUSTINA,Sp.An-TI,Subsp.T. I (K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_014', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3130, 'nama' => 'dr.SYAHRUL CHILMI,M.Biomed,SpPK,Ph.D', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPK_020', 'alamat' => 'LAB.PK', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3131, 'nama' => 'drg.HIRZI ASDYAKSA,Sp.BM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'GM_020', 'alamat' => 'GIMU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3132, 'nama' => 'dr.AYUNITA TRI WIRATTAMI,Sp.THT-KL', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_015', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3134, 'nama' => 'dr.EKO NOFIYANTO, Sp.An-TI.MMRS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_015', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3135, 'nama' => 'dr.ADHIKA PRASTYA WIKANANDA,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_021', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3136, 'nama' => 'dr.FANNIYAH,Sp.An-TI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_016', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3137, 'nama' => 'dr.MUHAMAD AKBAR SIDIQ,Sp.An-TI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_017', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3138, 'nama' => 'dr.NUR SHELLA PUTRI BASUKI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_021', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3140, 'nama' => 'dr.MELINDA, Sp.A, M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'AN_036', 'alamat' => 'IKA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3141, 'nama' => 'dr.ETIK MERTIANTI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_031', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3142, 'nama' => 'dr.EDEN SURYOIMAN WINOTO,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_032', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3143, 'nama' => 'dr.RINADHI REZA BRAMANTYA,Sp.PD-KEMD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_033', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3144, 'nama' => 'dr.CHRISTIAN SURYA EKA PUTRA,Sp.P', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_014', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3145, 'nama' => 'dr.GUTAMA UTAMA ARYA PRINGGA,Sp.KFR,M.Ked Klin', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_009', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3146, 'nama' => 'dr.GRACELIA RUTH ELISABETH D,Sp.B.TKV,M.Med.KI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_005', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3147, 'nama' => 'dr.SINUNG WIKANADI,Sp.B., Sp.BA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BA_004', 'alamat' => 'BEDAH ANAK', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3148, 'nama' => 'dr.MILANITALIA GADYS ROSANDI,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_034', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3149, 'nama' => 'dr.NYOMAN SATVIKA DHARMA,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_035', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3150, 'nama' => 'dr.MIRZA ZAKA PRATAMA,SpPD,M.Biomed', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_036', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3151, 'nama' => 'dr.DOMY PRADANA PUTRA,SpOT', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_015', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3152, 'nama' => 'dr.BERLIAN ANGGRAENI PUTRI,Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_011', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3153, 'nama' => 'dr.DICKI TRIANGGA PUTRA, Sp.KJ', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JW_010', 'alamat' => 'JIWA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3154, 'nama' => 'dr.YUYUN KUSNANINGRUM,Sp.MK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_010', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3155, 'nama' => 'Dr.ADINDA AMALIA DANI, Sp.DV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_014', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3188, 'nama' => 'dr.AHMAD THOHIR,Sp.M', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MT_027', 'alamat' => 'MATA', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3221, 'nama' => 'dr.CHAIDAR MUTTAQIN, Sp.BTKV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_006', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3222, 'nama' => 'dr.AULIA HANUM, Sp.Rad', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RO_013', 'alamat' => 'RADIOLOGI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3229, 'nama' => 'dr.FITRI INDAH SARI, Sp.P', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'PR_015', 'alamat' => 'PARU', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3230, 'nama' => 'dr.ADEYCA AMARYLLIS RISA PUTRI, Sp.N', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'SR_018', 'alamat' => 'SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3231, 'nama' => 'dr.DEA ARIE KURNIAWAN,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_022', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3232, 'nama' => 'dr.PRISCA ANINDHITA FAJARPENI,Sp.B', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_006', 'alamat' => 'BEDAH ONKOLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3233, 'nama' => 'dr.IHDA DIAN KUSUMA, M.Biomed, Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_012', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3234, 'nama' => 'dr.DWI FITRIANTI ARIEZA PUTRI, Sp.FM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'FM_006', 'alamat' => 'IKF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3235, 'nama' => 'dr.DEWI ARUM SAWITRI,Sp.AN-TI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_018', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3236, 'nama' => 'dr.MUHAMMAD FARLYZHAR YUSUF,Sp.An-TI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'IC_019', 'alamat' => 'ANESTHESI', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3237, 'nama' => 'dr.DANDY DRESTANTO ADIWIGNYO,Sp.OT', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BR_016', 'alamat' => 'BEDAH ORTOPEDI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3238, 'nama' => 'dr.ADIN YAN PERMANA,Sp.OG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_026', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3239, 'nama' => 'dr.FACHRIY BALAFIF,M.Ked.klin,Sp.BS', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BS_007', 'alamat' => 'BEDAH SARAF', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3240, 'nama' => 'dr.MOCHAMMAD PUTRO ARGO,Sp.OG', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_027', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3241, 'nama' => 'dr.EDI WIBOWO,Sp.U', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'URO_010', 'alamat' => 'BEDAH UROLOGI', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3242, 'nama' => 'dr.YORDAN WICAKSONO ASHARI,Sp.JP', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'JT_023', 'alamat' => 'JANTUNG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3243, 'nama' => 'dr.YULIANA AYU RAHAYU MANIK', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_022', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3244, 'nama' => 'dr.CYNTIA PUTRI WIDYASARI', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_023', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3245, 'nama' => 'dr.FADHILLAH SALMAN SOFYAN', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_024', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3246, 'nama' => 'dr.VITA FEBRYLIA ADZIMA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_025', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3247, 'nama' => 'dr.ANDRANISSA AMALIA PASHIRA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_026', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3248, 'nama' => 'dr.SRI SAYEKTININGSIH,MM', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_027', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3250, 'nama' => 'dr.R.GALIH AGUNG PRAGIWAKSANA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DU_029', 'alamat' => 'DOKTER UMUM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3251, 'nama' => 'dr.NURRAHMA WAHYU FITRIYANI,M.MedED,Sp.DV', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'KL_015', 'alamat' => 'KULKEL', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3284, 'nama' => 'dr.RIZKI EKAPUTRA HANDOKO,Sp.THT-KL', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'HT_014', 'alamat' => 'THT', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3317, 'nama' => 'dr.NAYLA RAHMADIANI,Sp.PA', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'LPA_013', 'alamat' => 'LAB.PA', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3350, 'nama' => 'dr.MOCHAMAD FACHRUREZA,Sp.PD', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'DL_037', 'alamat' => 'IPD', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3351, 'nama' => 'dr.KRESNA AGUNG PRABOWO, Sp.B.Subsp.B.V.E(K)', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'BT_007', 'alamat' => 'BEDAH THORAX', 'created_at' => '2025-08-02 07:15:10', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3384, 'nama' => 'dr.ADITYO PRABOWO,Sp.OG,M.Ked.Klin', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'OG_028', 'alamat' => 'OBG', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3385, 'nama' => 'dr. IMALIA AYUNAZHARY', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'RH_010', 'alamat' => 'IRM', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51'],
|
||||
[ 'id' => 3386, 'nama' => 'dr. MOHAMMAD AGUNG MARZAH, Sp.MK.', 'jk' => '', 'tgl_lahir' => null, 'kota' => 'MK_011', 'alamat' => 'LAB.MIKRO', 'created_at' => '2025-08-02 07:14:51', 'updated_at' => '2025-08-02 07:14:51']
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -279,19 +279,16 @@ class OrganismSeeder extends Seeder
|
||||
['name' => 'Budding Cell 1-5/LPB (2+)', 'category' => 'BC', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Budding Cell 6-30/LPB (3+)', 'category' => 'BC', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Budding Cell >30/LPB (4+)', 'category' => 'BC', 'kelompok' => 'mikroorganisme'],
|
||||
|
||||
['name' => 'Pseudohifa (+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Hifa (+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Hifa <1/LPB (1+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Hifa 1-5/LPB (2+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Hifa 6-30/LPB (3+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Hifa >30/LPB (4+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
|
||||
|
||||
['name' => 'Bacil Gram Positif <1/LPB (1+)', 'category' => 'BGP', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Bacil Gram Positif 1-5/LPB (2+)', 'category' => 'BGP', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Bacil Gram Positif 6-30/LPB (3+)', 'category' => 'BGP', 'kelompok' => 'mikroorganisme'],
|
||||
['name' => 'Bacil Gram Positif >30/LPB (4+)', 'category' => 'BGP', 'kelompok' => 'mikroorganisme'],
|
||||
|
||||
['name' => 'Tidak ditemukan morfologi budding cells', 'category' => 'id_sputum', 'kelompok' => 'Sputum'],
|
||||
['name' => 'Ditemukan morfologi budding cells', 'category' => 'id_sputum', 'kelompok' => 'Sputum'],
|
||||
['name' => 'Tidak ditemukan morfologi budding cells', 'category' => 'id_swabtenggorok', 'kelompok' => 'Swab Tenggorok'],
|
||||
@@ -343,14 +340,22 @@ class OrganismSeeder extends Seeder
|
||||
['name' => 'Ditemukan morfologi bakteri berspora di sub terminal', 'category' => 'id_pewarnaanspora', 'kelompok' => 'Pewarnaan Spora'],
|
||||
['name' => 'Ditemukan morfologi bakteri berspora di sentral', 'category' => 'id_pewarnaanspora', 'kelompok' => 'Pewarnaan Spora'],
|
||||
['name' => 'Tidak diitemukan morfologi bakteri berspora', 'category' => 'id_pewarnaanspora', 'kelompok' => 'Pewarnaan Spora'],
|
||||
['name' => 'KGP 1+ ʆ hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 2+ ʆ hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 3+ ʆ hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 4+ ʆ hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 1+ β hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 2+ β hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 3+ β hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 4+ β hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'Ditemukan morfologi <i>Inclusion Bodies</i> dan <i>Reticulate Bodies</i>', 'category' => 'id_pewarnaangiesma', 'kelompok' => 'Pewarnaan Giemsa'],
|
||||
['name' => 'Tidak ditemukan morfologi <i>Inclusion Bodies</i> dan <i>Reticulate Bodies</i>', 'category' => 'id_pewarnaangiesma', 'kelompok' => 'Pewarnaan Giemsa'],
|
||||
['name' => 'Ditemukan morfologi kista <i>tropozoid</i>', 'category' => 'id_pewarnaangiesma', 'kelompok' => 'Pewarnaan Giemsa'],
|
||||
['name' => 'Tidak Ditemukan morfologi kista <i>tropozoid</i>', 'category' => 'id_pewarnaangiesma', 'kelompok' => 'Pewarnaan Giemsa'],
|
||||
['name' => 'Ditemukan morfologi Hifa', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Ditemukan morfologi <i>Budding Cell</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Ditemukan morfologi <i>Conidia</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Ditemukan morfologi Hifa dan <i>Budding Cell</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Ditemukan morfologi Hifa dan <i>Conidia</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Ditemukan morfologi <i>Budding Cell</i> dan <i>Conidia</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Tidak ditemukan morfologi <i>Budding Cell</i>, Hifa dan <i>Conidia</i>', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'Tidak ditemukan morfologi <i>Budding Cell</i> dan Hifa', 'category' => 'id_pewarnaankoh', 'kelompok' => 'Pewarnaan KOH'],
|
||||
['name' => 'KGP 1+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 2+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 3+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 4+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'BGN 1+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'BGN 2+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'BGN 3+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
@@ -375,14 +380,10 @@ class OrganismSeeder extends Seeder
|
||||
['name' => 'BGP Coryneform 2+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'BGP Coryneform 3+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'BGP Coryneform 4+', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
|
||||
['name' => 'KGP 1+ ʆ hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 2+ ʆ hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 3+ ʆ hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 4+ ʆ hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 1+ β hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 2+ β hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 3+ β hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 4+ β hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 1+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 2+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 3+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'KGP 4+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'BGN 1+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'BGN 2+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
['name' => 'BGN 3+', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class PoliSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$this->ensureTableAndColumns();
|
||||
|
||||
DB::table('poli')->truncate();
|
||||
|
||||
foreach (array_chunk($this->jsonData(), 500) as $chunk) {
|
||||
DB::table('poli')->insert($chunk);
|
||||
}
|
||||
|
||||
$this->resetAutoIncrement();
|
||||
}
|
||||
|
||||
private function ensureTableAndColumns(): void
|
||||
{
|
||||
if (!Schema::hasTable('poli')) {
|
||||
Schema::create('poli', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('poli', 250)->nullable();
|
||||
$table->string('subpoli', 250)->nullable();
|
||||
$table->string('subsubpoli', 250)->nullable();
|
||||
$table->string('modaliti', 150)->nullable();
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
$table->string('modaliti2', 150)->nullable();
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Schema::table('poli', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('poli', 'poli')) {
|
||||
$table->string('poli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'subpoli')) {
|
||||
$table->string('subpoli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'subsubpoli')) {
|
||||
$table->string('subsubpoli', 250)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'modaliti')) {
|
||||
$table->string('modaliti', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'kelompok')) {
|
||||
$table->string('kelompok', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'modaliti2')) {
|
||||
$table->string('modaliti2', 150)->nullable();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'created_at')) {
|
||||
$table->timestamp('created_at')->useCurrent();
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('poli', 'updated_at')) {
|
||||
$table->timestamp('updated_at')->useCurrent();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private function jsonData(): array
|
||||
{
|
||||
$path = database_path('seeders/data/poli.json');
|
||||
$json = file_get_contents($path);
|
||||
|
||||
if ($json === false) {
|
||||
throw new \RuntimeException("Gagal membuka file seeder poli: {$path}");
|
||||
}
|
||||
|
||||
$data = json_decode($json, true);
|
||||
|
||||
if (!is_array($data)) {
|
||||
throw new \RuntimeException("Format JSON seeder poli tidak valid: {$path}");
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function resetAutoIncrement(): void
|
||||
{
|
||||
$driver = DB::getDriverName();
|
||||
|
||||
if ($driver === 'pgsql') {
|
||||
DB::statement("
|
||||
SELECT setval(
|
||||
pg_get_serial_sequence('poli', 'id'),
|
||||
(SELECT COALESCE(MAX(id), 1) FROM poli),
|
||||
(SELECT COUNT(*) > 0 FROM poli)
|
||||
)
|
||||
");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($driver === 'mysql') {
|
||||
$nextId = ((int) DB::table('poli')->max('id')) + 1;
|
||||
DB::statement("ALTER TABLE poli AUTO_INCREMENT = {$nextId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
Executable
+2257
File diff suppressed because it is too large
Load diff
Executable
+141
@@ -0,0 +1,141 @@
|
||||
[
|
||||
{"id":32,"poli":"Core","ruangan":"R.TIND. SPIROMETRI - IRNA I","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":33,"poli":"Core","ruangan":"R.TIND. ECHO - IPJT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":34,"poli":"Core","ruangan":"IGD - P1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":35,"poli":"Core","ruangan":"IGD - P2 COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":36,"poli":"Core","ruangan":"IGD - TRIASE COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":37,"poli":"Core","ruangan":"R.TIND. THT - IRNA II","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":38,"poli":"Core","ruangan":"R.BUGENVILE - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":39,"poli":"Core","ruangan":"R.HCU INFEKSI MELATI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":40,"poli":"Core","ruangan":"R. ESWL","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":41,"poli":"Core","ruangan":"R.TIND. NEUROLOGI - IRNA 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":42,"poli":"Core","ruangan":"R.TIND. CAPD - INST. DIALISIS","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":43,"poli":"Core","ruangan":"R.BENGAWAN SOLO - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":44,"poli":"Core","ruangan":"OK LOKAL R. 21","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":45,"poli":"Core","ruangan":"R. USG","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":46,"poli":"Core","ruangan":"R.TINDAKAN KEMOTERAPI - IRJ","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":47,"poli":"Core","ruangan":"R.TIND. TRANSFUSI THALASEMIA - IRNA IV","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":48,"poli":"Core","ruangan":"R.HCU SARANGAN - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":49,"poli":"Core","ruangan":"ANESTESI dan TERAPI INTENSIF","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":50,"poli":"Core","ruangan":"IGD - TRIASE","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":51,"poli":"Core","ruangan":"THT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":52,"poli":"Core","ruangan":"MATA","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":53,"poli":"Core","ruangan":"R.TIND. BEDAH - IBS","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":54,"poli":"Core","ruangan":"R.TIND. REHABILITASI JANTUNG - IPJT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":55,"poli":"Core","ruangan":"PARU","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":56,"poli":"Core","ruangan":"JANTUNG","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":57,"poli":"Core","ruangan":"KULIT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":58,"poli":"Core","ruangan":"REHAB MEDIK","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":59,"poli":"Core","ruangan":"SARAF","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":60,"poli":"Core","ruangan":"GIZI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":61,"poli":"Core","ruangan":"OBG","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":62,"poli":"Core","ruangan":"ONKOLOGI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":63,"poli":"Core","ruangan":"R.ICU KAPUAS B - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":64,"poli":"Core","ruangan":"KOMPLEMENTER","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":65,"poli":"Core","ruangan":"GCU","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":66,"poli":"Core","ruangan":"HEMATO-ONKOLOGI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":67,"poli":"Core","ruangan":"HOME CARE","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":68,"poli":"Core","ruangan":"R.BARITO - KLS VIP A","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":69,"poli":"Core","ruangan":"R.BARITO - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":70,"poli":"Core","ruangan":"R.HCU RANU GRATI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":71,"poli":"Core","ruangan":"IGD - P0","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":72,"poli":"Core","ruangan":"R.SEMERU - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":73,"poli":"Core","ruangan":"RADIOTERAPI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":74,"poli":"Core","ruangan":"R.HCU CISADANE - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":75,"poli":"Core","ruangan":"KLINIK COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":76,"poli":"Core","ruangan":"KLINIK TB-MDR","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":77,"poli":"Core","ruangan":"KLINIK GIGI & MULUT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":78,"poli":"Core","ruangan":"R.PARANGTRITIS - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":79,"poli":"Core","ruangan":"R.ICU INFEKSI MELATI - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":80,"poli":"Core","ruangan":"R.KELIMUTU - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":81,"poli":"Core","ruangan":"IGD - P2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":82,"poli":"Core","ruangan":"R.LOSARI - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":83,"poli":"Core","ruangan":"R.HCU BRANTAS - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":84,"poli":"Core","ruangan":"IGD - P3 COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":85,"poli":"Core","ruangan":"SEKSI REKAM MEDIK","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":86,"poli":"Core","ruangan":"R.BENGAWAN SOLO - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":87,"poli":"Core","ruangan":"LAB PATOLOGI ANATOMI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":88,"poli":"Core","ruangan":"R. BMD","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":89,"poli":"Core","ruangan":"R. KATETERISASI JANTUNG","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":90,"poli":"Core","ruangan":"R. ECHOCARDIOGRAFI DAN IMAGING","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":91,"poli":"Core","ruangan":"R. PREVENSI DAN REHABILITASI JANTUNG","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":92,"poli":"Core","ruangan":"R.TIND. APHARESIS - IRNA 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":93,"poli":"Core","ruangan":"DALAM","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":94,"poli":"Core","ruangan":"R. Konsul Terapi Intensif","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":95,"poli":"Core","ruangan":"ANAK","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":96,"poli":"Core","ruangan":"BEDAH","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":97,"poli":"Core","ruangan":"R. INTENSIF KABER","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":98,"poli":"Core","ruangan":"GIGI DAN MULUT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":99,"poli":"Core","ruangan":"R.RANU KUMBOLO (BAYI) - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":100,"poli":"Core","ruangan":"R. ECHOCARDIOGRAPHY IRNA 4","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":101,"poli":"Core","ruangan":"PSIKIATRI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":102,"poli":"Core","ruangan":"R.RINJANI - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":103,"poli":"Core","ruangan":"R.RINJANI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":104,"poli":"Core","ruangan":"R.RINJANI - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":105,"poli":"Core","ruangan":"R.TIND. UROLOGI - IRNA II","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":106,"poli":"Core","ruangan":"R.CVCU MUSI - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":107,"poli":"Core","ruangan":"IGD - P3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":108,"poli":"Core","ruangan":"R.HCU MAHAKAM - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":109,"poli":"Core","ruangan":"R.BARITO - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":110,"poli":"Core","ruangan":"LAB SENTRAL","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":111,"poli":"Core","ruangan":"R.BUNAKEN - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":112,"poli":"Core","ruangan":"R.KELIMUTU - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":113,"poli":"Core","ruangan":"R.TIND. ENDOSCOPY - IRNA 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":114,"poli":"Core","ruangan":"R.GILI TRAWANGAN - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":115,"poli":"Core","ruangan":"R.GILI TRAWANGAN - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":116,"poli":"Core","ruangan":"R.TONDANO - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":117,"poli":"Core","ruangan":"R.TIND. SPIROMETRI - IRNA IV","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":118,"poli":"Core","ruangan":"R.TIND. REHABILITASI MEDIK - IRM","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":119,"poli":"Core","ruangan":"R.TIND. RADIOTERAPI - INST. RADIOTERAPI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":120,"poli":"Core","ruangan":"R.TIND. MEDICAL CHECK UP JANTUNG - IPJT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":121,"poli":"Core","ruangan":"IGD - P0 COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":122,"poli":"Core","ruangan":"R.BARITO - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":123,"poli":"Core","ruangan":"R.TIND. BERSALIN - IRNA III","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":124,"poli":"Core","ruangan":"R.TIND. MATA - IRNA II","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":125,"poli":"Core","ruangan":"FARMASI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":126,"poli":"Core","ruangan":"IKF DAN MEDIKOLEGAL","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":127,"poli":"Core","ruangan":"R.TIND. BRONCHOSCOPY - IRNA 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":128,"poli":"Core","ruangan":"R.TIND. HEMODIALISIS - INST. DIALISIS","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":129,"poli":"Core","ruangan":"IGD - P1 COVID","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":130,"poli":"Core","ruangan":"INSTALASI PELATIHAN","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":131,"poli":"Core","ruangan":"BIDANG DIKLIT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":132,"poli":"Core","ruangan":"ITIKOM","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":133,"poli":"Core","ruangan":"BAGIAN UMUM","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":134,"poli":"Core","ruangan":"BAGIAN KEUANGAN & AKUNTANSI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":135,"poli":"Core","ruangan":"IPL","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":136,"poli":"Core","ruangan":"R.GILI TRAWANGAN - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":137,"poli":"Core","ruangan":"R.TIND. KATETERISASI JANTUNG - IPJT","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":138,"poli":"Core","ruangan":"R.TIND. CAPD - IRNA IV","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":139,"poli":"Core","ruangan":"R.TIND. ECHO - IRNA IV","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":140,"poli":"Core","ruangan":"R.HCU CILIWUNG - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":141,"poli":"Core","ruangan":"R.PICU KRAKATAU - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":142,"poli":"Core","ruangan":"RADIOLOGI","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":143,"poli":"Core","ruangan":"R.BUNAKEN - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":144,"poli":"Core","ruangan":"R.TOBA (BAYI) - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":145,"poli":"Core","ruangan":"R.TOBA (BAYI) KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":146,"poli":"Core","ruangan":"R.NICU MANINJAU - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":147,"poli":"Core","ruangan":"R.GALUNGGUNG - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":148,"poli":"Core","ruangan":"R.PANGANDARAN - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":149,"poli":"Core","ruangan":"R.MAWAR - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":150,"poli":"Core","ruangan":"R.MAWAR - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":151,"poli":"Core","ruangan":"R.TOBA (IBU) - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":152,"poli":"Core","ruangan":"R.BROMO - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":153,"poli":"Core","ruangan":"R.TOBA (IBU) - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":154,"poli":"Core","ruangan":"R.JIMBARAN - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":155,"poli":"Core","ruangan":"R.HCU KAWI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":156,"poli":"Core","ruangan":"R.NUSA DUA - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":157,"poli":"Core","ruangan":"R.KERINCI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":158,"poli":"Core","ruangan":"R.KERINCI - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":159,"poli":"Core","ruangan":"RUANG ROE - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":160,"poli":"Core","ruangan":"R.RANU KUMBOLO - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":161,"poli":"Core","ruangan":"R.SINGKARAK - KLS 3","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":162,"poli":"Core","ruangan":"R.LANTAI 2 - KLS I","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":163,"poli":"Core","ruangan":"R.ICU KAPUAS A - KLS 1","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":164,"poli":"Core","ruangan":"R.LANTAI 4 - KLS VIP A","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":165,"poli":"Core","ruangan":"KLINIK TB-SO","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":166,"poli":"Core","ruangan":"R.LANTAI 3 - KLS VIP A","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":167,"poli":"Core","ruangan":"R.ICU KAPUAS C - KLS 1 (Dewasa)","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":168,"poli":"Core","ruangan":"KLINIK PEL. UTAMA GRAND PAVILIUN","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":170,"poli":"Core","ruangan":"R.HCU RANU PANI - KLS 2","created_at":"2024-09-23 10:13:14","updated_at":"2024-09-23 10:13:14"},
|
||||
{"id":169,"poli":"Core","ruangan":"LAB MIKROBIOLOGI","created_at":"2024-09-23 10:13:14","updated_at":"2026-02-04 13:55:48"}
|
||||
]
|
||||
Executable
+7242
File diff suppressed because it is too large
Load diff
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'رسالة استثناء: :message',
|
||||
'exception_trace' => 'تتبع الإستثناء: :trace',
|
||||
'exception_message_title' => 'رسالة استثناء',
|
||||
'exception_trace_title' => 'تتبع الإستثناء',
|
||||
|
||||
'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name',
|
||||
'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name',
|
||||
|
||||
'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name',
|
||||
'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!',
|
||||
'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .',
|
||||
'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح',
|
||||
'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!',
|
||||
'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.',
|
||||
|
||||
'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية',
|
||||
'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية',
|
||||
'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية',
|
||||
'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem',
|
||||
'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.',
|
||||
'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error',
|
||||
'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.',
|
||||
'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.',
|
||||
'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.',
|
||||
'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'لم يتم عمل نسخ احتياطية حتى الآن',
|
||||
'application_name' => 'اسم التطبيق',
|
||||
'backup_name' => 'اسم النسخ الاحتياطي',
|
||||
'disk' => 'القرص',
|
||||
'newest_backup_size' => 'أحدث حجم للنسخ الاحتياطي',
|
||||
'number_of_backups' => 'عدد النسخ الاحتياطية',
|
||||
'total_storage_used' => 'إجمالي مساحة التخزين المستخدمة',
|
||||
'newest_backup_date' => 'أحدث تاريخ النسخ الاحتياطي',
|
||||
'oldest_backup_date' => 'أقدم تاريخ نسخ احتياطي',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Съобщение за изключение: :message',
|
||||
'exception_trace' => 'Проследяване на изключение: :trace',
|
||||
'exception_message_title' => 'Съобщение за изключение',
|
||||
'exception_trace_title' => 'Проследяване на изключение',
|
||||
|
||||
'backup_failed_subject' => 'Неуспешно резервно копие на :application_name',
|
||||
'backup_failed_body' => 'Важно: Възникна грешка при архивиране на :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Успешно ново резервно копие на :application_name',
|
||||
'backup_successful_subject_title' => 'Успешно ново резервно копие!',
|
||||
'backup_successful_body' => 'Чудесни новини, ново резервно копие на :application_name беше успешно създадено на диска с име :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Почистването на резервните копия на :application_name не бе успешно.',
|
||||
'cleanup_failed_body' => 'Възникна грешка при почистването на резервните копия на :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Почистването на архивите на :application_name е успешно',
|
||||
'cleanup_successful_subject_title' => 'Почистването на резервните копия е успешно!',
|
||||
'cleanup_successful_body' => 'Почистването на резервни копия на :application_name на диска с име :disk_name беше успешно.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Резервните копия за :application_name на диск :disk_name са здрави',
|
||||
'healthy_backup_found_subject_title' => 'Резервните копия за :application_name са здрави',
|
||||
'healthy_backup_found_body' => 'Резервните копия за :application_name се считат за здрави. Добра работа!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Важно: Резервните копия за :application_name не са здрави',
|
||||
'unhealthy_backup_found_subject_title' => 'Важно: Резервните копия за :application_name не са здрави. :проблем',
|
||||
'unhealthy_backup_found_body' => 'Резервните копия за :application_name на диск :disk_name не са здрави.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Дестинацията за резервни копия не може да бъде достигната. :грешка',
|
||||
'unhealthy_backup_found_empty' => 'Изобщо няма резервни копия на това приложение.',
|
||||
'unhealthy_backup_found_old' => 'Последното резервно копие, направено на :date, се счита за твърде старо.',
|
||||
'unhealthy_backup_found_unknown' => 'За съжаление не може да се определи точна причина.',
|
||||
'unhealthy_backup_found_full' => 'Резервните копия използват твърде много място за съхранение. Текущото използване е :disk_usage, което е по-високо от разрешеното ограничение на :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Все още не са правени резервни копия',
|
||||
'application_name' => 'Име на приложението',
|
||||
'backup_name' => 'Име на резервно копие',
|
||||
'disk' => 'Диск',
|
||||
'newest_backup_size' => 'Най-новият размер на резервно копие',
|
||||
'number_of_backups' => 'Брой резервни копия',
|
||||
'total_storage_used' => 'Общо използвано дисково пространство',
|
||||
'newest_backup_date' => 'Най-нова дата на резервно копие',
|
||||
'oldest_backup_date' => 'Най-старата дата на резервно копие',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'এক্সসেপশন বার্তা: :message',
|
||||
'exception_trace' => 'এক্সসেপশন ট্রেস: :trace',
|
||||
'exception_message_title' => 'এক্সসেপশন message',
|
||||
'exception_trace_title' => 'এক্সসেপশন ট্রেস',
|
||||
|
||||
'backup_failed_subject' => ':application_name এর ব্যাকআপ ব্যর্থ হয়েছে।',
|
||||
'backup_failed_body' => 'গুরুত্বপূর্ণঃ :application_name ব্যাক আপ করার সময় একটি ত্রুটি ঘটেছে।',
|
||||
|
||||
'backup_successful_subject' => ':application_name এর নতুন ব্যাকআপ সফল হয়েছে।',
|
||||
'backup_successful_subject_title' => 'নতুন ব্যাকআপ সফল হয়েছে!',
|
||||
'backup_successful_body' => 'খুশির খবর, :application_name এর নতুন ব্যাকআপ :disk_name ডিস্কে সফলভাবে তৈরি হয়েছে।',
|
||||
|
||||
'cleanup_failed_subject' => ':application_name ব্যাকআপগুলি সাফ করতে ব্যর্থ হয়েছে।',
|
||||
'cleanup_failed_body' => ':application_name ব্যাকআপগুলি সাফ করার সময় একটি ত্রুটি ঘটেছে।',
|
||||
|
||||
'cleanup_successful_subject' => ':application_name এর ব্যাকআপগুলি সফলভাবে সাফ করা হয়েছে।',
|
||||
'cleanup_successful_subject_title' => 'ব্যাকআপগুলি সফলভাবে সাফ করা হয়েছে!',
|
||||
'cleanup_successful_body' => ':application_name এর ব্যাকআপগুলি :disk_name ডিস্ক থেকে সফলভাবে সাফ করা হয়েছে।',
|
||||
|
||||
'healthy_backup_found_subject' => ':application_name এর ব্যাকআপগুলি :disk_name ডিস্কে স্বাস্থ্যকর অবস্থায় আছে।',
|
||||
'healthy_backup_found_subject_title' => ':application_name এর ব্যাকআপগুলি স্বাস্থ্যকর অবস্থায় আছে।',
|
||||
'healthy_backup_found_body' => ':application_name এর ব্যাকআপগুলি স্বাস্থ্যকর বিবেচনা করা হচ্ছে। Good job!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'গুরুত্বপূর্ণঃ :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে।',
|
||||
'unhealthy_backup_found_subject_title' => 'গুরুত্বপূর্ণঃ :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে। :problem',
|
||||
'unhealthy_backup_found_body' => ':disk_name ডিস্কের :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে।',
|
||||
'unhealthy_backup_found_not_reachable' => 'ব্যাকআপ গন্তব্যে পৌঁছানো যায় নি। :error',
|
||||
'unhealthy_backup_found_empty' => 'এই অ্যাপ্লিকেশনটির কোনও ব্যাকআপ নেই।',
|
||||
'unhealthy_backup_found_old' => 'সর্বশেষ ব্যাকআপ যেটি :date এই তারিখে করা হয়েছে, সেটি খুব পুরানো।',
|
||||
'unhealthy_backup_found_unknown' => 'দুঃখিত, সঠিক কারণ নির্ধারণ করা সম্ভব হয়নি।',
|
||||
'unhealthy_backup_found_full' => 'ব্যাকআপগুলি অতিরিক্ত স্টোরেজ ব্যবহার করছে। বর্তমান ব্যবহারের পরিমান :disk_usage যা অনুমোদিত সীমা :disk_limit এর বেশি।',
|
||||
|
||||
'no_backups_info' => 'কোনো ব্যাকআপ এখনও তৈরি হয়নি',
|
||||
'application_name' => 'আবেদনের নাম',
|
||||
'backup_name' => 'ব্যাকআপের নাম',
|
||||
'disk' => 'ডিস্ক',
|
||||
'newest_backup_size' => 'নতুন ব্যাকআপ আকার',
|
||||
'number_of_backups' => 'ব্যাকআপের সংখ্যা',
|
||||
'total_storage_used' => 'ব্যবহৃত মোট সঞ্চয়স্থান',
|
||||
'newest_backup_date' => 'নতুন ব্যাকআপের তারিখ',
|
||||
'oldest_backup_date' => 'পুরানো ব্যাকআপের তারিখ',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Zpráva výjimky: :message',
|
||||
'exception_trace' => 'Stopa výjimky: :trace',
|
||||
'exception_message_title' => 'Zpráva výjimky',
|
||||
'exception_trace_title' => 'Stopa výjimky',
|
||||
|
||||
'backup_failed_subject' => 'Záloha :application_name neuspěla',
|
||||
'backup_failed_body' => 'Důležité: Při záloze :application_name se vyskytla chyba',
|
||||
|
||||
'backup_successful_subject' => 'Úspěšná nová záloha :application_name',
|
||||
'backup_successful_subject_title' => 'Úspěšná nová záloha!',
|
||||
'backup_successful_body' => 'Dobrá zpráva, na disku jménem :disk_name byla úspěšně vytvořena nová záloha :application_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Vyčištění záloh :application_name neuspělo.',
|
||||
'cleanup_failed_body' => 'Při čištění záloh :application_name se vyskytla chyba',
|
||||
|
||||
'cleanup_successful_subject' => 'Vyčištění záloh :application_name úspěšné',
|
||||
'cleanup_successful_subject_title' => 'Vyčištění záloh bylo úspěšné!',
|
||||
'cleanup_successful_body' => 'Vyčištění záloh :application_name na disku jménem :disk_name bylo úspěšné.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Zálohy pro :application_name na disku :disk_name jsou zdravé',
|
||||
'healthy_backup_found_subject_title' => 'Zálohy pro :application_name jsou zdravé',
|
||||
'healthy_backup_found_body' => 'Zálohy pro :application_name jsou považovány za zdravé. Dobrá práce!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Důležité: Zálohy pro :application_name jsou nezdravé',
|
||||
'unhealthy_backup_found_subject_title' => 'Důležité: Zálohy pro :application_name jsou nezdravé. :problem',
|
||||
'unhealthy_backup_found_body' => 'Zálohy pro :application_name na disku :disk_name jsou nezdravé.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Nelze se dostat k cíli zálohy. :error',
|
||||
'unhealthy_backup_found_empty' => 'Tato aplikace nemá vůbec žádné zálohy.',
|
||||
'unhealthy_backup_found_old' => 'Poslední záloha vytvořená dne :date je považována za příliš starou.',
|
||||
'unhealthy_backup_found_unknown' => 'Omlouváme se, nemůžeme určit přesný důvod.',
|
||||
'unhealthy_backup_found_full' => 'Zálohy zabírají příliš mnoho místa na disku. Aktuální využití disku je :disk_usage, což je vyšší než povolený limit :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Zatím nebyly vytvořeny žádné zálohy',
|
||||
'application_name' => 'Název aplikace',
|
||||
'backup_name' => 'Název zálohy',
|
||||
'disk' => 'Disk',
|
||||
'newest_backup_size' => 'Velikost nejnovější zálohy',
|
||||
'number_of_backups' => 'Počet záloh',
|
||||
'total_storage_used' => 'Celková využitá kapacita úložiště',
|
||||
'newest_backup_date' => 'Datum nejnovější zálohy',
|
||||
'oldest_backup_date' => 'Datum nejstarší zálohy',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Fejlbesked: :message',
|
||||
'exception_trace' => 'Fejl trace: :trace',
|
||||
'exception_message_title' => 'Fejlbesked',
|
||||
'exception_trace_title' => 'Fejl trace',
|
||||
|
||||
'backup_failed_subject' => 'Backup af :application_name fejlede',
|
||||
'backup_failed_body' => 'Vigtigt: Der skete en fejl under backup af :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Ny backup af :application_name oprettet',
|
||||
'backup_successful_subject_title' => 'Ny backup!',
|
||||
'backup_successful_body' => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Oprydning af backups for :application_name fejlede.',
|
||||
'cleanup_failed_body' => 'Der skete en fejl under oprydning af backups for :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Oprydning af backups for :application_name gennemført',
|
||||
'cleanup_successful_subject_title' => 'Backup oprydning gennemført!',
|
||||
'cleanup_successful_body' => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK',
|
||||
'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK',
|
||||
'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt gået!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Vigtigt: Backups for :application_name fejlbehæftede',
|
||||
'unhealthy_backup_found_subject_title' => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem',
|
||||
'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er fejlbehæftede.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Backup destinationen kunne ikke findes. :error',
|
||||
'unhealthy_backup_found_empty' => 'Denne applikation har ingen backups overhovedet.',
|
||||
'unhealthy_backup_found_old' => 'Den seneste backup fra :date er for gammel.',
|
||||
'unhealthy_backup_found_unknown' => 'Beklager, en præcis årsag kunne ikke findes.',
|
||||
'unhealthy_backup_found_full' => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Der blev ikke foretaget nogen sikkerhedskopier endnu',
|
||||
'application_name' => 'Applikationens navn',
|
||||
'backup_name' => 'Backup navn',
|
||||
'disk' => 'Disk',
|
||||
'newest_backup_size' => 'Nyeste backup-størrelse',
|
||||
'number_of_backups' => 'Antal sikkerhedskopier',
|
||||
'total_storage_used' => 'Samlet lagerplads brugt',
|
||||
'newest_backup_date' => 'Nyeste backup-størrelse',
|
||||
'oldest_backup_date' => 'Ældste backup-størrelse',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Fehlermeldung: :message',
|
||||
'exception_trace' => 'Fehlerverfolgung: :trace',
|
||||
'exception_message_title' => 'Fehlermeldung',
|
||||
'exception_trace_title' => 'Fehlerverfolgung',
|
||||
|
||||
'backup_failed_subject' => 'Backup von :application_name konnte nicht erstellt werden',
|
||||
'backup_failed_body' => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten',
|
||||
|
||||
'backup_successful_subject' => 'Erfolgreiches neues Backup von :application_name',
|
||||
'backup_successful_subject_title' => 'Erfolgreiches neues Backup!',
|
||||
'backup_successful_body' => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.',
|
||||
|
||||
'cleanup_failed_subject' => 'Aufräumen der Backups von :application_name schlug fehl.',
|
||||
'cleanup_failed_body' => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten',
|
||||
|
||||
'cleanup_successful_subject' => 'Aufräumen der Backups von :application_name backups erfolgreich',
|
||||
'cleanup_successful_subject_title' => 'Aufräumen der Backups erfolgreich!',
|
||||
'cleanup_successful_body' => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Die Backups von :application_name in :disk_name sind gesund',
|
||||
'healthy_backup_found_subject_title' => 'Die Backups von :application_name sind Gesund',
|
||||
'healthy_backup_found_body' => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Wichtig: Die Backups für :application_name sind nicht gesund',
|
||||
'unhealthy_backup_found_subject_title' => 'Wichtig: Die Backups für :application_name sind ungesund. :problem',
|
||||
'unhealthy_backup_found_body' => 'Die Backups für :application_name in :disk_name sind ungesund.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Das Backup Ziel konnte nicht erreicht werden. :error',
|
||||
'unhealthy_backup_found_empty' => 'Es gibt für die Anwendung noch gar keine Backups.',
|
||||
'unhealthy_backup_found_old' => 'Das letzte Backup am :date ist zu lange her.',
|
||||
'unhealthy_backup_found_unknown' => 'Sorry, ein genauer Grund konnte nicht gefunden werden.',
|
||||
'unhealthy_backup_found_full' => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Bisher keine Backups vorhanden',
|
||||
'application_name' => 'Applikationsname',
|
||||
'backup_name' => 'Backup Name',
|
||||
'disk' => 'Speicherort',
|
||||
'newest_backup_size' => 'Neuste Backup-Größe',
|
||||
'number_of_backups' => 'Anzahl Backups',
|
||||
'total_storage_used' => 'Gesamter genutzter Speicherplatz',
|
||||
'newest_backup_date' => 'Neustes Backup',
|
||||
'oldest_backup_date' => 'Ältestes Backup',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Exception message: :message',
|
||||
'exception_trace' => 'Exception trace: :trace',
|
||||
'exception_message_title' => 'Exception message',
|
||||
'exception_trace_title' => 'Exception trace',
|
||||
|
||||
'backup_failed_subject' => 'Failed backup of :application_name',
|
||||
'backup_failed_body' => 'Important: An error occurred while backing up :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Successful new backup of :application_name',
|
||||
'backup_successful_subject_title' => 'Successful new backup!',
|
||||
'backup_successful_body' => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Cleaning up the backups of :application_name failed.',
|
||||
'cleanup_failed_body' => 'An error occurred while cleaning up the backups of :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Clean up of :application_name backups successful',
|
||||
'cleanup_successful_subject_title' => 'Clean up of backups successful!',
|
||||
'cleanup_successful_body' => 'The clean up of the :application_name backups on the disk named :disk_name was successful.',
|
||||
|
||||
'healthy_backup_found_subject' => 'The backups for :application_name on disk :disk_name are healthy',
|
||||
'healthy_backup_found_subject_title' => 'The backups for :application_name are healthy',
|
||||
'healthy_backup_found_body' => 'The backups for :application_name are considered healthy. Good job!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Important: The backups for :application_name are unhealthy',
|
||||
'unhealthy_backup_found_subject_title' => 'Important: The backups for :application_name are unhealthy. :problem',
|
||||
'unhealthy_backup_found_body' => 'The backups for :application_name on disk :disk_name are unhealthy.',
|
||||
'unhealthy_backup_found_not_reachable' => 'The backup destination cannot be reached. :error',
|
||||
'unhealthy_backup_found_empty' => 'There are no backups of this application at all.',
|
||||
'unhealthy_backup_found_old' => 'The latest backup made on :date is considered too old.',
|
||||
'unhealthy_backup_found_unknown' => 'Sorry, an exact reason cannot be determined.',
|
||||
'unhealthy_backup_found_full' => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'No backups were made yet',
|
||||
'application_name' => 'Application name',
|
||||
'backup_name' => 'Backup name',
|
||||
'disk' => 'Disk',
|
||||
'newest_backup_size' => 'Newest backup size',
|
||||
'number_of_backups' => 'Number of backups',
|
||||
'total_storage_used' => 'Total storage used',
|
||||
'newest_backup_date' => 'Newest backup date',
|
||||
'oldest_backup_date' => 'Oldest backup date',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Mensaje de la excepción: :message',
|
||||
'exception_trace' => 'Traza de la excepción: :trace',
|
||||
'exception_message_title' => 'Mensaje de la excepción',
|
||||
'exception_trace_title' => 'Traza de la excepción',
|
||||
|
||||
'backup_failed_subject' => 'Copia de seguridad de :application_name fallida',
|
||||
'backup_failed_body' => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Se completó con éxito la copia de seguridad de :application_name',
|
||||
'backup_successful_subject_title' => '¡Nueva copia de seguridad creada con éxito!',
|
||||
'backup_successful_body' => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'La limpieza de copias de seguridad de :application_name falló.',
|
||||
'cleanup_failed_body' => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'La limpieza de copias de seguridad de :application_name se completó con éxito',
|
||||
'cleanup_successful_subject_title' => '!Limpieza de copias de seguridad completada con éxito!',
|
||||
'cleanup_successful_body' => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado',
|
||||
'healthy_backup_found_subject_title' => 'Las copias de seguridad de :application_name están en buen estado',
|
||||
'healthy_backup_found_body' => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Importante: Las copias de seguridad de :application_name están en mal estado',
|
||||
'unhealthy_backup_found_subject_title' => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem',
|
||||
'unhealthy_backup_found_body' => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.',
|
||||
'unhealthy_backup_found_not_reachable' => 'No se puede acceder al destino de la copia de seguridad. :error',
|
||||
'unhealthy_backup_found_empty' => 'No existe ninguna copia de seguridad de esta aplicación.',
|
||||
'unhealthy_backup_found_old' => 'La última copia de seguriad hecha en :date es demasiado antigua.',
|
||||
'unhealthy_backup_found_unknown' => 'Lo siento, no es posible determinar la razón exacta.',
|
||||
'unhealthy_backup_found_full' => 'Las copias de seguridad están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Aún no se hicieron copias de seguridad',
|
||||
'application_name' => 'Nombre de la aplicación',
|
||||
'backup_name' => 'Nombre de la copia de seguridad',
|
||||
'disk' => 'Disco',
|
||||
'newest_backup_size' => 'Tamaño de copia de seguridad más reciente',
|
||||
'number_of_backups' => 'Número de copias de seguridad',
|
||||
'total_storage_used' => 'Almacenamiento total utilizado',
|
||||
'newest_backup_date' => 'Fecha de la copia de seguridad más reciente',
|
||||
'oldest_backup_date' => 'Fecha de la copia de seguridad más antigua',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'پیغام خطا: :message',
|
||||
'exception_trace' => 'جزییات خطا: :trace',
|
||||
'exception_message_title' => 'پیغام خطا',
|
||||
'exception_trace_title' => 'جزییات خطا',
|
||||
|
||||
'backup_failed_subject' => 'پشتیبانگیری :application_name با خطا مواجه شد.',
|
||||
'backup_failed_body' => 'پیغام مهم: هنگام پشتیبانگیری از :application_name خطایی رخ داده است. ',
|
||||
|
||||
'backup_successful_subject' => 'نسخه پشتیبان جدید :application_name با موفقیت ساخته شد.',
|
||||
'backup_successful_subject_title' => 'پشتیبانگیری موفق!',
|
||||
'backup_successful_body' => 'خبر خوب، به تازگی نسخه پشتیبان :application_name روی دیسک :disk_name با موفقیت ساخته شد. ',
|
||||
|
||||
'cleanup_failed_subject' => 'پاکسازی نسخه پشتیبان :application_name انجام نشد.',
|
||||
'cleanup_failed_body' => 'هنگام پاکسازی نسخه پشتیبان :application_name خطایی رخ داده است.',
|
||||
|
||||
'cleanup_successful_subject' => 'پاکسازی نسخه پشتیبان :application_name با موفقیت انجام شد.',
|
||||
'cleanup_successful_subject_title' => 'پاکسازی نسخه پشتیبان!',
|
||||
'cleanup_successful_body' => 'پاکسازی نسخه پشتیبان :application_name روی دیسک :disk_name با موفقیت انجام شد.',
|
||||
|
||||
'healthy_backup_found_subject' => 'نسخه پشتیبان :application_name روی دیسک :disk_name سالم بود.',
|
||||
'healthy_backup_found_subject_title' => 'نسخه پشتیبان :application_name سالم بود.',
|
||||
'healthy_backup_found_body' => 'نسخه پشتیبان :application_name به نظر سالم میاد. دمت گرم!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود.',
|
||||
'unhealthy_backup_found_subject_title' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود. :problem',
|
||||
'unhealthy_backup_found_body' => 'نسخه پشتیبان :application_name روی دیسک :disk_name سالم نبود.',
|
||||
'unhealthy_backup_found_not_reachable' => 'مقصد پشتیبانگیری در دسترس نبود. :error',
|
||||
'unhealthy_backup_found_empty' => 'برای این برنامه هیچ نسخه پشتیبانی وجود ندارد.',
|
||||
'unhealthy_backup_found_old' => 'آخرین نسخه پشتیبان برای تاریخ :date است، که به نظر خیلی قدیمی میاد. ',
|
||||
'unhealthy_backup_found_unknown' => 'متاسفانه دلیل دقیقی قابل تعیین نیست.',
|
||||
'unhealthy_backup_found_full' => 'نسخههای پشتیبان حجم زیادی اشغال کردهاند. میزان دیسک استفادهشده :disk_usage است که از میزان مجاز :disk_limit فراتر رفته است. ',
|
||||
|
||||
'no_backups_info' => 'هنوز نسخه پشتیبان تهیه نشده است',
|
||||
'application_name' => 'نام نرمافزار',
|
||||
'backup_name' => 'نام نسخه پشتیبان',
|
||||
'disk' => 'دیسک',
|
||||
'newest_backup_size' => 'اندازه جدیدترین نسخه پشتیبان',
|
||||
'number_of_backups' => 'تعداد نسخههای پشتیبان',
|
||||
'total_storage_used' => 'کل فضای ذخیرهسازی استفادهشده',
|
||||
'newest_backup_date' => 'تاریخ جدیدترین نسخه پشتیبان',
|
||||
'oldest_backup_date' => 'تاریخ قدیمیترین نسخه پشتیبان',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Virheilmoitus: :message',
|
||||
'exception_trace' => 'Virhe, jäljitys: :trace',
|
||||
'exception_message_title' => 'Virheilmoitus',
|
||||
'exception_trace_title' => 'Virheen jäljitys',
|
||||
|
||||
'backup_failed_subject' => ':application_name varmuuskopiointi epäonnistui',
|
||||
'backup_failed_body' => 'HUOM!: :application_name varmuuskoipionnissa tapahtui virhe',
|
||||
|
||||
'backup_successful_subject' => ':application_name varmuuskopioitu onnistuneesti',
|
||||
'backup_successful_subject_title' => 'Uusi varmuuskopio!',
|
||||
'backup_successful_body' => 'Hyviä uutisia! :application_name on varmuuskopioitu levylle :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => ':application_name varmuuskopioiden poistaminen epäonnistui.',
|
||||
'cleanup_failed_body' => ':application_name varmuuskopioiden poistamisessa tapahtui virhe.',
|
||||
|
||||
'cleanup_successful_subject' => ':application_name varmuuskopiot poistettu onnistuneesti',
|
||||
'cleanup_successful_subject_title' => 'Varmuuskopiot poistettu onnistuneesti!',
|
||||
'cleanup_successful_body' => ':application_name varmuuskopiot poistettu onnistuneesti levyltä :disk_name.',
|
||||
|
||||
'healthy_backup_found_subject' => ':application_name varmuuskopiot levyllä :disk_name ovat kunnossa',
|
||||
'healthy_backup_found_subject_title' => ':application_name varmuuskopiot ovat kunnossa',
|
||||
'healthy_backup_found_body' => ':application_name varmuuskopiot ovat kunnossa. Hieno homma!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'HUOM!: :application_name varmuuskopiot ovat vialliset',
|
||||
'unhealthy_backup_found_subject_title' => 'HUOM!: :application_name varmuuskopiot ovat vialliset. :problem',
|
||||
'unhealthy_backup_found_body' => ':application_name varmuuskopiot levyllä :disk_name ovat vialliset.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Varmuuskopioiden kohdekansio ei ole saatavilla. :error',
|
||||
'unhealthy_backup_found_empty' => 'Tästä sovelluksesta ei ole varmuuskopioita.',
|
||||
'unhealthy_backup_found_old' => 'Viimeisin varmuuskopio, luotu :date, on liian vanha.',
|
||||
'unhealthy_backup_found_unknown' => 'Virhe, tarkempaa tietoa syystä ei valitettavasti ole saatavilla.',
|
||||
'unhealthy_backup_found_full' => 'Varmuuskopiot vievät liikaa levytilaa. Tällä hetkellä käytössä :disk_usage, mikä on suurempi kuin sallittu tilavuus (:disk_limit).',
|
||||
|
||||
'no_backups_info' => 'Varmuuskopioita ei vielä tehty',
|
||||
'application_name' => 'Sovelluksen nimi',
|
||||
'backup_name' => 'Varmuuskopion nimi',
|
||||
'disk' => 'Levy',
|
||||
'newest_backup_size' => 'Uusin varmuuskopion koko',
|
||||
'number_of_backups' => 'Varmuuskopioiden määrä',
|
||||
'total_storage_used' => 'Käytetty tallennustila yhteensä',
|
||||
'newest_backup_date' => 'Uusin varmuuskopion koko',
|
||||
'oldest_backup_date' => 'Vanhin varmuuskopion koko',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => "Message de l'exception : :message",
|
||||
'exception_trace' => "Trace de l'exception : :trace",
|
||||
'exception_message_title' => "Message de l'exception",
|
||||
'exception_trace_title' => "Trace de l'exception",
|
||||
|
||||
'backup_failed_subject' => 'Échec de la sauvegarde de :application_name',
|
||||
'backup_failed_body' => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Succès de la sauvegarde de :application_name',
|
||||
'backup_successful_subject_title' => 'Sauvegarde créée avec succès !',
|
||||
'backup_successful_body' => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créée avec succès sur le disque nommé :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Le nettoyage des sauvegardes de :application_name a echoué.',
|
||||
'cleanup_failed_body' => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Succès du nettoyage des sauvegardes de :application_name',
|
||||
'cleanup_successful_subject_title' => 'Sauvegardes nettoyées avec succès !',
|
||||
'cleanup_successful_body' => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines',
|
||||
'healthy_backup_found_subject_title' => 'Les sauvegardes pour :application_name sont saines',
|
||||
'healthy_backup_found_body' => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Important : Les sauvegardes pour :application_name sont corrompues',
|
||||
'unhealthy_backup_found_subject_title' => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem',
|
||||
'unhealthy_backup_found_body' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.',
|
||||
'unhealthy_backup_found_not_reachable' => "La destination de la sauvegarde n'est pas accessible. :error",
|
||||
'unhealthy_backup_found_empty' => "Il n'y a aucune sauvegarde pour cette application.",
|
||||
'unhealthy_backup_found_old' => 'La dernière sauvegarde du :date est considérée trop vieille.',
|
||||
'unhealthy_backup_found_unknown' => 'Désolé, une raison exacte ne peut être déterminée.',
|
||||
'unhealthy_backup_found_full' => 'Les sauvegardes utilisent trop d\'espace disque. L\'utilisation actuelle est de :disk_usage alors que la limite autorisée est de :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Aucune sauvegarde n\'a encore été effectuée',
|
||||
'application_name' => "Nom de l'application",
|
||||
'backup_name' => 'Nom de la sauvegarde',
|
||||
'disk' => 'Disque',
|
||||
'newest_backup_size' => 'Taille de la sauvegarde la plus récente',
|
||||
'number_of_backups' => 'Nombre de sauvegardes',
|
||||
'total_storage_used' => 'Stockage total utilisé',
|
||||
'newest_backup_date' => 'Date de la sauvegarde la plus récente',
|
||||
'oldest_backup_date' => 'Date de la sauvegarde la plus ancienne',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'הודעת חריגה: :message',
|
||||
'exception_trace' => 'מעקב חריגה: :trace',
|
||||
'exception_message_title' => 'הודעת חריגה',
|
||||
'exception_trace_title' => 'מעקב חריגה',
|
||||
|
||||
'backup_failed_subject' => 'כשל בגיבוי של :application_name',
|
||||
'backup_failed_body' => 'חשוב: אירעה שגיאה במהלך גיבוי היישום :application_name',
|
||||
|
||||
'backup_successful_subject' => 'גיבוי חדש מוצלח של :application_name',
|
||||
'backup_successful_subject_title' => 'גיבוי חדש מוצלח!',
|
||||
'backup_successful_body' => 'חדשות טובות, גיבוי חדש של :application_name נוצר בהצלחה על הדיסק בשם :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'נכשל בניקוי הגיבויים של :application_name',
|
||||
'cleanup_failed_body' => 'אירעה שגיאה במהלך ניקוי הגיבויים של :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'ניקוי הגיבויים של :application_name בוצע בהצלחה',
|
||||
'cleanup_successful_subject_title' => 'ניקוי הגיבויים בוצע בהצלחה!',
|
||||
'cleanup_successful_body' => 'ניקוי הגיבויים של :application_name על הדיסק בשם :disk_name בוצע בהצלחה.',
|
||||
|
||||
'healthy_backup_found_subject' => 'הגיבויים של :application_name על הדיסק :disk_name תקינים',
|
||||
'healthy_backup_found_subject_title' => 'הגיבויים של :application_name תקינים',
|
||||
'healthy_backup_found_body' => 'הגיבויים של :application_name נחשבים לתקינים. עבודה טובה!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'חשוב: הגיבויים של :application_name אינם תקינים',
|
||||
'unhealthy_backup_found_subject_title' => 'חשוב: הגיבויים של :application_name אינם תקינים. :problem',
|
||||
'unhealthy_backup_found_body' => 'הגיבויים של :application_name על הדיסק :disk_name אינם תקינים.',
|
||||
'unhealthy_backup_found_not_reachable' => 'לא ניתן להגיע ליעד הגיבוי. :error',
|
||||
'unhealthy_backup_found_empty' => 'אין גיבויים של היישום הזה בכלל.',
|
||||
'unhealthy_backup_found_old' => 'הגיבוי האחרון שנעשה בתאריך :date נחשב כישן מדי.',
|
||||
'unhealthy_backup_found_unknown' => 'מצטערים, לא ניתן לקבוע סיבה מדויקת.',
|
||||
'unhealthy_backup_found_full' => 'הגיבויים משתמשים בשטח אחסון רב מידי. שימוש הנוכחי הוא :disk_usage, שגבול המותר הוא :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'לא נעשו עדיין גיבויים',
|
||||
'application_name' => 'שם היישום',
|
||||
'backup_name' => 'שם הגיבוי',
|
||||
'disk' => 'דיסק',
|
||||
'newest_backup_size' => 'גודל הגיבוי החדש ביותר',
|
||||
'number_of_backups' => 'מספר הגיבויים',
|
||||
'total_storage_used' => 'סך האחסון המופעל',
|
||||
'newest_backup_date' => 'תאריך הגיבוי החדש ביותר',
|
||||
'oldest_backup_date' => 'תאריך הגיבוי הישן ביותר',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'अपवाद संदेश: :message',
|
||||
'exception_trace' => 'अपवाद निशान: :trace',
|
||||
'exception_message_title' => 'अपवादी संदेश',
|
||||
'exception_trace_title' => 'अपवाद निशान',
|
||||
|
||||
'backup_failed_subject' => ':application_name का बैकअप असफल रहा',
|
||||
'backup_failed_body' => 'जरूरी सुचना: :application_name का बैकअप लेते समय असफल रहे',
|
||||
|
||||
'backup_successful_subject' => ':application_name का बैकअप सफल रहा',
|
||||
'backup_successful_subject_title' => 'बैकअप सफल रहा!',
|
||||
'backup_successful_body' => 'खुशखबर, :application_name का बैकअप :disk_name पर संग्रहित करने मे सफल रहे.',
|
||||
|
||||
'cleanup_failed_subject' => ':application_name के बैकअप की सफाई असफल रही.',
|
||||
'cleanup_failed_body' => ':application_name के बैकअप की सफाई करते समय कुछ बाधा आयी है.',
|
||||
|
||||
'cleanup_successful_subject' => ':application_name के बैकअप की सफाई सफल रही',
|
||||
'cleanup_successful_subject_title' => 'बैकअप की सफाई सफल रही!',
|
||||
'cleanup_successful_body' => ':application_name का बैकअप जो :disk_name नाम की डिस्क पर संग्रहित है, उसकी सफाई सफल रही.',
|
||||
|
||||
'healthy_backup_found_subject' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप स्वस्थ है',
|
||||
'healthy_backup_found_subject_title' => ':application_name के सभी बैकअप स्वस्थ है',
|
||||
'healthy_backup_found_body' => 'बहुत बढ़िया! :application_name के सभी बैकअप स्वस्थ है.',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'जरूरी सुचना : :application_name के बैकअप अस्वस्थ है',
|
||||
'unhealthy_backup_found_subject_title' => 'जरूरी सुचना : :application_name के बैकअप :problem के बजेसे अस्वस्थ है',
|
||||
'unhealthy_backup_found_body' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप अस्वस्थ है',
|
||||
'unhealthy_backup_found_not_reachable' => ':error के बजेसे बैकअप की मंजिल तक पोहोच नहीं सकते.',
|
||||
'unhealthy_backup_found_empty' => 'इस एप्लीकेशन का कोई भी बैकअप नहीं है.',
|
||||
'unhealthy_backup_found_old' => 'हालहीमें :date को लिया हुआ बैकअप बहुत पुराना है.',
|
||||
'unhealthy_backup_found_unknown' => 'माफ़ कीजिये, सही कारण निर्धारित नहीं कर सकते.',
|
||||
'unhealthy_backup_found_full' => 'सभी बैकअप बहुत ज्यादा जगह का उपयोग कर रहे है. फ़िलहाल सभी बैकअप :disk_usage जगह का उपयोग कर रहे है, जो की :disk_limit अनुमति सीमा से अधिक का है.',
|
||||
|
||||
'no_backups_info' => 'अभी तक कोई बैकअप नहीं बनाया गया था',
|
||||
'application_name' => 'आवेदन का नाम',
|
||||
'backup_name' => 'बैकअप नाम',
|
||||
'disk' => 'डिस्क',
|
||||
'newest_backup_size' => 'नवीनतम बैकअप आकार',
|
||||
'number_of_backups' => 'बैकअप की संख्या',
|
||||
'total_storage_used' => 'उपयोग किया गया कुल संग्रहण',
|
||||
'newest_backup_date' => 'नवीनतम बैकअप आकार',
|
||||
'oldest_backup_date' => 'सबसे पुराना बैकअप आकार',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Greška: :message',
|
||||
'exception_trace' => 'Praćenje greške: :trace',
|
||||
'exception_message_title' => 'Greška',
|
||||
'exception_trace_title' => 'Praćenje greške',
|
||||
|
||||
'backup_failed_subject' => 'Neuspješno sigurnosno kopiranje za :application_name',
|
||||
'backup_failed_body' => 'Važno: Došlo je do greške prilikom sigurnosnog kopiranja za :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Uspješno sigurnosno kopiranje za :application_name',
|
||||
'backup_successful_subject_title' => 'Uspješno sigurnosno kopiranje!',
|
||||
'backup_successful_body' => 'Nova sigurnosna kopija za :application_name je uspješno spremljena na disk :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Neuspješno čišćenje sigurnosnih kopija za :application_name',
|
||||
'cleanup_failed_body' => 'Došlo je do greške prilikom čišćenja sigurnosnih kopija za :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Uspješno čišćenje sigurnosnih kopija za :application_name',
|
||||
'cleanup_successful_subject_title' => 'Uspješno čišćenje sigurnosnih kopija!',
|
||||
'cleanup_successful_body' => 'Sigurnosne kopije za :application_name su uspješno očišćene s diska :disk_name.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Sigurnosne kopije za :application_name na disku :disk_name su zdrave',
|
||||
'healthy_backup_found_subject_title' => 'Sigurnosne kopije za :application_name su zdrave',
|
||||
'healthy_backup_found_body' => 'Sigurnosne kopije za :application_name se smatraju zdravima. Svaka čast!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Važno: Sigurnosne kopije za :application_name su nezdrave',
|
||||
'unhealthy_backup_found_subject_title' => 'Važno: Sigurnosne kopije za :application_name su nezdrave. :problem',
|
||||
'unhealthy_backup_found_body' => 'Sigurnosne kopije za :application_name na disku :disk_name su nezdrave.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Destinacija sigurnosne kopije nije dohvatljiva. :error',
|
||||
'unhealthy_backup_found_empty' => 'Nijedna sigurnosna kopija ove aplikacije ne postoji.',
|
||||
'unhealthy_backup_found_old' => 'Zadnja sigurnosna kopija generirana na datum :date smatra se prestarom.',
|
||||
'unhealthy_backup_found_unknown' => 'Isprike, ali nije moguće odrediti razlog.',
|
||||
'unhealthy_backup_found_full' => 'Sigurnosne kopije zauzimaju previše prostora. Trenutno zauzeće je :disk_usage što je više od dozvoljenog ograničenja od :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Nema sigurnosnih kopija',
|
||||
'application_name' => 'Naziv aplikacije',
|
||||
'backup_name' => 'Naziv sigurnosne kopije',
|
||||
'disk' => 'Disk',
|
||||
'newest_backup_size' => 'Veličina najnovije sigurnosne kopije',
|
||||
'number_of_backups' => 'Broj sigurnosnih kopija',
|
||||
'total_storage_used' => 'Ukupno zauzeće',
|
||||
'newest_backup_date' => 'Najnovija kopija na datum',
|
||||
'oldest_backup_date' => 'Najstarija kopija na datum',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => 'Pesan pengecualian: :message',
|
||||
'exception_trace' => 'Jejak pengecualian: :trace',
|
||||
'exception_message_title' => 'Pesan pengecualian',
|
||||
'exception_trace_title' => 'Jejak pengecualian',
|
||||
|
||||
'backup_failed_subject' => 'Gagal backup :application_name',
|
||||
'backup_failed_body' => 'Penting: Sebuah error terjadi ketika membackup :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Backup baru sukses dari :application_name',
|
||||
'backup_successful_subject_title' => 'Backup baru sukses!',
|
||||
'backup_successful_body' => 'Kabar baik, sebuah backup baru dari :application_name sukses dibuat pada disk bernama :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Membersihkan backup dari :application_name yang gagal.',
|
||||
'cleanup_failed_body' => 'Sebuah error teradi ketika membersihkan backup dari :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Sukses membersihkan backup :application_name',
|
||||
'cleanup_successful_subject_title' => 'Sukses membersihkan backup!',
|
||||
'cleanup_successful_body' => 'Pembersihan backup :application_name pada disk bernama :disk_name telah sukses.',
|
||||
|
||||
'healthy_backup_found_subject' => 'Backup untuk :application_name pada disk :disk_name sehat',
|
||||
'healthy_backup_found_subject_title' => 'Backup untuk :application_name sehat',
|
||||
'healthy_backup_found_body' => 'Backup untuk :application_name dipertimbangkan sehat. Kerja bagus!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Penting: Backup untuk :application_name tidak sehat',
|
||||
'unhealthy_backup_found_subject_title' => 'Penting: Backup untuk :application_name tidak sehat. :problem',
|
||||
'unhealthy_backup_found_body' => 'Backup untuk :application_name pada disk :disk_name tidak sehat.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Tujuan backup tidak dapat terjangkau. :error',
|
||||
'unhealthy_backup_found_empty' => 'Tidak ada backup pada aplikasi ini sama sekali.',
|
||||
'unhealthy_backup_found_old' => 'Backup terakhir dibuat pada :date dimana dipertimbahkan sudah sangat lama.',
|
||||
'unhealthy_backup_found_unknown' => 'Maaf, sebuah alasan persisnya tidak dapat ditentukan.',
|
||||
'unhealthy_backup_found_full' => 'Backup menggunakan terlalu banyak kapasitas penyimpanan. Penggunaan terkini adalah :disk_usage dimana lebih besar dari batas yang diperbolehkan yaitu :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Belum ada backup yang dibuat',
|
||||
'application_name' => 'Nama aplikasi',
|
||||
'backup_name' => 'Nama cadangan',
|
||||
'disk' => 'Disk',
|
||||
'newest_backup_size' => 'Ukuran cadangan terbaru',
|
||||
'number_of_backups' => 'Jumlah cadangan',
|
||||
'total_storage_used' => 'Total penyimpanan yang digunakan',
|
||||
'newest_backup_date' => 'Ukuran cadangan terbaru',
|
||||
'oldest_backup_date' => 'Ukuran cadangan tertua',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => "Messaggio dell'eccezione: :message",
|
||||
'exception_trace' => "Traccia dell'eccezione: :trace",
|
||||
'exception_message_title' => "Messaggio dell'eccezione",
|
||||
'exception_trace_title' => "Traccia dell'eccezione",
|
||||
|
||||
'backup_failed_subject' => 'Fallito il backup di :application_name',
|
||||
'backup_failed_body' => 'Importante: Si è verificato un errore durante il backup di :application_name',
|
||||
|
||||
'backup_successful_subject' => 'Creato nuovo backup di :application_name',
|
||||
'backup_successful_subject_title' => 'Nuovo backup creato!',
|
||||
'backup_successful_body' => 'Grande notizia, un nuovo backup di :application_name è stato creato con successo sul disco :disk_name.',
|
||||
|
||||
'cleanup_failed_subject' => 'Pulizia dei backup di :application_name fallita.',
|
||||
'cleanup_failed_body' => 'Si è verificato un errore durante la pulizia dei backup di :application_name',
|
||||
|
||||
'cleanup_successful_subject' => 'Pulizia dei backup di :application_name avvenuta con successo',
|
||||
'cleanup_successful_subject_title' => 'Pulizia dei backup avvenuta con successo!',
|
||||
'cleanup_successful_body' => 'La pulizia dei backup di :application_name sul disco :disk_name è avvenuta con successo.',
|
||||
|
||||
'healthy_backup_found_subject' => 'I backup per :application_name sul disco :disk_name sono sani',
|
||||
'healthy_backup_found_subject_title' => 'I backup per :application_name sono sani',
|
||||
'healthy_backup_found_body' => 'I backup per :application_name sono considerati sani. Bel Lavoro!',
|
||||
|
||||
'unhealthy_backup_found_subject' => 'Importante: i backup per :application_name sono corrotti',
|
||||
'unhealthy_backup_found_subject_title' => 'Importante: i backup per :application_name sono corrotti. :problem',
|
||||
'unhealthy_backup_found_body' => 'I backup per :application_name sul disco :disk_name sono corrotti.',
|
||||
'unhealthy_backup_found_not_reachable' => 'Impossibile raggiungere la destinazione di backup. :error',
|
||||
'unhealthy_backup_found_empty' => 'Non esiste alcun backup di questa applicazione.',
|
||||
'unhealthy_backup_found_old' => 'L\'ultimo backup fatto il :date è considerato troppo vecchio.',
|
||||
'unhealthy_backup_found_unknown' => 'Spiacenti, non è possibile determinare una ragione esatta.',
|
||||
'unhealthy_backup_found_full' => 'I backup utilizzano troppa memoria. L\'utilizzo corrente è :disk_usage che è superiore al limite consentito di :disk_limit.',
|
||||
|
||||
'no_backups_info' => 'Non sono stati ancora effettuati backup',
|
||||
'application_name' => "Nome dell'applicazione",
|
||||
'backup_name' => 'Nome di backup',
|
||||
'disk' => 'Disco',
|
||||
'newest_backup_size' => 'Dimensione backup più recente',
|
||||
'number_of_backups' => 'Numero di backup',
|
||||
'total_storage_used' => 'Spazio di archiviazione totale utilizzato',
|
||||
'newest_backup_date' => 'Data del backup più recente',
|
||||
'oldest_backup_date' => 'Data del backup più vecchio',
|
||||
];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'exception_message' => '例外のメッセージ: :message',
|
||||
'exception_trace' => '例外の追跡: :trace',
|
||||
'exception_message_title' => '例外のメッセージ',
|
||||
'exception_trace_title' => '例外の追跡',
|
||||
|
||||
'backup_failed_subject' => ':application_name のバックアップに失敗しました。',
|
||||
'backup_failed_body' => '重要: :application_name のバックアップ中にエラーが発生しました。',
|
||||
|
||||
'backup_successful_subject' => ':application_name のバックアップに成功しました。',
|
||||
'backup_successful_subject_title' => 'バックアップに成功しました!',
|
||||
'backup_successful_body' => '朗報です。ディスク :disk_name へ :application_name のバックアップが成功しました。',
|
||||
|
||||
'cleanup_failed_subject' => ':application_name のバックアップ削除に失敗しました。',
|
||||
'cleanup_failed_body' => ':application_name のバックアップ削除中にエラーが発生しました。',
|
||||
|
||||
'cleanup_successful_subject' => ':application_name のバックアップ削除に成功しました。',
|
||||
'cleanup_successful_subject_title' => 'バックアップ削除に成功しました!',
|
||||
'cleanup_successful_body' => 'ディスク :disk_name に保存された :application_name のバックアップ削除に成功しました。',
|
||||
|
||||
'healthy_backup_found_subject' => 'ディスク :disk_name への :application_name のバックアップは正常です。',
|
||||
'healthy_backup_found_subject_title' => ':application_name のバックアップは正常です。',
|
||||
'healthy_backup_found_body' => ':application_name へのバックアップは正常です。いい仕事してますね!',
|
||||
|
||||
'unhealthy_backup_found_subject' => '重要: :application_name のバックアップに異常があります。',
|
||||
'unhealthy_backup_found_subject_title' => '重要: :application_name のバックアップに異常があります。 :problem',
|
||||
'unhealthy_backup_found_body' => ':disk_name への :application_name のバックアップに異常があります。',
|
||||
'unhealthy_backup_found_not_reachable' => 'バックアップ先にアクセスできませんでした。 :error',
|
||||
'unhealthy_backup_found_empty' => 'このアプリケーションのバックアップは見つかりませんでした。',
|
||||
'unhealthy_backup_found_old' => ':date に保存された直近のバックアップが古すぎます。',
|
||||
'unhealthy_backup_found_unknown' => '申し訳ございません。予期せぬエラーです。',
|
||||
'unhealthy_backup_found_full' => 'バックアップがディスク容量を圧迫しています。現在の使用量 :disk_usage は、許可された限界値 :disk_limit を超えています。',
|
||||
|
||||
'no_backups_info' => 'バックアップはまだ作成されていません',
|
||||
'application_name' => 'アプリケーション名',
|
||||
'backup_name' => 'バックアップ名',
|
||||
'disk' => 'ディスク',
|
||||
'newest_backup_size' => '最新のバックアップサイズ',
|
||||
'number_of_backups' => 'バックアップ数',
|
||||
'total_storage_used' => '使用された合計ストレージ',
|
||||
'newest_backup_date' => '最新のバックアップ日時',
|
||||
'oldest_backup_date' => '最も古いバックアップ日時',
|
||||
];
|
||||
Loaded 100 of 15282 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in New Issue
Block a user