Compare commits

..
370 Commits
Author SHA1 Message Date
Dwi Swandhana 513eacbfa1 update 2026-06-15 05:40:35 +07:00
Dwi Swandhana d3ac4fc33f update 2026-06-11 12:07:23 +08:00
Dwi Swandhana f7cb75c9cf update 2026-06-09 18:02:18 +07:00
Dwi Swandhana b793755d95 update 2026-06-09 08:56:30 +07:00
Dwi Swandhana fb6e11c0e6 update 2026-06-08 11:38:15 +07:00
Dwi Swandhana 305c87de9a update 2026-06-08 11:36:47 +07:00
Dwi Swandhana 3660303c3c update 2026-06-06 06:26:23 +07:00
Dwi Swandhana 050ff69068 update 2026-06-05 04:57:21 +07:00
Dwi Swandhana 5064baa89e update 2026-06-04 15:21:11 +07:00
Dwi Swandhana 8ee7760ad4 update 2026-06-04 15:15:39 +07:00
Dwi Swandhana c6522590fa update 2026-06-03 18:05:00 +07:00
Dwi Swandhana 90c7a70214 update 2026-06-03 17:58:55 +07:00
Dwi Swandhana 46c6c2f48b update 2026-05-31 04:51:20 +07:00
Dwi Swandhana dd227a88b3 update 2026-05-25 08:22:29 +07:00
Dwi Swandhana 0ffa8786c2 update 2026-05-25 04:56:48 +07:00
Dwi Swandhana 9fa23b9826 update 2026-05-21 09:56:40 +07:00
Dwi Swandhana 3e9e8daea6 update 2026-05-21 06:37:14 +07:00
Dwi Swandhana acac1fe3c8 update 2026-05-19 20:34:27 +07:00
Dwi Swandhana 714b6ab26d update 2026-05-19 20:19:36 +07:00
Dwi Swandhana a9c6cf12ca update 2026-05-19 17:51:09 +07:00
Dwi Swandhana 930cf48cfe update 2026-05-18 12:46:11 +07:00
Dwi Swandhana a0a2e79067 update 2026-05-18 12:36:14 +07:00
Dwi Swandhana c78d15e67a update 2026-05-18 12:24:18 +07:00
Dwi Swandhana c70d7ebb93 update 2026-05-17 06:26:52 +07:00
Dwi Swandhana 03090cbe74 update 2026-05-17 04:11:19 +07:00
Dwi Swandhana 45b4f41e57 update 2026-05-14 04:51:12 +07:00
Dwi Swandhana dd14d2ddf5 update 2026-05-13 19:05:23 +07:00
Dwi Swandhana 493dfe18eb update 2026-05-13 15:29:02 +07:00
Dwi Swandhana 49e94c3fb5 Fix mikro expertise auto-open and early warning target logic 2026-05-09 05:47:10 +07:00
Dwi Swandhana 4d942523d1 update 2026-05-08 18:32:53 +07:00
Dwi Swandhana 35d8211a65 update 2026-05-07 19:29:23 +07:00
Dwi Swandhana b6f2e66729 update 2026-05-07 19:24:37 +07:00
Dwi Swandhana 4ffd7fa681 update 2026-05-07 15:21:50 +07:00
Dwi Swandhana 362a70fa1a update 2026-05-07 14:51:25 +07:00
Dwi Swandhana cf6fd529b0 update 2026-05-07 11:31:05 +07:00
Dwi Swandhana 9ec56cbf5d update 2026-05-07 11:27:13 +07:00
Dwi Swandhana 4cfd4307a8 update 2026-05-07 11:20:25 +07:00
Dwi Swandhana 264e383b67 update 2026-05-07 11:19:28 +07:00
Dwi Swandhana 8863dbb85f update 2026-05-07 10:48:22 +07:00
Dwi Swandhana da5105f219 update 2026-05-07 09:40:31 +07:00
Dwi Swandhana a6b180378b update 2026-05-07 09:39:01 +07:00
Dwi Swandhana 667e5924a8 update 2026-05-07 09:33:52 +07:00
Dwi Swandhana ea436f76d8 update 2026-05-07 06:01:15 +07:00
Dwi Swandhana 206a90ff2f update 2026-05-07 05:57:19 +07:00
Dwi Swandhana 52cc4a58cf update 2026-05-07 05:56:36 +07:00
Dwi Swandhana 229c0dd9f3 update 2026-05-07 05:51:43 +07:00
Dwi Swandhana 4a48063931 Fix BD ASTM frame reassembly and result parsing 2026-05-07 05:23:37 +07:00
Dwi Swandhana 04ad16f72a update 2026-05-05 06:00:03 +07:00
Dwi Swandhana 22a877f2e7 update 2026-05-04 17:55:00 +07:00
Dwi Swandhana df3396a776 update 2026-05-04 15:32:55 +07:00
Dwi Swandhana b751d782c4 update 2026-05-04 08:17:54 +07:00
Dwi Swandhana 453e3db3a3 update 2026-05-04 08:02:34 +07:00
Dwi Swandhana a0bd6b645c update 2026-05-04 08:00:33 +07:00
Dwi Swandhana 16eac8512e update 2026-05-04 06:32:22 +07:00
Dwi Swandhana fe89a024a1 update 2026-05-02 12:57:27 +07:00
Dwi Swandhana 38ffa918c3 update 2026-05-01 04:58:51 +07:00
Dwi Swandhana d8c6ab7b55 Align target deadlines in early warning and reports 2026-04-29 09:55:00 +07:00
Dwi Swandhana bb680d41d3 update 2026-04-24 13:58:35 +07:00
Dwi Swandhana 4971ad0d5a update 2026-04-24 13:45:00 +07:00
Dwi Swandhana 008400f1e0 update 2026-04-24 13:39:52 +07:00
Dwi Swandhana b3caf1691d update 2026-04-23 14:31:36 +07:00
Dwi Swandhana 1a1d58e60a update 2026-04-23 13:55:32 +07:00
Dwi Swandhana 1b41f3e6ee update 2026-04-21 10:37:05 +07:00
Dwi Swandhana 93ee78982f update 2026-04-21 09:37:50 +07:00
Dwi Swandhana 7ca1e3a96e update 2026-04-20 15:37:11 +07:00
Dwi Swandhana e3086919b7 update 2026-04-20 09:59:14 +07:00
Dwi Swandhana f52b4a42e1 update 2026-04-20 09:54:57 +07:00
Dwi Swandhana 0c3a29e3b6 update 2026-04-20 09:52:42 +07:00
Dwi Swandhana 8628087bfc update 2026-04-20 09:50:38 +07:00
Dwi Swandhana f964939863 update 2026-04-20 09:46:42 +07:00
Dwi Swandhana b139161cca update 2026-04-20 09:42:28 +07:00
Dwi Swandhana 2abb6027a6 Support multiple species rows in glass report 2026-04-20 09:38:05 +07:00
Dwi Swandhana 5c5bf0ce19 Split glass report into three tables 2026-04-20 05:15:17 +07:00
Dwi Swandhana f301de8cb5 Support ASTM framing for GeneXpert responses 2026-04-16 17:56:50 +07:00
Dwi Swandhana b7195cc629 Expand GenXpert assay mapping and use assay-based responses 2026-04-15 18:39:01 +07:00
Dwi Swandhana 2b91b18275 Align GeneXpert query handling with passive server mode 2026-04-14 11:02:10 +07:00
Dwi Swandhana 676ec49cb2 update 2026-04-14 09:54:48 +07:00
Dwi Swandhana b34a379333 update 2026-04-14 09:22:37 +07:00
Dwi Swandhana 0c17c91f92 update 2026-04-14 09:21:30 +07:00
Dwi Swandhana 20ca52ca4d update 2026-04-13 16:46:42 +07:00
Duidev Software House 2371584fdc update 2026-04-13 16:45:02 +07:00
Dwi Swandhana fa0ebaa045 update 2026-04-13 16:44:51 +07:00
Dwi Swandhana e2975ea6f2 update 2026-04-12 18:45:51 +07:00
Dwi Swandhana cfc9ec5b76 update 2026-04-12 09:17:33 +07:00
Dwi Swandhana 1e9f6f9ddf update 2026-04-12 09:10:28 +07:00
Dwi Swandhana ed406bad08 update 2026-04-10 22:23:17 +07:00
Dwi Swandhana 4d025dc57d update 2026-04-10 22:15:49 +07:00
Dwi Swandhana 4f7575c7d4 update 2026-04-10 20:01:01 +07:00
Dwi Swandhana e1a3598472 Enable GenExpert auto polling and flag eligible TCM orders 2026-04-10 19:45:42 +07:00
Dwi Swandhana 6e9951adf6 update 2026-04-10 18:21:26 +07:00
Dwi Swandhana 9716fc05f6 update 2026-04-10 18:16:52 +07:00
Dwi Swandhana b0da4e5433 update 2026-04-10 18:11:25 +07:00
Dwi Swandhana f84131e6bf update 2026-04-10 08:00:22 +07:00
Dwi Swandhana 9751007863 update 2026-04-08 05:44:57 +07:00
Dwi Swandhana 68f6ecc98e update 2026-04-07 18:17:38 +07:00
Dwi Swandhana e850444e12 update 2026-04-07 12:39:11 +07:00
Dwi Swandhana 8a96f58858 update 2026-04-07 12:21:24 +07:00
Dwi Swandhana 15095734b1 update 2026-04-07 12:16:36 +07:00
Dwi Swandhana 500f97f63e update 2026-04-06 14:33:35 +07:00
Dwi Swandhana 4f3bb88f68 update 2026-04-04 09:19:19 +07:00
Dwi Swandhana d5c4438b75 update 2026-04-04 07:21:13 +07:00
Dwi Swandhana 0e733aa14a update 2026-04-04 06:58:02 +07:00
Dwi Swandhana cd1a8d64b9 update 2026-04-04 06:45:03 +07:00
Dwi Swandhana 80d03ac5c1 update 2026-04-04 06:43:44 +07:00
Duidev Software House a979b16df4 update 2026-04-04 05:55:40 +07:00
Dwi Swandhana 4da0cc6253 update 2026-04-04 05:55:28 +07:00
Dwi Swandhana bbc6dee2c9 update 2026-03-15 12:13:55 +07:00
Dwi Swandhana 6a009108e7 update 2026-03-15 05:54:27 +07:00
Dwi Swandhana e3afceee52 Tambahkan notifikasi nilai kritis 2026-03-15 05:51:26 +07:00
Dwi Swandhana 89d254eae8 update 2026-03-13 14:50:47 +07:00
Dwi Swandhana 5a6dfc2a1e update 2026-03-13 13:32:22 +07:00
Dwi Swandhana b418df929f update 2026-03-13 13:31:40 +07:00
Dwi Swandhana 7870c17cfc Merge branch 'main' of https://github.com/servdal/lis 2026-03-13 12:42:28 +07:00
Dwi Swandhana d6fd25c41a Tambah tab Master Barang 2026-03-13 12:39:52 +07:00
Duidev Software House 2ae99ec5a0 update 2026-03-13 12:32:03 +07:00
Dwi Swandhana 5d3a3eecd0 Improve GudangPos barcode fields 2026-03-13 12:31:48 +07:00
Dwi Swandhana 6fb3f5a629 Perbarui cetak dan stok barcode 2026-03-13 12:24:10 +07:00
Dwi Swandhana 52ee41e50c update 2026-03-11 14:23:55 +07:00
Duidev Software House d6b59cce4c update 2026-03-11 14:19:51 +07:00
Dwi Swandhana e03381c6aa update 2026-03-11 14:19:37 +07:00
Dwi Swandhana 3eb845b503 update 2026-03-10 13:54:58 +07:00
Dwi Swandhana 5aed126889 update 2026-03-10 13:53:06 +07:00
Dwi Swandhana 2e0461b528 update 2026-03-09 07:28:02 +07:00
Dwi Swandhana 95d2f6e507 update 2026-03-09 07:24:56 +07:00
Dwi Swandhana a1ac1f888b update 2026-03-08 18:35:58 +07:00
Dwi Swandhana f7bf4ddf1a update 2026-03-07 05:03:07 +07:00
Dwi Swandhana 490e580bd1 update 2026-03-06 20:19:23 +07:00
Dwi Swandhana f27c7430c3 update 2026-03-06 15:04:30 +07:00
Dwi Swandhana e7de471d8a update 2026-03-06 15:02:24 +07:00
Dwi Swandhana 6ed786db1b update 2026-03-06 14:56:24 +07:00
Dwi Swandhana 4ce48077e6 update 2026-03-06 13:31:04 +07:00
Dwi Swandhana ba793c03f2 update 2026-03-06 13:06:25 +07:00
Dwi Swandhana a67f5fc607 update 2026-03-06 12:59:23 +07:00
Dwi Swandhana 5f37ce8def update 2026-03-06 12:58:40 +07:00
Dwi Swandhana 9bd38a470e update 2026-03-06 12:42:46 +07:00
Dwi Swandhana 3754ae3531 update 2026-03-06 12:40:29 +07:00
Dwi Swandhana 27ef021783 update 2026-03-06 12:32:36 +07:00
Dwi Swandhana fa26a01143 update 2026-03-06 12:31:39 +07:00
Dwi Swandhana 2dffd56816 update 2026-03-06 06:54:18 +07:00
Dwi Swandhana ab438f0c55 update 2026-03-06 06:52:40 +07:00
Dwi Swandhana 5d6afc19af update 2026-03-05 18:51:46 +07:00
Dwi Swandhana c290ac693b update 2026-03-05 18:49:37 +07:00
Dwi Swandhana e3094ff717 update 2026-03-05 18:30:28 +07:00
Dwi Swandhana 38251402b8 update 2026-03-05 17:07:50 +07:00
Dwi Swandhana afa2aa1447 update 2026-03-05 17:07:02 +07:00
Dwi Swandhana d6824037d2 update 2026-03-05 16:01:31 +07:00
Dwi Swandhana 004085d0e5 update 2026-03-05 16:00:22 +07:00
Dwi Swandhana d9e1af195c update 2026-03-05 12:09:10 +07:00
Dwi Swandhana 934c90c412 update 2026-03-05 12:07:34 +07:00
Dwi Swandhana f1a5e63800 update 2026-03-05 10:41:00 +07:00
Dwi Swandhana beb9777832 update 2026-03-05 10:40:12 +07:00
Dwi Swandhana aca2d9d745 update 2026-03-05 09:59:42 +07:00
Dwi Swandhana 97fce44ad3 update 2026-03-05 06:42:28 +07:00
Dwi Swandhana cfdf71f816 update 2026-03-05 06:41:56 +07:00
Dwi Swandhana 2782f43290 update 2026-03-05 06:20:47 +07:00
Dwi Swandhana b945d8198a update 2026-03-05 06:19:36 +07:00
Dwi Swandhana f930494592 update 2026-03-05 06:12:21 +07:00
Dwi Swandhana fc0864de08 update 2026-03-05 06:11:58 +07:00
Dwi Swandhana 632fff4230 update 2026-03-05 06:10:10 +07:00
Dwi Swandhana 72041e07ce update 2026-03-04 20:17:46 +07:00
Dwi Swandhana ec0612a1dc update 2026-03-04 20:10:15 +07:00
Dwi Swandhana c96552789e update 2026-03-04 19:01:23 +07:00
Dwi Swandhana 08bddf171a update 2026-03-04 18:43:13 +07:00
Dwi Swandhana 28d8b283fb update 2026-03-04 18:42:02 +07:00
Dwi Swandhana bbd4a82d49 update 2026-03-04 18:40:24 +07:00
Dwi Swandhana b4d3e2987b update 2026-03-04 18:39:05 +07:00
Dwi Swandhana ff7b6288aa update 2026-03-04 18:37:37 +07:00
Dwi Swandhana e308134a67 update 2026-03-04 18:36:23 +07:00
Dwi Swandhana be74b25ae3 update 2026-03-04 18:35:14 +07:00
Dwi Swandhana b7fba7a91c update 2026-03-04 17:50:06 +07:00
Dwi Swandhana f389483da1 update 2026-03-04 17:49:49 +07:00
Dwi Swandhana 1cfb63ab60 update 2026-03-04 17:45:11 +07:00
Dwi Swandhana ae003aaa2f update 2026-03-04 17:44:17 +07:00
Dwi Swandhana 5cc7ec4fcf update 2026-03-04 17:43:19 +07:00
Dwi Swandhana 4a8006c399 update 2026-03-04 17:42:00 +07:00
Dwi Swandhana e0ac8dd30d update 2026-03-03 11:41:15 +07:00
Dwi Swandhana d59f1a9807 update 2026-02-28 14:50:28 +07:00
Dwi Swandhana 90e9382d30 update 2026-02-28 10:19:23 +07:00
Dwi Swandhana 9f3ce0c1b7 update 2026-02-26 12:43:50 +07:00
Dwi Swandhana b41981b798 update 2026-02-26 12:19:42 +07:00
Dwi Swandhana 86d4a2354b update 2026-02-26 10:03:29 +07:00
Dwi Swandhana b353f00659 update 2026-02-25 11:24:30 +07:00
Dwi Swandhana 9d33a2eb51 update 2026-02-25 11:23:28 +07:00
Dwi Swandhana e0edd03157 update 2026-02-24 17:20:42 +07:00
Dwi Swandhana d18c5abd78 update 2026-02-24 17:17:51 +07:00
Dwi Swandhana c3d0929cda update 2026-02-24 16:59:06 +07:00
Dwi Swandhana 354f869b13 update 2026-02-23 17:46:27 +07:00
Dwi Swandhana 6d23d9c97d Tambahkan menu expired gudang 2026-02-23 17:41:14 +07:00
Dwi Swandhana 93c5e9ef09 update 2026-02-23 05:45:38 +07:00
Dwi Swandhana 9960f1337d update 2026-02-22 06:29:51 +07:00
Dwi Swandhana 26c559b3c6 Add MyLA Vitek3 flag handling 2026-02-22 06:25:04 +07:00
Dwi Swandhana c35df25932 update 2026-02-21 19:04:15 +07:00
Dwi Swandhana af2dd2f819 update 2026-02-21 18:58:12 +07:00
Dwi Swandhana aed5885eb1 update 2026-02-21 06:37:46 +07:00
Dwi Swandhana 41cbe00299 update 2026-02-21 06:32:31 +07:00
Dwi Swandhana b8a94e4508 update 2026-02-21 06:26:45 +07:00
Dwi Swandhana 9f1a28ae97 update 2026-02-21 06:21:04 +07:00
Dwi Swandhana 9b39dfb856 update 2026-02-21 06:18:29 +07:00
Dwi Swandhana 924610e36e update 2026-02-21 06:14:05 +07:00
Dwi Swandhana 074a260c8c update 2026-02-21 06:10:17 +07:00
Dwi Swandhana 3c63cb5d22 update 2026-02-21 06:06:56 +07:00
Dwi Swandhana 5274d53681 update 2026-02-21 05:44:43 +07:00
Dwi Swandhana f2e562564d update 2026-02-21 05:39:38 +07:00
Dwi Swandhana dea0da9357 update 2026-02-21 05:32:08 +07:00
Dwi Swandhana b8c61a054b update 2026-02-21 05:29:24 +07:00
Dwi Swandhana f7ccea75dc update 2026-02-21 05:28:47 +07:00
Dwi Swandhana 3b61faafbd update 2026-02-21 05:12:55 +07:00
Dwi Swandhana 1dac4b9e2a update 2026-02-19 09:51:19 +07:00
Dwi Swandhana 638bec1c1c update 2026-02-19 09:47:50 +07:00
Dwi Swandhana fddfe775ce update 2026-02-19 09:42:12 +07:00
Dwi Swandhana 6d859d1c6a Fix tp error persistence 2026-02-19 09:24:28 +07:00
Dwi Swandhana b5ee2d995e update 2026-02-17 15:45:42 +07:00
Dwi Swandhana c018b31c22 update 2026-02-13 09:17:54 +07:00
Dwi Swandhana 37826bd08f update 2026-02-12 10:24:06 +07:00
Dwi Swandhana a6807575a2 update 2026-02-09 03:50:56 +07:00
Dwi Swandhana a39f26e226 update 2026-02-08 18:43:37 +07:00
Dwi Swandhana 81c5249575 Tambahkan restart otomatis saat ters 2026-02-08 05:03:50 +07:00
Dwi Swandhana 6acae8ddc5 update 2026-02-06 05:12:07 +07:00
Dwi Swandhana 539d0a8b50 update 2026-02-05 05:59:37 +07:00
Dwi Swandhana 6f5f9c179e update 2026-02-04 15:52:21 +07:00
Dwi Swandhana 7f0f7439c0 update 2026-02-04 11:10:25 +07:00
Dwi Swandhana cd14cdfdb4 update 2026-02-04 08:31:33 +07:00
Dwi Swandhana 9ab8aa2f52 update 2026-02-04 07:58:54 +07:00
Dwi Swandhana 434727a6eb update 2026-02-03 13:02:47 +07:00
Dwi Swandhana 2592d8190e update 2026-02-03 12:58:52 +07:00
Dwi Swandhana f2c2e3441e update 2026-02-02 08:43:59 +07:00
Dwi Swandhana cbc7fcd1be update 2026-02-01 09:57:12 +07:00
Dwi Swandhana d56a218253 update 2026-02-01 09:25:26 +07:00
Dwi Swandhana 077a8af2c2 push 2026-02-01 05:11:30 +07:00
Dwi Swandhana 475ff6ef9b push 2026-02-01 05:08:16 +07:00
Dwi Swandhana b242d6726d update 2026-01-31 17:50:07 +07:00
Dwi Swandhana 55b9698f69 update 2026-01-31 16:17:54 +07:00
Dwi Swandhana 897bbba085 update 2026-01-31 15:57:11 +07:00
Dwi Swandhana 3af340d09d update 2026-01-31 15:51:45 +07:00
Dwi Swandhana 11bc7e172f update 2026-01-31 06:45:48 +07:00
Dwi Swandhana d8ff19c9b2 update 2026-01-30 21:07:15 +07:00
Dwi Swandhana 083de5fb96 update 2026-01-30 19:55:57 +07:00
Dwi Swandhana 41139d3df5 update 2026-01-30 19:50:40 +07:00
Dwi Swandhana 5865d44110 Add Listener Pyhton 2026-01-30 19:06:58 +07:00
Dwi Swandhana 32cd616fac push 2026-01-30 10:09:23 +07:00
Dwi Swandhana db0695803e push 2026-01-30 10:05:59 +07:00
Dwi Swandhana c8542b2816 push 2026-01-30 10:02:03 +07:00
Dwi Swandhana 06ea1415cc push 2026-01-30 10:00:28 +07:00
Dwi Swandhana 8bb448229c push 2026-01-30 09:48:31 +07:00
Dwi Swandhana 5c255e2e83 push 2026-01-30 09:46:59 +07:00
Dwi Swandhana a9ea401f65 push 2026-01-30 09:45:38 +07:00
Dwi Swandhana b0586dac0a push 2026-01-30 09:44:33 +07:00
Dwi Swandhana ae32330ed7 push 2026-01-30 09:42:18 +07:00
Dwi Swandhana 2f66799ba3 push 2026-01-30 09:40:39 +07:00
Dwi Swandhana 55a1229440 push 2026-01-30 09:39:19 +07:00
Dwi Swandhana c2b25fa4ca push 2026-01-30 09:36:19 +07:00
Dwi Swandhana 2752193752 push 2026-01-30 07:47:02 +07:00
Dwi Swandhana 7e53d8e1da push 2026-01-30 07:41:18 +07:00
Dwi Swandhana 03f087212f push 2026-01-30 06:31:22 +07:00
Dwi Swandhana f773ae23da push 2026-01-30 06:30:11 +07:00
Dwi Swandhana 756a6ccc68 push 2026-01-30 06:27:16 +07:00
Dwi Swandhana 1e1b2fafed push 2026-01-30 06:25:24 +07:00
Dwi Swandhana 355ba42865 update 2026-01-25 17:09:41 +07:00
Dwi Swandhana eff628ae2a update 2026-01-25 16:54:36 +07:00
Dwi Swandhana 5df034f972 update 2026-01-25 16:44:03 +07:00
Dwi Swandhana 9f0d1118b0 update 2026-01-21 19:08:54 +07:00
Dwi Swandhana ddef9f4ffb update 2026-01-21 19:01:24 +07:00
Dwi Swandhana 62fa8c2f9f update 2026-01-20 11:30:09 +07:00
Dwi Swandhana beb0efa075 update 2026-01-20 11:28:49 +07:00
Dwi Swandhana 42a2424721 update 2026-01-20 09:46:12 +07:00
Dwi Swandhana 6b79efb025 update 2026-01-20 04:45:24 +07:00
Dwi Swandhana c7d542522e update 2026-01-19 20:12:34 +07:00
Dwi Swandhana 7ec8d0dbcc update 2026-01-19 20:12:08 +07:00
lismikrovendor 43cd6afde8 update 2026-01-19 20:08:22 +07:00
Dwi Swandhana 607a867376 update 2026-01-19 19:46:32 +07:00
Dwi Swandhana 9e3368d69d update 2026-01-19 19:46:32 +07:00
Dwi Swandhana 13259e78c8 update 2026-01-14 14:24:43 +07:00
Dwi Swandhana 7140bb4e2e update 2026-01-14 09:05:03 +07:00
Dwi Swandhana cb2f8f1a28 update 2026-01-14 09:01:03 +07:00
Dwi Swandhana e1297e0a68 update 2026-01-14 08:33:37 +07:00
Dwi Swandhana 14130282ed update 2026-01-14 08:29:18 +07:00
Dwi Swandhana fca937d1de update 2026-01-14 08:25:26 +07:00
Duidev Software House b7eea4a204 update 2026-01-11 10:14:38 +07:00
Duidev Software House 6d9752dca5 update 2026-01-11 10:07:12 +07:00
Duidev Software House 321be52826 update 2026-01-11 09:20:09 +07:00
Duidev Software House 9ce76551b9 update 2026-01-11 09:18:18 +07:00
Duidev Software House 62dd01964a update 2026-01-11 09:07:49 +07:00
Duidev Software House 7517e70146 update 2026-01-11 05:28:12 +07:00
Duidev Software House dd662cdb9f update 2026-01-10 09:27:00 +07:00
Duidev Software House 1549af8344 update 2026-01-09 20:38:24 +07:00
Duidev Software ff8c7d4c6d update 2026-01-08 04:34:55 +07:00
Duidev Software 54160e2e19 update 2026-01-06 09:55:02 +07:00
Duidev Software 58cb578332 update 2026-01-06 09:15:27 +07:00
Duidev Software bf70061993 update 2026-01-06 09:12:03 +07:00
Duidev Software cf60f77f13 update 2026-01-06 08:40:23 +07:00
Duidev Software 3cd985682f update 2026-01-06 08:32:15 +07:00
Duidev Software 8616d20d9c update 2026-01-06 06:32:32 +07:00
Duidev Software 950de788d5 update 2026-01-06 06:29:11 +07:00
Duidev Software 1d1a300a85 update 2026-01-06 06:14:22 +07:00
Duidev Software a7aaf4befe update 2026-01-06 06:11:08 +07:00
Duidev Software 3e5501faa6 update 2026-01-06 05:07:35 +07:00
Duidev Software 403cc24bc9 update 2026-01-05 07:42:35 +07:00
Duidev Software f011f8e71e update 2026-01-04 20:59:24 +07:00
Duidev Software 8d81bd606e update 2026-01-04 20:57:58 +07:00
Duidev Software 6cba217e92 update 2026-01-04 20:54:50 +07:00
Duidev Software 5d40f403f1 update 2026-01-04 20:51:47 +07:00
Duidev Software f943337f7c update 2026-01-04 20:49:41 +07:00
Duidev Software 22076a7b11 update 2026-01-04 20:34:45 +07:00
Duidev Software a8988d3675 update 2026-01-04 20:05:59 +07:00
Duidev Software 146197af3a update 2026-01-04 19:59:14 +07:00
Duidev Software edc26692f9 update 2026-01-04 16:36:17 +07:00
Duidev Software 06e9c199b7 Fix platform php version constraint to 8.4 generic 2026-01-02 17:10:14 +07:00
Duidev Software 337dfdb5dd update 2026-01-02 17:05:08 +07:00
Duidev Software 5571e206db update 2026-01-02 17:01:39 +07:00
Duidev Software a9afeeb12d update 2026-01-02 16:58:29 +07:00
Duidev Software 4583ac6cd7 update 2026-01-02 16:42:43 +07:00
Duidev Software 98d6b688e9 Update 2026-01-02 13:25:45 +07:00
Duidev Software 8be6231df6 update 2026-01-02 09:05:59 +07:00
Duidev Software e7c6d50141 update 2025-12-30 05:29:05 +07:00
Duidev Software 3e9db11a83 update 2025-12-29 19:58:01 +07:00
Duidev Software House b5ebccf366 update 2025-12-15 12:07:38 +07:00
Duidev Software House 78b9d8a4ee update 2025-12-12 13:02:00 +07:00
Duidev Software House 3d3a60c747 update 2025-12-08 19:23:51 +07:00
Duidev Software House 48dd3b9009 Update 2025-12-07 14:33:14 +07:00
Duidev Software House 6882563cb6 Update 2025-12-07 10:21:24 +07:00
Duidev Software House e63353db3d update 2025-12-05 19:38:39 +07:00
Duidev Software House fdbe9c2522 Update 2025-11-30 08:49:12 +07:00
Duidev Software House d228103a89 update 2025-11-29 21:54:46 +07:00
Duidev Software House 3d093a3c30 Update 2025-11-24 04:33:06 +07:00
Duidev Software House 0ad8bf110e update 2025-11-18 11:17:22 +07:00
Duidev Software House 0adb7b2a76 Update 2025-11-12 19:47:15 +07:00
Duidev Software House b2c5df08a2 Merge branch 'main' of https://git.rssa.top/dwi_vendor/lis 2025-11-10 05:06:31 +07:00
Duidev Software House 8f079b9f6c Update 2025-11-10 05:06:23 +07:00
dwi_vendor aa0a7897cf add Composer 2025-11-09 17:31:51 +07:00
Duidev Software House 0520d51179 update 2025-11-09 09:57:46 +07:00
Duidev Software House fda1ef3a5c Update 2025-11-06 07:14:08 +07:00
Duidev Software House 6dd49e447b Update 2025-11-03 07:19:12 +07:00
Duidev Software House c0373c9436 update 2025-10-30 18:31:45 +07:00
Duidev Software House 34d324c886 Update 2025-10-30 13:09:35 +07:00
Duidev Software House c0c7c1b5fd update 2025-10-27 08:09:17 +07:00
Duidev Software House 90ab13dafd Update 2025-10-17 12:18:18 +07:00
Duidev Software House 53564306e0 Update 2025-10-15 15:48:27 +07:00
Duidev Software House dd4e5e451f update 2025-10-14 16:26:26 +07:00
Duidev Software House b2facc5b0e Update 2025-10-14 08:12:10 +07:00
Duidev Software House 5d172ab337 Update 2025-10-14 07:59:56 +07:00
Duidev Software House 684705b383 update 2025-10-12 23:06:46 +07:00
Duidev Software House bf4093e01d Merge branch 'main' of https://git.rssa.top/dwi_vendor/lis 2025-10-12 22:07:40 +07:00
Duidev Software House 0851bc4b1d Update 2025-10-12 22:06:02 +07:00
Duidev Software House 1cfcc4de31 Update 2025-10-07 20:21:16 +08:00
Duidev Software House 49685c7727 Update 2025-10-04 16:22:29 +07:00
Duidev Software House 5dde5579e2 Update 2025-10-04 10:00:04 +07:00
Duidev Software House 8fd45c65d5 Update 2025-10-02 16:19:17 +07:00
Duidev Software House 406580dc83 Update 2025-10-01 20:47:17 +07:00
Duidev Software House 2c12dd043e Update 2025-10-01 04:36:02 +07:00
Duidev Software House 2d87021d60 Update Banner dan Report 2025-09-25 20:03:12 +07:00
Duidev Software House eafd657bfa Update 2025-09-24 08:33:09 +07:00
Duidev Software House b107ab9ba7 Update 2025-09-23 14:33:23 +07:00
Duidev Software House e8d66dec74 Update 2025-09-20 09:32:52 +07:00
Duidev Software House 8e6070e745 Update 2025-09-19 05:35:32 +07:00
Duidev Software House 21a48fb4d7 Update 2025-09-18 21:15:06 +07:00
Duidev Software House 326b3c1285 Update 2025-09-17 05:03:15 +07:00
Duidev Software House 36ebf1bdd6 Update API 2025-09-16 05:33:49 +07:00
Duidev Software House 1f52717e5c Update 2025-09-11 13:45:02 +07:00
Duidev Software House 89c33c0d5a Update 2025-09-11 13:44:59 +07:00
Duidev Software House 9c261cd32d Update 2025-09-09 20:07:05 +07:00
servdal cf81c9503b Update Cara Baca 2025-09-05 18:16:41 +07:00
servdal ab65bfb585 Update View 2025-09-05 08:07:58 +07:00
servdal 7794fc6fdf update-index 9b1f3a4..b8c6f5e 100644 2025-09-05 07:52:42 +07:00
servdal 9c78f7c088 Update htdocs/app/Services/AstmMessageService.php 2025-09-04 12:22:55 +07:00
servdal f0b5e64d16 Update 2025-09-04 04:10:52 +07:00
servdal caf54a9dd7 Update Database Stuktur 2025-09-02 20:02:03 +07:00
servdal 9979ce3335 Update Services 2025-09-02 12:43:59 +07:00
servdal 2ea8ce8c88 Update Database Seeder and add ruangan.json 2025-09-02 08:42:27 +07:00
servdal 968200880d fix .gitignore rules 2025-08-31 21:13:46 +07:00
servdal 33d5d88045 fix .gitignore rules 2025-08-31 21:02:48 +07:00
15104 changed files with 143994 additions and 2018810 deletions

No files matched your search

Vendored
BIN
View File
Binary file not shown.
+18 -5
View File
@@ -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
BIN
View File
Binary file not shown.
+21
View File
@@ -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');
}
}
+21
View File
@@ -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');
}
}
+33
View File
@@ -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());
}
}
@@ -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::where('processed', '0')->orderBy('created_at', 'DESC')->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'));
}
}
+2
View File
@@ -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');
}
/**
+12
View File
@@ -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,311 @@
<?php
namespace App\Http\Controllers;
use App\BioCabinet;
use App\BioRack;
use App\BioSpecimen;
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['cabinets'] = BioCabinet::with([
'racks' => function ($query) {
$query->orderBy('rack_number', 'ASC')->orderBy('code', 'ASC');
},
'racks.specimens' => function ($query) {
$query->orderBy('stored_at', 'ASC');
},
])->orderBy('name', 'ASC')->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',
'level' => 'required|integer|min:4|max:6',
'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'),
'level' => $request->input('level'),
'rack_number' => $nextRackNumber,
'box_number' => 1,
'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;
$expectedBoxNo = $rack->box_number ?: 1;
if ((int) $request->input('raknomor') !== (int) $expectedRackNo ||
(int) $request->input('boxnomor') !== (int) $expectedBoxNo) {
return back()->withErrors(['slotnomor' => 'Posisi slot tidak sesuai dengan konfigurasi rack.'])->withInput();
}
if ((int) $request->input('shelfnomor') < 1 || (int) $request->input('shelfnomor') > (int) $rack->level) {
return back()->withErrors(['shelfnomor' => 'Shelf melebihi konfigurasi rack.'])->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('shelf_number', $request->input('shelfnomor'))
->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('shelfnomor'),
'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 = ['>', '≥', '&gt;', '>='];
$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 = ['<', '≤', '&lt;', '<='];
$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
@@ -0,0 +1,945 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use App\XFiles;
use App\SIMBHPJenis;
use App\SIMBHPReport;
use App\User;
use App\Ruangan;
use App\Services\SimbhpStockService;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Validator;
use Session;
class GudangController extends Controller
{
public function viewGudangIndex() {
if (Session::get('previlage') == ''){
return redirect('/login');
} else {
$tasks = [];
$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]['id'] = null;
$tasks['jjenis'][0]['jenis'] = 'Belum Ada Jenis Barang';
$tasks['jjenis'][0]['kodejenis'] = '';
$tasks['jjenis'][0]['satuan'] = '';
$tasks['jjenis'][0]['satuan_kecil'] = '';
$tasks['jjenis'][0]['konversi_kecil'] = 1;
$tasks['jjenis'][0]['stok_minimum'] = 0;
} else {
$i = 0;
foreach($cdatane as $rdata){
$tasks['jjenis'][$i]['id'] = $rdata->id;
$tasks['jjenis'][$i]['jenis'] = $rdata->jenis;
$tasks['jjenis'][$i]['kodejenis'] = $rdata->kodejenis ?? '';
$tasks['jjenis'][$i]['satuan'] = $rdata->satuan;
$tasks['jjenis'][$i]['satuan_kecil'] = $rdata->satuan_kecil ?? '';
$tasks['jjenis'][$i]['konversi_kecil'] = $rdata->konversi_kecil ?? 1;
$tasks['jjenis'][$i]['stok_minimum'] = $rdata->stok_minimum ?? 0;
$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';
$tasks['stat_harian_masuk'] = $this->getAggregateBaseQty('pemasukan', 'harian');
$tasks['stat_harian_keluar'] = $this->getAggregateBaseQty('pengeluaran', 'harian');
$tasks['stat_bulanan_masuk'] = $this->getAggregateBaseQty('pemasukan', 'bulanan');
$tasks['stat_bulanan_keluar'] = $this->getAggregateBaseQty('pengeluaran', 'bulanan');
$tasks['stat_tahunan_masuk'] = $this->getAggregateBaseQty('pemasukan', 'tahunan');
$tasks['stat_tahunan_keluar'] = $this->getAggregateBaseQty('pengeluaran', 'tahunan');
$tasks['stat_perjenis_harian'] = $this->getUsagePerJenis('harian');
$tasks['stat_perjenis_bulanan'] = $this->getUsagePerJenis('bulanan');
$tasks['stat_perjenis_tahunan'] = $this->getUsagePerJenis('tahunan');
$tasks['warningstok'] = $this->getLowStockWarnings();
$tasks['expiringSoon'] = $this->getExpiringSoonItems();
$tasks['jenisRows'] = $this->getJenisRows();
return view('admin.gudang', $tasks);
}
}
public function jsonRekapbhp() {
$arraysurat = [];
$getdata = SIMBHPJenis::all();
if (!empty($getdata)){
foreach($getdata as $hasil){
$jenis = $hasil->kodejenis;
$satuan = $hasil->satuan;
$satuanKecil = $hasil->satuan_kecil ?? '';
$konversi = (int) ($hasil->konversi_kecil ?? 1);
if ($konversi <= 0) { $konversi = 1; }
$tlsjenis = $hasil->jenis;
$saldoBase = $this->getStockBaseByJenis($tlsjenis);
$saldoakhir = $this->formatStockDisplay($saldoBase, $satuan, $satuanKecil, $konversi);
$isWarning = $saldoBase <= (int) ($hasil->stok_minimum ?? 0);
$arraysurat[] = array(
'id' => $hasil->id,
'satuan' => $satuan,
'jenis' => $jenis,
'tlsjenis' => $tlsjenis,
'saldo' => $saldoakhir,
'warning' => $isWarning ? 'YA' : 'TIDAK',
);
}
}
echo json_encode($arraysurat);
}
public function jsonSnapshot()
{
if (Session::get('previlage') == '') {
return response()->json(['message' => 'Unauthorized'], 401);
}
$jjenis = [];
$cdatane = SIMBHPJenis::orderBy('jenis', 'ASC')->get();
if ($cdatane->count() == 0) {
$jjenis[] = [
'id' => null,
'jenis' => 'Belum Ada Jenis Barang',
'kodejenis' => '',
'satuan' => '',
'satuan_kecil' => '',
'konversi_kecil' => 1,
'stok_minimum' => 0,
];
} else {
foreach ($cdatane as $rdata) {
$jjenis[] = [
'id' => $rdata->id,
'jenis' => $rdata->jenis,
'kodejenis' => $rdata->kodejenis ?? '',
'satuan' => $rdata->satuan,
'satuan_kecil' => $rdata->satuan_kecil ?? '',
'konversi_kecil' => $rdata->konversi_kecil ?? 1,
'stok_minimum' => $rdata->stok_minimum ?? 0,
];
}
}
return response()->json([
'jjenis' => $jjenis,
'jenisRows' => $this->getJenisRows(),
'warningstok' => $this->getLowStockWarnings(),
'expiringSoon' => $this->getExpiringSoonItems(),
'stat' => [
'harian' => [
'masuk' => $this->getAggregateBaseQty('pemasukan', 'harian'),
'keluar' => $this->getAggregateBaseQty('pengeluaran', 'harian'),
'perjenis' => $this->getUsagePerJenis('harian'),
],
'bulanan' => [
'masuk' => $this->getAggregateBaseQty('pemasukan', 'bulanan'),
'keluar' => $this->getAggregateBaseQty('pengeluaran', 'bulanan'),
'perjenis' => $this->getUsagePerJenis('bulanan'),
],
'tahunan' => [
'masuk' => $this->getAggregateBaseQty('pemasukan', 'tahunan'),
'keluar' => $this->getAggregateBaseQty('pengeluaran', 'tahunan'),
'perjenis' => $this->getUsagePerJenis('tahunan'),
],
],
]);
}
public function jsonReportbhp(Request $request) {
$mulai = $request->input('val01');
$akhir = $request->input('val02');
$hasil = [];
if ($mulai == $akhir OR $akhir == '' OR $akhir == null){
$getdata = SIMBHPReport::whereDate('created_at', $mulai)->orderBy('id', 'DESC')->get();
} else {
$getdata = SIMBHPReport::whereBetween('created_at', [$mulai, $akhir])->orderBy('id', 'DESC')->get();
}
foreach($getdata as $rdata){
$dd = $rdata->tanggal;
$mm = $rdata->bulan;
$yy = $rdata->tahun;
$pengeluaran = $rdata->pengeluaran;
$pemasukan = $rdata->pemasukan;
$deskripsiGabungan = trim((string) ($rdata->deskripsi ?? ''));
$keteranganGabungan = trim((string) ($rdata->keterangan ?? ''));
if ($keteranganGabungan !== '') {
$deskripsiGabungan = $deskripsiGabungan !== ''
? $deskripsiGabungan.' | '.$keteranganGabungan
: $keteranganGabungan;
}
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' => $deskripsiGabungan,
'pemasukan' => $rdata->pemasukan ?? 0,
'pengeluaran' => $rdata->pengeluaran ?? 0,
'jenis' => $rdata->jenis,
'masa_expired' => $rdata->masa_expired,
'keterangan' => $rdata->keterangan,
'tgllengkap' => $rdata->created_at->format('m/d/Y'),
'total' => $total,
);
}
echo json_encode($hasil);
}
public function exportReportbhp(Request $request)
{
$bulan = strtoupper((string) $request->query('bulan', date('m')));
$tahun = strtoupper((string) $request->query('tahun', date('Y')));
if ($tahun === 'ALL'){
$bulan = date("m");
$tahun = date("Y");
$query = SIMBHPReport::where('bulan', (int) $bulan)->where('tahun', (int) $tahun);
} else {
$query = SIMBHPReport::where('tahun', (int) $tahun);
if ($bulan !== 'ALL') {
$query->where('bulan', (int) $bulan);
}
}
$rows = $query->orderBy('id', 'DESC')->get();
$filename = 'laporan-gudang-bln-'.$bulan.'_thn-'.$tahun.'.xlsx';
return response()->streamDownload(function () use ($rows) {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Laporan Gudang');
$headers = ['Tanggal', 'Bulan', 'Tahun', 'Jenis', 'Deskripsi', 'Pemasukan', 'Pengeluaran', 'Satuan Transaksi', 'Masa Expired', 'Keterangan'];
$sheet->fromArray($headers, null, 'A1');
$rowNumber = 2;
foreach ($rows as $row) {
$sheet->fromArray([
(int) ($row->tanggal ?? 0),
(int) ($row->bulan ?? 0),
(int) ($row->tahun ?? 0),
$row->jenis ?: '-',
$row->deskripsi ?: '-',
(int) ($row->pemasukan ?? 0),
(int) ($row->pengeluaran ?? 0),
$row->satuan_transaksi ?: '-',
$row->masa_expired ?: '-',
$row->keterangan ?: '-',
], null, 'A'.$rowNumber);
$rowNumber++;
}
foreach (range('A', 'J') as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
}, $filename, [
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
]);
}
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){
$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 ($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' => $rdata->pemasukan ?? 0,
'pengeluaran' => $rdata->pengeluaran ?? 0,
'jenis' => $kodejenis,
'masa_expired' => $rdata->masa_expired,
'keterangan' => $rdata->keterangan,
'tgllengkap' => $rdata->created_at->format('m/d/Y'),
'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'); // also used as kodejenis when $jenis == 'jenis'
$alasan = $request->input('set07');
$set08 = $request->input('set08');
$set09 = $request->input('set09');
$set10 = $request->input('set10');
$satuanTransaksi = $request->input('set11');
$masaExpired = $this->normalizeDateInput($request->input('set12'));
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('set01');
$kodeInput = trim((string) $request->input('set06'));
$satuanKecil = trim((string) $set08);
$konversiKecil = (int) $set09;
if ($konversiKecil <= 0){ $konversiKecil = 1; }
$stokMinimum = (int) $set10;
if ($stokMinimum < 0){ $stokMinimum = 0; }
if ($satuanKecil === '') {
$konversiKecil = 1;
} elseif ($konversiKecil <= 1) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Jika memakai satuan kecil, konversi harus lebih dari 1']);
}
if ($kodeInput !== '') {
$kodejenis = strtoupper($kodeInput);
$kodejenis = preg_replace('/\s+/', '', $kodejenis);
$kodejenis = preg_replace('/[^A-Z0-9._-]/', '', $kodejenis);
} else {
$kodejenis = strtoupper((string) $jenis);
$kodejenis = preg_replace('/\s+/', '', $kodejenis);
$kodejenis = preg_replace('/[^A-Z0-9._-]/', '', $kodejenis);
}
if ($kodejenis === '' || strlen($kodejenis) < 2 || strlen($kodejenis) > 40) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Kode barang wajib (2-40 karakter). Gunakan huruf/angka dan simbol - _ .']);
}
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']);
} else {
$input = SIMBHPJenis::create([
'kodejenis' => $kodejenis,
'jenis' => $jenis,
'satuan' => $satuan,
'satuan_kecil' => $satuanKecil,
'konversi_kecil' => $konversiKecil,
'stok_minimum' => $stokMinimum,
]);
if ($input){
if (Schema::hasColumn('simbhpjenis', 'barcode_besar')) {
$service = app(SimbhpStockService::class);
$setting = $service->getUnitSetting($input);
$input->update([
'barcode_besar' => $service->makeBarcodeValue((int) $input->id, 'besar'),
'barcode_kecil' => ($setting['has_breakdown'] ?? false) ? $service->makeBarcodeValue((int) $input->id, 'kecil') : null,
]);
}
return response()->json(['status' => 'Success', 'message' => 'Data '.$jenis.' Sukses Ditambahkan']);
} else {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Gagal di masukkan, silahkan ulangi beberapa saat lagi']);
}
}
} 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']);
} else {
$input = SIMBHPJenis::where('id', $idne)->update([
'kodejenis' => $kodejenis,
'jenis' => $jenis,
'satuan' => $satuan,
'satuan_kecil' => $satuanKecil,
'konversi_kecil' => $konversiKecil,
'stok_minimum' => $stokMinimum,
]);
if ($input){
if (Schema::hasColumn('simbhpjenis', 'barcode_besar')) {
$row = SIMBHPJenis::find($idne);
if ($row) {
$service = app(SimbhpStockService::class);
$setting = $service->getUnitSetting($row);
$row->barcode_besar = $service->makeBarcodeValue((int) $row->id, 'besar');
$row->barcode_kecil = ($setting['has_breakdown'] ?? false) ? $service->makeBarcodeValue((int) $row->id, 'kecil') : null;
$row->save();
}
}
return response()->json(['status' => 'Success', 'message' => 'Data '.$jenis.' Sukses Diupdate']);
} else {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => $jenis.' Gagal di masukkan, silahkan ulangi beberapa saat lagi']);
}
}
}
} else {
$ahrf = explode("-", $tanggal);
$tahun = $ahrf[0];
if(isset($ahrf[1])){ $wulan = (int)$ahrf[1]; } else { $wulan = (int)date("m"); }
if(isset($ahrf[2])){ $dino = (int)$ahrf[2]; } else { $dino = (int)date("d"); }
$unitSetting = $this->getJenisUnitSetting($pos);
if ($jenis == 'pemasukan'){
if (($satuanTransaksi ?: 'besar') === 'kecil' && !$unitSetting['has_breakdown']) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Barang ini belum memiliki setting pecah satuan']);
}
$qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'besar');
$bayar = SIMBHPReport::create([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'deskripsi' => $deskripsi,
'pemasukan' => $total,
'pengeluaran' => null,
'qty_base' => $qtyBase,
'satuan_transaksi' => $satuanTransaksi ?: 'besar',
'masa_expired' => $masaExpired,
'jenis' => $pos,
'keterangan' => '',
'marking' => '',
]);
} else if ($jenis == 'pengeluaran'){
if (($satuanTransaksi ?: 'besar') === 'kecil' && !$unitSetting['has_breakdown']) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Pengeluaran satuan kecil tidak tersedia untuk barang ini']);
}
$getnama = User::where('id', $deskripsi)->first();
$nama = $getnama->nama ?? 'Unkown';
$deskripsi = 'Diterima oleh '.$nama;
$qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'besar');
$stokSaatIni = $this->getStockBaseByJenis($pos);
if ($qtyBase > $stokSaatIni){
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']);
} else {
$bayar = SIMBHPReport::create([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'deskripsi' => $deskripsi,
'pemasukan' => null,
'pengeluaran' => $total,
'qty_base' => $qtyBase,
'satuan_transaksi' => $satuanTransaksi ?: 'besar',
'jenis' => $pos,
'keterangan' => '',
'marking' => '',
]);
}
} else if ($jenis == 'opname_pengurangan'){
if (($satuanTransaksi ?: 'besar') === 'kecil' && !$unitSetting['has_breakdown']) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Pengurangan satuan kecil tidak tersedia untuk barang ini']);
}
$kategori = strtolower(trim((string) $deskripsi));
if (!in_array($kategori, ['rusak', 'hilang'], true)) {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Kategori opname pengurangan tidak valid']);
}
$label = ($kategori === 'hilang') ? 'Barang Hilang' : 'Barang Rusak';
$deskripsi = 'Stok Opname - ' . $label;
$qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'besar');
$stokSaatIni = $this->getStockBaseByJenis($pos);
if ($qtyBase > $stokSaatIni){
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']);
} else {
$bayar = SIMBHPReport::create([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'deskripsi' => $deskripsi,
'pemasukan' => null,
'pengeluaran' => $total,
'qty_base' => $qtyBase,
'satuan_transaksi' => $satuanTransaksi ?: 'besar',
'jenis' => $pos,
'keterangan' => trim((string) $alasan),
'marking' => '',
]);
}
} else if ($jenis == 'editor'){
if ($alasan == ''){
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Alasan Perubahan Data Wajib Di Isi!!!']);
} 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) {
$satuanEdit = $rdatalama->satuan_transaksi ?: 'besar';
$qtyBaseEdit = $this->calculateBaseQty($pos, $total, $satuanEdit);
$ltotal = number_format( $lpemasukan , 0 , '.' , ',' );
if ($marking != ''){
SIMBHPReport::where('marking', $marking)->whereNotIn('id', [$postujuan])->update([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'pengeluaran' => $total,
'qty_base' => $qtyBaseEdit,
'satuan_transaksi' => $satuanEdit
]);
}
$bayar = SIMBHPReport::where('id', $postujuan)->update([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'deskripsi' => $deskripsi,
'jenis' => $pos,
'pemasukan' => $total,
'qty_base' => $qtyBaseEdit,
'satuan_transaksi' => $satuanEdit,
'masa_expired' => $masaExpired,
'keterangan' => $alasan,
'updated_at' => date("Y-m-d H:i:s")
]);
} else {
$satuanEdit = $rdatalama->satuan_transaksi ?: 'kecil';
$qtyBaseEdit = $this->calculateBaseQty($pos, $total, $satuanEdit);
$totpepengeluaran = $totpepengeluaran + $total;
if ($totpepengeluaran > $totpemasukan){
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']);
} else {
$ltotal = number_format( $lpengeluaran , 0 , '.' , ',' );
if ($marking != ''){
SIMBHPReport::where('marking', $marking)->whereNotIn('id', [$postujuan])->update([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'pemasukan' => $total,
'qty_base' => $qtyBaseEdit,
'satuan_transaksi' => $satuanEdit
]);
}
$bayar = SIMBHPReport::where('id', $postujuan)->update([
'tanggal' => $dino,
'bulan' => $wulan,
'tahun' => $tahun,
'deskripsi' => $deskripsi,
'jenis' => $pos,
'pengeluaran' => $total,
'qty_base' => $qtyBaseEdit,
'satuan_transaksi' => $satuanEdit,
'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!!!']);
}
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']);
} else {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Update Gagal, Pastikan Data Yang anda Isi Sudah Sesuai']);
}
}
}
else {
return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Pastikan Formnya Anda Isi dengan Lengkap']);
}
}
public function exKwitansi(Request $request)
{
return response()->json([
'status' => 'Info',
'message' => 'Fitur kwitansi gudang belum diaktifkan pada versi ini.'
]);
}
private function calculateBaseQty($jenisNama, $qtyInput, $satuanTransaksi = 'besar')
{
$qtyInput = (int) $qtyInput;
if ($qtyInput < 0) { $qtyInput = 0; }
$setting = $this->getJenisUnitSetting($jenisNama);
$konversi = (int) $setting['konversi'];
if ($konversi <= 0) { $konversi = 1; }
if ($satuanTransaksi === 'kecil') {
return $qtyInput;
}
return $qtyInput * $konversi;
}
private function getJenisUnitSetting($jenisNama)
{
$jenis = SIMBHPJenis::where('jenis', $jenisNama)->first();
$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,
];
}
private function getStockBaseByJenis($jenisNama)
{
$rows = SIMBHPReport::where('jenis', $jenisNama)->get();
$masuk = 0;
$keluar = 0;
foreach ($rows as $row) {
if (!is_null($row->pemasukan) && (int)$row->pemasukan > 0) {
$masuk += $this->extractBaseQty($row, 'pemasukan');
}
if (!is_null($row->pengeluaran) && (int)$row->pengeluaran > 0) {
$keluar += $this->extractBaseQty($row, 'pengeluaran');
}
}
return $masuk - $keluar;
}
private function extractBaseQty($row, $direction = 'pemasukan')
{
if (!is_null($row->qty_base) && (int)$row->qty_base > 0) {
return (int) $row->qty_base;
}
if ($direction === 'pengeluaran') {
return (int) ($row->pengeluaran ?? 0);
}
return (int) ($row->pemasukan ?? 0);
}
private function formatStockDisplay($saldoBase, $satuanBesar, $satuanKecil, $konversi)
{
$saldoBase = (int) $saldoBase;
$konversi = (int) $konversi;
if ($konversi <= 1 || $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;
}
private function getLowStockWarnings()
{
$warnings = [];
$allJenis = SIMBHPJenis::orderBy('jenis', 'ASC')->get();
foreach ($allJenis as $item) {
$saldoBase = $this->getStockBaseByJenis($item->jenis);
$minimum = (int) ($item->stok_minimum ?? 0);
if ($saldoBase <= $minimum) {
$warnings[] = [
'jenis' => $item->jenis,
'saldo' => $this->formatStockDisplay(
$saldoBase,
$item->satuan,
$item->satuan_kecil ?? '',
$item->konversi_kecil ?? 1
),
'minimum' => $minimum,
'satuan_kecil' => $item->satuan_kecil ?: $item->satuan,
];
}
}
return $warnings;
}
private function getExpiringSoonItems()
{
$today = date('Y-m-d');
$limitDate = date('Y-m-d', strtotime('+30 days'));
$rows = SIMBHPReport::whereNotNull('masa_expired')
->whereNotNull('pemasukan')
->where('pemasukan', '>', 0)
->where('masa_expired', '>=', $today)
->where('masa_expired', '<=', $limitDate)
->orderBy('masa_expired', 'ASC')
->orderBy('id', 'DESC')
->get();
$items = [];
foreach ($rows as $row) {
$expiredAt = (string) $row->masa_expired;
$daysLeft = (int) floor((strtotime($expiredAt) - strtotime($today)) / 86400);
if ($daysLeft < 0) {
continue;
}
$badge = 'warning';
if ($daysLeft <= 7) {
$badge = 'danger';
} elseif ($daysLeft <= 14) {
$badge = 'warning';
}
$items[] = [
'jenis' => $row->jenis ?: '-',
'deskripsi' => $row->deskripsi ?: '-',
'qty' => (int) ($row->pemasukan ?? 0),
'satuan' => $row->satuan_transaksi ?: 'besar',
'tanggal_masuk' => sprintf('%02d-%02d-%04d', (int) $row->tanggal, (int) $row->bulan, (int) $row->tahun),
'masa_expired' => date('d-m-Y', strtotime($expiredAt)),
'sisa_hari' => $daysLeft,
'badge' => $badge,
];
}
return $items;
}
private function getAggregateBaseQty($direction, $scope = 'harian')
{
$now = date('Y-m-d');
$d = (int) date('d', strtotime($now));
$m = (int) date('m', strtotime($now));
$y = (int) date('Y', strtotime($now));
$query = SIMBHPReport::query();
if ($scope === 'harian') {
$query->where('tanggal', $d)->where('bulan', $m)->where('tahun', $y);
} elseif ($scope === 'bulanan') {
$query->where('bulan', $m)->where('tahun', $y);
} else {
$query->where('tahun', $y);
}
$rows = $query->get();
$total = 0;
foreach ($rows as $row) {
if ($direction === 'pemasukan' && !is_null($row->pemasukan) && (int)$row->pemasukan > 0) {
$total += $this->extractBaseQty($row, 'pemasukan');
}
if ($direction === 'pengeluaran' && !is_null($row->pengeluaran) && (int)$row->pengeluaran > 0) {
$total += $this->extractBaseQty($row, 'pengeluaran');
}
}
return $total;
}
private function getUsagePerJenis($scope = 'harian')
{
$now = date('Y-m-d');
$d = (int) date('d', strtotime($now));
$m = (int) date('m', strtotime($now));
$y = (int) date('Y', strtotime($now));
$query = SIMBHPReport::query();
if ($scope === 'harian') {
$query->where('tanggal', $d)->where('bulan', $m)->where('tahun', $y);
} elseif ($scope === 'bulanan') {
$query->where('bulan', $m)->where('tahun', $y);
} else {
$query->where('tahun', $y);
}
$rows = $query->get();
$grouped = [];
$jenisNames = [];
foreach ($rows as $row) {
$jenis = $row->jenis ?: 'Tidak Diketahui';
if (!isset($grouped[$jenis])) {
$grouped[$jenis] = ['jenis' => $jenis, 'masuk' => 0, 'keluar' => 0, 'sisa' => 0];
$jenisNames[] = $jenis;
}
if (!is_null($row->pemasukan) && (int)$row->pemasukan > 0) {
$grouped[$jenis]['masuk'] += $this->extractBaseQty($row, 'pemasukan');
}
if (!is_null($row->pengeluaran) && (int)$row->pengeluaran > 0) {
$grouped[$jenis]['keluar'] += $this->extractBaseQty($row, 'pengeluaran');
}
}
if (!empty($jenisNames)) {
$stockMap = app(SimbhpStockService::class)->getStockBaseByJenisMany($jenisNames);
foreach ($grouped as $jenis => &$item) {
$item['sisa'] = (int) ($stockMap[$jenis] ?? 0);
}
unset($item);
}
return array_values($grouped);
}
private function normalizeDateInput($value)
{
$value = trim((string) $value);
if ($value === '') {
return null;
}
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) {
return $value;
}
if (preg_match('/^\d{2}-\d{2}-\d{4}$/', $value)) {
$parts = explode('-', $value);
return $parts[2].'-'.$parts[1].'-'.$parts[0];
}
return null;
}
private function getJenisRows()
{
$rows = [];
$items = SIMBHPJenis::orderBy('jenis', 'ASC')->get();
foreach ($items as $item) {
$saldoBase = $this->getStockBaseByJenis($item->jenis);
$konversi = (int) ($item->konversi_kecil ?? 1);
if ($konversi <= 0) { $konversi = 1; }
$rows[] = [
'id' => $item->id,
'kodejenis' => $item->kodejenis ?? '',
'jenis' => $item->jenis,
'satuan' => $item->satuan,
'satuan_kecil' => $item->satuan_kecil ?? '',
'konversi_kecil' => $konversi,
'stok_minimum' => (int) ($item->stok_minimum ?? 0),
'saldo' => $this->formatStockDisplay($saldoBase, $item->satuan, $item->satuan_kecil ?? '', $konversi),
'warning' => ($saldoBase <= (int) ($item->stok_minimum ?? 0)) ? 'YA' : 'TIDAK',
];
}
return $rows;
}
}
@@ -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);
}
}
}
+593 -182
View File
@@ -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,424 @@ 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->whereNotIn('status', ['Selesai', 'Arsip'])
->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');
@@ -338,4 +578,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);
}
}
@@ -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];
+88 -522
View File
@@ -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,129 @@ 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')
]);
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');
Poli::where('id', $id)->update([
'poli' => $poli,
'subpoli' => $subpoli,
'subsubpoli'=> $subsubpoli,
'modaliti' => $request->input('modaliti'),
'modaliti2' => $request->input('modaliti2')
]);
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;
+16 -13
View File
@@ -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'
];
}
+428
View File
@@ -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,
]);
}
}
+13
View File
@@ -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 = [];
}
+56
View File
@@ -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();
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PertumKolomNi extends Model
{
protected $table = "pertumkolomni";
protected $guarded = [];
}
@@ -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 = [];
}
-15
View File
@@ -1,15 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class ResultOnListiner extends Model
{
protected $connection = 'mysqllistener';
protected $primaryKey = "urut";
protected $table = "lis_phoenix";
public $timestamps = false;
protected $guarded = [];
}
File diff suppressed because it is too large Load diff
+212
View File
@@ -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;
}
}
View File
+10 -4
View File
@@ -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": {
+1760 -1207
View File
File diff suppressed because it is too large Load diff
Binary file not shown.
+2 -2
View File
@@ -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(),
];
+341
View File
@@ -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,
],
];
-3
View File
@@ -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' => [
+4 -4
View File
@@ -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
View File
@@ -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->mediumText('klinis')->nullable();
$table->text('klinis')->nullable();
$table->integer('poli_id')->nullable();
$table->text('keterangan')->nullable();
$table->text('kesimpulan')->nullable();
@@ -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');
}
});
}
};
@@ -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');
}
});
}
};
@@ -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');
}
};
@@ -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');
}
});
}
};
@@ -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');
}
});
}
};
@@ -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');
}
});
}
};
+47 -6
View File
@@ -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);
}
}
+318 -1
View File
@@ -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']
]);
}
}
+20 -19
View File
@@ -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 &gt;30/LPB (4+)', 'category' => 'BC', 'kelompok' => 'mikroorganisme'],
['name' => 'Pseudohifa (+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
['name' => 'Hifa (+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
['name' => 'Hifa &lt;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 &gt;30/LPB (4+)', 'category' => 'HIFA', 'kelompok' => 'mikroorganisme'],
['name' => 'Bacil Gram Positif &lt;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 &gt;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+ &#646; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 2+ &#646; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 3+ &#646; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 4+ &#646; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 1+ &#946; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 2+ &#946; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 3+ &#946; hemolisa', 'category' => 'id_mediabap', 'kelompok' => 'Media BAP'],
['name' => 'KGP 4+ &#946; 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+ &#646; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 2+ &#646; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 3+ &#646; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 4+ &#646; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 1+ &#946; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 2+ &#946; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 3+ &#946; hemolisa', 'category' => 'id_mediacap', 'kelompok' => 'Media CAP'],
['name' => 'KGP 4+ &#946; 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'],
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use App\Poli;
class PoliSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Poli::truncate();
$json1 = file_get_contents(database_path('seeders/data/poli.json'));
$data1 = json_decode($json1, true);
// Bagi data ke dalam batch 500
$chunks = array_chunk($data1, 500);
foreach ($chunks as $chunk) {
DB::table('poli')->insert($chunk);
}
}
}
File diff suppressed because it is too large Load diff
+206
View File
@@ -0,0 +1,206 @@
[
{"id":15,"poli":"Mikrobiologi","subpoli":"3.3.4 KULTUR AEROB","subsubpoli":"KULTUR CAIRAN","modaliti":"CAIRAN ASPIRASI","modaliti2":"7","created_at":"2025-09-02 09:30:39","updated_at":"2025-09-09 08:43:58"},
{"id":28,"poli":"Mikrobiologi","subpoli":"10.3.8 TCM TBC (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"SPUTUM","modaliti2":"2","created_at":"2025-09-03 04:42:03","updated_at":"2025-09-09 08:37:10"},
{"id":31,"poli":"Mikrobiologi","subpoli":"1.3.3 PEWARNAAN KOH JAMUR URINE","subsubpoli":"KOH","modaliti":"URINE","modaliti2":"1","created_at":"2025-09-03 06:53:56","updated_at":"2025-09-09 08:40:44"},
{"id":20,"poli":"Mikrobiologi","subpoli":"14.1.1 CCI","subsubpoli":"CCI","modaliti":"CCI","modaliti2":"1","created_at":"2025-09-02 15:25:01","updated_at":"2025-09-09 08:41:28"},
{"id":37,"poli":"Mikrobiologi","subpoli":"9.3.3 KULTUR FECES AEROB DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR FECES","modaliti":"FECES","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:30"},
{"id":2,"poli":"Mikrobiologi","subpoli":"2.3.5 KULTUR AEROB SEKRET DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR SV\/SU","modaliti":"SEKRET","modaliti2":"3","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:42:37"},
{"id":22,"poli":"Mikrobiologi","subpoli":"8.3.4 KULTUR AEROB SPESIMEN MATA DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR MATA","modaliti":"MATA","modaliti2":"3","created_at":"2025-09-02 16:12:25","updated_at":"2025-09-09 08:48:06"},
{"id":40,"poli":"Mikrobiologi","subpoli":"11.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"PUS","modaliti2":"60","created_at":"2025-09-05 03:03:01","updated_at":"2025-09-09 08:38:54"},
{"id":24,"poli":"Mikrobiologi","subpoli":"10.3.3 PEWARNAAN KOH JAMUR SPUTUM","subsubpoli":"KOH","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-03 00:19:23","updated_at":"2025-09-09 08:36:29"},
{"id":17,"poli":"Mikrobiologi","subpoli":"4.3.4 KULTUR DARAH AEROB DEWASA 2 BOTOL DAN UJI KEPEKAAN AB","subsubpoli":"DRH\/ KA","modaliti":"DARAH","modaliti2":"7","created_at":"2025-09-02 11:12:54","updated_at":"2025-09-09 08:45:35"},
{"id":19,"poli":"Mikrobiologi","subpoli":"12.3.4 KULTUR AEROB DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR JARINGAN","modaliti":"JARINGAN","modaliti2":"3","created_at":"2025-09-02 11:21:00","updated_at":"2025-09-09 08:39:25"},
{"id":12,"poli":"Mikrobiologi","subpoli":"10.3.4 KULTUR AEROB SPUTUM DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR SPT","modaliti":"SPUTUM","modaliti2":"3","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:36:45"},
{"id":18,"poli":"Mikrobiologi","subpoli":"11.3.4 KULTUR AEROB PUS DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR PUS","modaliti":"PUS","modaliti2":"3","created_at":"2025-09-02 11:21:00","updated_at":"2025-09-09 08:38:23"},
{"id":50,"poli":"Mikrobiologi","subpoli":"11.3.3 PEWARNAAN KOH JAMUR PUS","subsubpoli":"KOH","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-08 10:30:42","updated_at":"2025-09-09 08:38:06"},
{"id":39,"poli":"Mikrobiologi","subpoli":"10.3.5 KULTUR JAMUR SPUTUM","subsubpoli":"KULTUR JMR","modaliti":"SPUTUM","modaliti2":"14","created_at":"2025-09-04 05:20:17","updated_at":"2025-09-09 08:36:58"},
{"id":48,"poli":"Mikrobiologi","subpoli":"3.3.3 PEWARNAA KOH","subsubpoli":"KOH","modaliti":"CAIRAN ASPIRASI","modaliti2":"1","created_at":"2025-09-08 06:28:52","updated_at":"2025-09-09 08:43:38"},
{"id":55,"poli":"Mikrobiologi","subpoli":"11.3.9 TCM TB (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"PUS","modaliti2":"2","created_at":"2025-09-09 19:12:14","updated_at":"2025-09-09 19:12:14"},
{"id":62,"poli":"Mikrobiologi","subpoli":"12.3.8 TCM TB (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"JARINGAN","modaliti2":"2","created_at":"2025-09-09 19:16:40","updated_at":"2025-09-09 19:16:40"},
{"id":1,"poli":"Mikrobiologi","subpoli":"10 SPUTUM - 10 3 4 KULTUR AEROB SPUTUM DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR SPT","modaliti":"SPUTUM","modaliti2":"3","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:37:32"},
{"id":33,"poli":"Mikrobiologi","subpoli":"4.3.6 KULTUR DARAH AEROB PEDIATRI 2 BOTOL DAN UJI KEPEKAAN AB","subsubpoli":"DRH\/ KA","modaliti":"DARAH","modaliti2":"7","created_at":"2025-09-04 00:58:10","updated_at":"2025-09-09 08:46:09"},
{"id":6,"poli":"Mikrobiologi","subpoli":"1.3.4 KULTUR AEROP URINE DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR URINE","modaliti":"URINE","modaliti2":"3","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:40:58"},
{"id":23,"poli":"Mikrobiologi","subpoli":"10.3.1 PEWARNAAN GRAM SPUTUM","subsubpoli":"GRAM","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-02 20:44:54","updated_at":"2025-09-09 08:35:58"},
{"id":41,"poli":"Mikrobiologi","subpoli":"13.3.1 SWAB HIDUNG","subsubpoli":"MRSA","modaliti":"SWAB HIDUNG","modaliti2":"2","created_at":"2025-09-06 01:45:10","updated_at":"2025-09-09 08:40:04"},
{"id":45,"poli":"Mikrobiologi","subpoli":"15.2.2 KULTUR TB MEDIA MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"PMDT","modaliti2":"60","created_at":"2025-09-08 03:33:35","updated_at":"2025-09-09 08:41:43"},
{"id":44,"poli":"Mikrobiologi","subpoli":"4.3.2 PEWARNAAN KOH JAMUR CAIRAN LAIN-LAIN","subsubpoli":"KOH","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-06 15:55:18","updated_at":"2025-09-09 08:45:07"},
{"id":7,"poli":"Mikrobiologi","subpoli":"4.3.3 KULTUR DARAH AEROB DEWASA 1 BOTOL DAN UJI KEPEKAAN AB","subsubpoli":"DRH\/ KI","modaliti":"DARAH\/KI","modaliti2":"7","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 19:09:57"},
{"id":32,"poli":"Mikrobiologi","subpoli":"11.3.5 KULTUR JAMUR PUS","subsubpoli":"KULTUR JMR","modaliti":"PUS","modaliti2":"14","created_at":"2025-09-03 09:10:01","updated_at":"2025-09-09 08:38:38"},
{"id":25,"poli":"Mikrobiologi","subpoli":"1.3.5 KULTUR JAMUR URINE","subsubpoli":"KULTUR JMR","modaliti":"URINE","modaliti2":"14","created_at":"2025-09-03 03:17:21","updated_at":"2025-09-09 08:41:14"},
{"id":26,"poli":"Mikrobiologi","subpoli":"3.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"CAIRAN ASPIRASI","modaliti2":"60","created_at":"2025-09-03 03:41:15","updated_at":"2025-09-09 08:44:32"},
{"id":42,"poli":"Mikrobiologi","subpoli":"13.3.2 SWAB TENGGOROK","subsubpoli":"MRSA","modaliti":"SWAB TENGGOROK","modaliti2":"2","created_at":"2025-09-06 01:45:10","updated_at":"2025-09-09 08:40:17"},
{"id":11,"poli":"Mikrobiologi","subpoli":"5.3.4 KULTUR AEROB SWAB TENGGOROK DAN UJI KEPEKAAN AB","subsubpoli":"KOH","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:47:00"},
{"id":27,"poli":"Mikrobiologi","subpoli":"2.3.6 KULTUR JAMUR SEKRET","subsubpoli":"KULTUR JMR","modaliti":"SEKRET","modaliti2":"14","created_at":"2025-09-03 04:28:53","updated_at":"2025-09-09 08:42:51"},
{"id":13,"poli":"Mikrobiologi","subpoli":"4.3.5 KULTUR DARAH AEROB PEDIATRI 1 BOTOL DAN UJI KEPEKAAN AB","subsubpoli":"DRH\/ KI","modaliti":"DARAH\/KI","modaliti2":"7","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 19:10:09"},
{"id":30,"poli":"Mikrobiologi","subpoli":"16.1.1 HIV VIRAL LOAD","subsubpoli":"EID\/ VL","modaliti":"PCR","modaliti2":"14","created_at":"2025-09-03 06:01:11","updated_at":"2025-09-09 08:42:15"},
{"id":56,"poli":"Mikrobiologi","subpoli":"10.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"SPUTUM","modaliti2":"60","created_at":"2025-09-09 19:13:13","updated_at":"2025-09-09 19:13:13"},
{"id":21,"poli":"Mikrobiologi","subpoli":"8.3.3 PEWARNAAN KOH JAMUR SPESIMEN MATA","subsubpoli":"KOH","modaliti":"MATA","modaliti2":"1","created_at":"2025-09-02 16:12:25","updated_at":"2025-09-09 08:47:54"},
{"id":14,"poli":"Mikrobiologi","subpoli":"15.2.3 TCM TB (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"TCM TB","modaliti2":"2","created_at":"2025-09-02 07:07:00","updated_at":"2026-01-29 11:31:12"},
{"id":16,"poli":"Mikrobiologi","subpoli":"3.3.5 KULTUR JAMUR","subsubpoli":"KULTUR JMR","modaliti":"CAIRAN ASPIRASI","modaliti2":"14","created_at":"2025-09-02 09:30:39","updated_at":"2025-09-09 08:44:17"},
{"id":51,"poli":"Mikrobiologi","subpoli":"2.3.4 PEWARNAAN KOH JAMUR SEKRET","subsubpoli":"KOH","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-09 03:50:23","updated_at":"2025-09-09 17:30:58"},
{"id":8,"poli":"Mikrobiologi","subpoli":"4.3.7 KULTUR JAMUR DARAH","subsubpoli":"KULTUR JMR","modaliti":"DARAH","modaliti2":"14","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:46:23"},
{"id":34,"poli":"Mikrobiologi","subpoli":"8.3.5 KULTUR JAMUR SPESIMEN MATA","subsubpoli":"KULTUR JMR","modaliti":"MATA","modaliti2":"14","created_at":"2025-09-04 01:35:15","updated_at":"2025-09-09 08:48:17"},
{"id":52,"poli":"Mikrobiologi","subpoli":"10.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"SPUTUM","modaliti2":"60","created_at":"2025-09-09 06:19:32","updated_at":"2025-09-09 17:30:38"},
{"id":53,"poli":"Mikrobiologi","subpoli":"11.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"PUS","modaliti2":"60","created_at":"2025-09-09 19:10:57","updated_at":"2025-09-09 19:10:57"},
{"id":38,"poli":"Mikrobiologi","subpoli":"9.3.4 KULTUR JAMUR FECES","subsubpoli":"KULTUR JMR","modaliti":"FECES","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":60,"poli":"Mikrobiologi","subpoli":"12.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"JARINGAN","modaliti2":"60","created_at":"2025-09-09 19:15:54","updated_at":"2025-09-09 19:15:54"},
{"id":54,"poli":"Mikrobiologi","subpoli":"11.3.8 PEMERIKSAAN MRSA","subsubpoli":"MRSA","modaliti":"PUS","modaliti2":"2","created_at":"2025-09-09 19:11:50","updated_at":"2025-09-09 19:11:50"},
{"id":59,"poli":"Mikrobiologi","subpoli":"12.3.5 KULTUR JAMUR","subsubpoli":"KULTUR JMR","modaliti":"JARINGAN","modaliti2":"14","created_at":"2025-09-09 19:15:34","updated_at":"2025-09-09 19:15:34"},
{"id":35,"poli":"Mikrobiologi","subpoli":"11.3.1 PEWARNAAN GRAM PUS","subsubpoli":"GRAM","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-04 02:08:37","updated_at":"2025-09-09 08:37:47"},
{"id":46,"poli":"Mikrobiologi","subpoli":"12.3.1 PEWARNAAN GRAM","subsubpoli":"GRAM","modaliti":"JARINGAN","modaliti2":"1","created_at":"2025-09-08 04:27:19","updated_at":"2025-09-09 08:39:09"},
{"id":3,"poli":"Mikrobiologi","subpoli":"1.3.1 PEWARNAAN GRAM URINE","subsubpoli":"GRAM","modaliti":"URINE","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:39:44"},
{"id":43,"poli":"Mikrobiologi","subpoli":"3.3.1 PEWARNAAN GRAM","subsubpoli":"GRAM","modaliti":"CAIRAN ASPIRASI","modaliti2":"1","created_at":"2025-09-06 03:25:16","updated_at":"2025-09-09 08:43:08"},
{"id":72,"poli":"Mikrobiologi","subpoli":"13.3.3. PUS","subsubpoli":"MRSA","modaliti":"PUS","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":10,"poli":"Mikrobiologi","subpoli":"5.3.2 PEWARNAAN NEISSER SWAB TENGGOROK","subsubpoli":"NEISSER","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:46:48"},
{"id":96,"poli":"Mikrobiologi","subpoli":"3.3.10 AG CRYPTOCOCCUS NEOFORMANS","subsubpoli":"AG CRYPTO","modaliti":"CAIRAN ASPIRASI","modaliti2":"","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":115,"poli":"Mikrobiologi","subpoli":"4.3.9 AG CRYPTOCOCCUS NEOFORMANS","subsubpoli":"AG CRYPTO","modaliti":"DARAH","modaliti2":"","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":83,"poli":"Mikrobiologi","subpoli":"18.1.3 TCM CLAMIDIA TRACHOMATIS \/ NEISSERIA GONORRHOE","subsubpoli":"CLAMIDIA","modaliti":"TCM","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":79,"poli":"Mikrobiologi","subpoli":"17.3.1 TCM COVID-19","subsubpoli":"COVID 19","modaliti":"TCM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":80,"poli":"Mikrobiologi","subpoli":"17.3.2 PCR COVID-19","subsubpoli":"COVID 19","modaliti":"TCM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":166,"poli":"Mikrobiologi","subpoli":"B.2.6 PEMERIKSAAN DIPHTERI","subsubpoli":"DIPH","modaliti":"SWAB","modaliti2":"5","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":147,"poli":"Mikrobiologi","subpoli":"8.3.9 PEWARNAAN GIENSA","subsubpoli":"GIEMSA","modaliti":"MATA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":87,"poli":"Mikrobiologi","subpoli":"2.3.2 PEWARNAAN GRAM SEKRET ","subsubpoli":"GRAM","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":125,"poli":"Mikrobiologi","subpoli":"6.3.1 PEWARNAAN GRAM SWAB LAIN-LAIN","subsubpoli":"GRAM","modaliti":"SWAB LAIN LAIN","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":154,"poli":"Mikrobiologi","subpoli":"A.2.1 PEWARNAAN LANGSUNG GRAM URINE ","subsubpoli":"GRAM","modaliti":"URINE","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":158,"poli":"Mikrobiologi","subpoli":"B.2.1 PEWARNAAN LANGSUNG GRAM SWAB TENGGOROK","subsubpoli":"GRAM","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":162,"poli":"Mikrobiologi","subpoli":"B.2.2 PEWARNAAN LANGSUNG GRAM SWAB HIDUNG","subsubpoli":"GRAM","modaliti":"SWAB HIDUNG","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":81,"poli":"Mikrobiologi","subpoli":"18.1.1 TCM HCV","subsubpoli":"HCV","modaliti":"TCM","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":82,"poli":"Mikrobiologi","subpoli":"18.1.2 TCM HIV VIRAL LOAD","subsubpoli":"HIV","modaliti":"TCM","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":84,"poli":"Mikrobiologi","subpoli":"18.1.4 TCM HPV","subsubpoli":"HPV","modaliti":"TCM","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":107,"poli":"Mikrobiologi","subpoli":"4.3.10 IGM LEPTOSPIRA","subsubpoli":"IGM","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":118,"poli":"Mikrobiologi","subpoli":"5.3.3 PEWARNAAN KOH JAMUR SWAB TENGGOROK","subsubpoli":"KOH","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":127,"poli":"Mikrobiologi","subpoli":"6.3.3 PEWARNAAN KOH JAMUR SWAB LAIN-LAIN","subsubpoli":"KOH","modaliti":"SWAB LAIN LAIN","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":133,"poli":"Mikrobiologi","subpoli":"7.3.3 PEWARNAAN KOH JAMUR SWAB TELINGA","subsubpoli":"KOH","modaliti":"SWAB TELINGA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":149,"poli":"Mikrobiologi","subpoli":"9.3.2 PEWARNAAN KOH JAMUR FECES","subsubpoli":"KOH","modaliti":"FECES","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":156,"poli":"Mikrobiologi","subpoli":"A.2.3 PEWARNAAN LANGSUNG KOH URINE","subsubpoli":"KOH","modaliti":"URINE","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":160,"poli":"Mikrobiologi","subpoli":"B.2.11 PEMERIKSAAN KULTUR BAKTERI SWAB KULIT & UJI KEPEKAAN AB","subsubpoli":"KULTUR","modaliti":"PUS","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":121,"poli":"Mikrobiologi","subpoli":"5.3.6 KULTUR DIPHTERI SWAB TENGGOROK","subsubpoli":"KULTUR DIPH","modaliti":"SWAB TENGGOROK","modaliti2":"5","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":128,"poli":"Mikrobiologi","subpoli":"6.3.4 KULTUR DIPHTERI SWAB LAIN-LAIN","subsubpoli":"KULTUR DIPH","modaliti":"SWAB LAIN LAIN","modaliti2":"5","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":130,"poli":"Mikrobiologi","subpoli":"6.3.6 KULTUR JAMUR SWAB LAIN-LAIN","subsubpoli":"KULTUR JMR","modaliti":"SWAB LAIN LAIN","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":135,"poli":"Mikrobiologi","subpoli":"7.3.5 KULTUR JAMUR SWAB TELINGA","subsubpoli":"KULTUR JMR","modaliti":"SWAB TELINGA","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":159,"poli":"Mikrobiologi","subpoli":"B.2.10 PEMERIKSAAN KULTUR BAKTERI SWAB MATA & UJI KEPEKAAN AB","subsubpoli":"KULTUR MATA","modaliti":"MATA","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":169,"poli":"Mikrobiologi","subpoli":"B.2.9 PEMERIKSAAN KULTUR BAKTERI SWAB TELINGA & UJI KEPEKAAN AB","subsubpoli":"KULTUR S. TEL","modaliti":"SWAB TELINGA","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":168,"poli":"Mikrobiologi","subpoli":"B.2.8 PEMERIKSAAN KULTUR BAKTERI SWAB HIDUNG & UJI KEPEKAAN AB","subsubpoli":"KULTUR SH","modaliti":"SWAB HIDUNG","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":167,"poli":"Mikrobiologi","subpoli":"B.2.7 PEMERIKSAAN KULTUR BAKTERI SWAB TENGGOROK & UJI KEPEKAAN AB","subsubpoli":"KULTUR ST","modaliti":"SWAB TENGGOROK","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":129,"poli":"Mikrobiologi","subpoli":"6.3.5 KULTUR AEROB SWAB LAIN-LAIN DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR SWAB LAIN LAIN","modaliti":"SWAB LAIN LAIN","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":92,"poli":"Mikrobiologi","subpoli":"2.3.7 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"SEKRET","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":102,"poli":"Mikrobiologi","subpoli":"3.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL) ","subsubpoli":"KULTUR TB","modaliti":"CAIRAN ASPIRASI","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":122,"poli":"Mikrobiologi","subpoli":"5.3.7 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"SWAB TENGGOROK","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":123,"poli":"Mikrobiologi","subpoli":"5.3.8 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"SWAB TENGGOROK","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":136,"poli":"Mikrobiologi","subpoli":"7.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"SWAB TELINGA","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":137,"poli":"Mikrobiologi","subpoli":"7.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"SWAB TELINGA","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":144,"poli":"Mikrobiologi","subpoli":"8.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"MATA","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":85,"poli":"Mikrobiologi","subpoli":"2.3.1 NUGENT SCORE \/ CLUE CELLS","subsubpoli":"NUGENT SCORE","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":157,"poli":"Mikrobiologi","subpoli":"A.2.4 PEMERIKSAAN KULTUR BAKTERI URINE","subsubpoli":"KULTUR URINE","modaliti":"URINE","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":161,"poli":"Mikrobiologi","subpoli":"B.2.12 PEMERIKSAAN SKRINING MRSA","subsubpoli":"MRSA","modaliti":"MRSA","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":97,"poli":"Mikrobiologi","subpoli":"3.3.11 PEWARNAAN NEGATIVE SWAB TENGGOROKAINING INDIAN INK","subsubpoli":"NEGATIVE","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":114,"poli":"Mikrobiologi","subpoli":"4.3.8 PEWARNAAN NEGATIVE SWAB TENGGOROKAINNING INDIAN INK","subsubpoli":"NEGATIVE","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":93,"poli":"Mikrobiologi","subpoli":"2.3.8 KULTUR TBC MGIT (AUTOMATIC) \/ TCM GENE EXPERT","subsubpoli":"TBC","modaliti":"SEKRET","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":86,"poli":"Mikrobiologi","subpoli":"2.3.10 TCM CLAMIDIA TRACHOMATIS \/ NEISSERIA GONORRHOE","subsubpoli":"TCM GO","modaliti":"SEKRET","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":94,"poli":"Mikrobiologi","subpoli":"2.3.9 TCM GENE EXPERT","subsubpoli":"TCM TB","modaliti":"SEKRET","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":104,"poli":"Mikrobiologi","subpoli":"3.3.8 TCM GENE EXPERT","subsubpoli":"TCM TB","modaliti":"CAIRAN ASPIRASI","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":105,"poli":"Mikrobiologi","subpoli":"3.3.9 TCM MYCOBACTERIUM TUBERCULOSIS","subsubpoli":"TCM TB","modaliti":"CAIRAN ASPIRASI","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":124,"poli":"Mikrobiologi","subpoli":"5.3.9 TCM TBC (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"SWAB TENGGOROK","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":138,"poli":"Mikrobiologi","subpoli":"7.3.8 TCM TBC (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"SWAB TELINGA","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":146,"poli":"Mikrobiologi","subpoli":"8.3.8 TCM TBC (GENE EXPERT)","subsubpoli":"TCM TB","modaliti":"MATA","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":134,"poli":"Mikrobiologi","subpoli":"7.3.4 KULTUR AEROB SWAB TELINGA DAN UJI KEPEKAAN AB","subsubpoli":"KULTUR S. TEL","modaliti":"SWAB TELINGA","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":171,"poli":"Mikrobiologi","subpoli":"C.2.2 PEWARNAAN LANGSUNG BTA SEKRET URETHRA ","subsubpoli":"BTA","modaliti":"SU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":170,"poli":"Mikrobiologi","subpoli":"C.2.1 PEWARNAAN LANGSUNG GRAM SEKRET URETHRA","subsubpoli":"GRAM","modaliti":"SU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":174,"poli":"Mikrobiologi","subpoli":"C.2.5 PEWARNAAN LANGSUNG GRAM SEKRET VAGINA ","subsubpoli":"GRAM","modaliti":"SV","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":179,"poli":"Mikrobiologi","subpoli":"D.2.1 PEWARNAAN LANGSUNG GRAM KUKU ","subsubpoli":"GRAM","modaliti":"KUKU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":190,"poli":"Mikrobiologi","subpoli":"D.2.2 PEWARNAAN LANGSUNG GRAM RAMBUT ","subsubpoli":"GRAM","modaliti":"RAMBUT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":192,"poli":"Mikrobiologi","subpoli":"D.2.3 PEWARNAAN LANGSUNG GRAM KULIT ","subsubpoli":"GRAM","modaliti":"KULIT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":193,"poli":"Mikrobiologi","subpoli":"D.2.4 PEWARNAAN LANGSUNG GRAM TULANG ","subsubpoli":"GRAM","modaliti":"TULANG","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":199,"poli":"Mikrobiologi","subpoli":"E.2.1 PEWARNAAN LANGSUNG GRAM DARAH","subsubpoli":"GRAM","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":205,"poli":"Mikrobiologi","subpoli":"G.2.1 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI OTAK","subsubpoli":"GRAM","modaliti":"LCS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":209,"poli":"Mikrobiologi","subpoli":"G.2.13 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI EFUSI PLEURA","subsubpoli":"GRAM","modaliti":"C. PLEURA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":213,"poli":"Mikrobiologi","subpoli":"G.2.17 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI PERITONEUM","subsubpoli":"GRAM","modaliti":"C. PERITONEUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":218,"poli":"Mikrobiologi","subpoli":"G.2.21 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI SENDI","subsubpoli":"GRAM","modaliti":"C. SENDI","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":224,"poli":"Mikrobiologi","subpoli":"G.2.5 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI TUBO OVARIAL","subsubpoli":"GRAM","modaliti":"TUBO O","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":203,"poli":"Mikrobiologi","subpoli":"E.2.5 HCV TCM","subsubpoli":"HCV","modaliti":"TCM","modaliti2":"2","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":187,"poli":"Mikrobiologi","subpoli":"D.2.17 PAKET IDENTIFIKASI JAMUR JARINGAN KUKU","subsubpoli":"IDEN JMR","modaliti":"KUKU","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":189,"poli":"Mikrobiologi","subpoli":"D.2.19 PAKET IDENTIFIKASI JAMUR JARINGAN KULIT","subsubpoli":"IDEN JMR","modaliti":"KULIT","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":191,"poli":"Mikrobiologi","subpoli":"D.2.20 PAKET IDENTIFIKASI JAMUR JARINGAN TULANG","subsubpoli":"IDEN JMR","modaliti":"TULANG","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":172,"poli":"Mikrobiologi","subpoli":"C.2.3 PEWARNAAN LANGSUNG KOH SEKRET URETHRA ","subsubpoli":"KOH","modaliti":"SU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":176,"poli":"Mikrobiologi","subpoli":"C.2.7 PEWARNAAN LANGSUNG KOH SEKRET VAGINA ","subsubpoli":"KOH","modaliti":"SV","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":180,"poli":"Mikrobiologi","subpoli":"D.2.10 PEWARNAAN LANGSUNG KOH RAMBUT ","subsubpoli":"KOH","modaliti":"RAMBUT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":181,"poli":"Mikrobiologi","subpoli":"D.2.11 PEWARNAAN LANGSUNG KOH KULIT ","subsubpoli":"KOH","modaliti":"KULIT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":182,"poli":"Mikrobiologi","subpoli":"D.2.12 PEWARNAAN LANGSUNG KOH TULANG ","subsubpoli":"KOH","modaliti":"TULANG","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":198,"poli":"Mikrobiologi","subpoli":"D.2.9 PEWARNAAN LANGSUNG KOH KUKU ","subsubpoli":"KOH","modaliti":"KUKU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":201,"poli":"Mikrobiologi","subpoli":"E.2.3 PEWARNAAN LANGSUNG KOH DARAH","subsubpoli":"KOH","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":207,"poli":"Mikrobiologi","subpoli":"G.2.11 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI ABSES HEPAR","subsubpoli":"KOH","modaliti":"ABSES HEPAR","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":211,"poli":"Mikrobiologi","subpoli":"G.2.15 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI EFUSI PLEURA","subsubpoli":"KOH","modaliti":"C. PLEURA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":215,"poli":"Mikrobiologi","subpoli":"G.2.19 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI PERITONEUM","subsubpoli":"KOH","modaliti":"C. PERITONEUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":208,"poli":"Mikrobiologi","subpoli":"G.2.12 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI ABSES HEPAR","subsubpoli":"KULTUR C. ABSES H","modaliti":"ABSES HEPAR","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":221,"poli":"Mikrobiologi","subpoli":"G.2.24 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI SENDI","subsubpoli":"KULTUR C. SENDI","modaliti":"C. SENDI","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":227,"poli":"Mikrobiologi","subpoli":"G.2.8 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI TUBO OVARIAL","subsubpoli":"KULTUR C. TUBO O","modaliti":"TUBO O","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":212,"poli":"Mikrobiologi","subpoli":"G.2.16 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI EFUSI PLEURA","subsubpoli":"KULTUR CP","modaliti":"C. PLEURA","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":217,"poli":"Mikrobiologi","subpoli":"G.2.20 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI PERITONEUM","subsubpoli":"KULTUR CPER","modaliti":"C. PERITONEUM","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":202,"poli":"Mikrobiologi","subpoli":"E.2.4 PEMERIKSAAN KULTUR BAKTERI DARAH AEROB & UJI KEPEKAAN AB","subsubpoli":"KULTUR DRH","modaliti":"DARAH","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":204,"poli":"Mikrobiologi","subpoli":"F.2.1 PAKET KULTUR BAKTERI FESES AEROB & UJI KEPEKAAN AB","subsubpoli":"KULTUR FECES","modaliti":"FECES","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":183,"poli":"Mikrobiologi","subpoli":"D.2.13 PAKET KULTUR BAKTERI JARINGAN KUKU","subsubpoli":"KULTUR JARINGAN","modaliti":"KUKU","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":184,"poli":"Mikrobiologi","subpoli":"D.2.14 PAKET KULTUR BAKTERI JARINGAN RAMBUT","subsubpoli":"KULTUR JARINGAN","modaliti":"RAMBUT","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":185,"poli":"Mikrobiologi","subpoli":"D.2.15 PAKET KULTUR BAKTERI JARINGAN KULIT","subsubpoli":"KULTUR JARINGAN","modaliti":"KULIT","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":186,"poli":"Mikrobiologi","subpoli":"D.2.16 PAKET KULTUR BAKTERI JARINGAN TULANG","subsubpoli":"KULTUR JARINGAN","modaliti":"TULANG","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":188,"poli":"Mikrobiologi","subpoli":"D.2.18 PAKET IDENTIFIKASI JAMUR JARINGAN RAMBUT","subsubpoli":"KULTUR JMR","modaliti":"RAMBUT","modaliti2":"14","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":173,"poli":"Mikrobiologi","subpoli":"C.2.4 PEMERIKSAAN KULTUR BAKTERI URETHRA","subsubpoli":"KULTUR SU","modaliti":"SU","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":177,"poli":"Mikrobiologi","subpoli":"C.2.8 PEMERIKSAAN KULTUR BAKTERI SWAB VAGINA & UJI KEPEKAAN AB","subsubpoli":"KULTUR SV","modaliti":"SV","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":223,"poli":"Mikrobiologi","subpoli":"G.2.4 PEMRIKSAAN KULTUR BAKTERI CAIRAN ASPIRASI OTAK & UJI KEPEKAAN AB","subsubpoli":"LCS","modaliti":"LCS","modaliti2":"7","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":178,"poli":"Mikrobiologi","subpoli":"C.2.9 PEMERIKSAAN VAGINOSIS BAKTERIALIS (CLUE CELLS)","subsubpoli":"NUGENT SCORE","modaliti":"SV","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":233,"poli":"Mikrobiologi","subpoli":"H.2.5 PEMERIKSAAN KULTUR MYCROBACTERIUM TBC","subsubpoli":"KULTUR TB","modaliti":"SPUTUM","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":66,"poli":"Mikrobiologi","subpoli":"4.3.8 PEWARNAAN NEGATIVE STAINNING INDIAN INK","subsubpoli":"NEGATIVE","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-30 03:37:54","updated_at":"2025-11-06 19:24:58"},
{"id":36,"poli":"Mikrobiologi","subpoli":"10.3.2 PEWARNAAN BTA SPUTUM","subsubpoli":"BTA","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-04 03:11:12","updated_at":"2025-09-09 08:36:18"},
{"id":49,"poli":"Mikrobiologi","subpoli":"11.3.2 PEWARNAAN BTA PUS","subsubpoli":"BTA","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-08 10:30:42","updated_at":"2025-09-09 08:37:58"},
{"id":47,"poli":"Mikrobiologi","subpoli":"3.3.2 PEWARNAAN BTA","subsubpoli":"BTA","modaliti":"CAIRAN ASPIRASI","modaliti2":"1","created_at":"2025-09-08 06:28:52","updated_at":"2025-09-09 08:43:23"},
{"id":57,"poli":"Mikrobiologi","subpoli":"12.3.2 PEWARNAAN BTA","subsubpoli":"BTA","modaliti":"JARINGAN","modaliti2":"1","created_at":"2025-09-09 19:14:29","updated_at":"2025-09-09 19:14:29"},
{"id":64,"poli":"Mikrobiologi","subpoli":"1.3.2 PEWARNAAN BTA URINE","subsubpoli":"BTA","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":88,"poli":"Mikrobiologi","subpoli":"2.3.3 PEWARNAAN BTA SEKRET","subsubpoli":"BTA","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":126,"poli":"Mikrobiologi","subpoli":"6.3.2 PEWARNAAN BTA SWAB LAIN-LAIN","subsubpoli":"BTA","modaliti":"SWAB LAIN LAIN","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":132,"poli":"Mikrobiologi","subpoli":"7.3.2 PEWARNAAN BTA","subsubpoli":"BTA","modaliti":"SWAB TELINGA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":140,"poli":"Mikrobiologi","subpoli":"8.3.2 PEWARNAAN BTA SPESIMEN MATA","subsubpoli":"BTA","modaliti":"MATA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":148,"poli":"Mikrobiologi","subpoli":"9.3.1 PEWARNAAN BTA FECES","subsubpoli":"BTA","modaliti":"FECES","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":155,"poli":"Mikrobiologi","subpoli":"A.2.2 PEWARNAAN LANGSUNG BTA URINE","subsubpoli":"BTA","modaliti":"URINE","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":175,"poli":"Mikrobiologi","subpoli":"C.2.6 PEWARNAAN LANGSUNG BTA SEKRET VAGINA ","subsubpoli":"BTA","modaliti":"SV","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":194,"poli":"Mikrobiologi","subpoli":"D.2.5 PEWARNAAN LANGSUNG BTA KUKU ","subsubpoli":"BTA","modaliti":"KUKU","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":195,"poli":"Mikrobiologi","subpoli":"D.2.6 PEWARNAAN LANGSUNG BTA RAMBUT ","subsubpoli":"BTA","modaliti":"RAMBUT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":196,"poli":"Mikrobiologi","subpoli":"D.2.7 PEWARNAAN LANGSUNG BTA KULIT ","subsubpoli":"BTA","modaliti":"KULIT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":197,"poli":"Mikrobiologi","subpoli":"D.2.8 PEWARNAAN LANGSUNG BTA TULANG ","subsubpoli":"BTA","modaliti":"TULANG","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":200,"poli":"Mikrobiologi","subpoli":"E.2.2 PEWARNAAN LANGSUNG BTA DARAH","subsubpoli":"BTA","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":206,"poli":"Mikrobiologi","subpoli":"G.2.10 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI ABSES HEPAR","subsubpoli":"BTA","modaliti":"ABSES HEPAR","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":214,"poli":"Mikrobiologi","subpoli":"G.2.18 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI PERITONEUM","subsubpoli":"BTA","modaliti":"C. PERITONEUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":216,"poli":"Mikrobiologi","subpoli":"G.2.2 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI OTAK","subsubpoli":"BTA","modaliti":"LCS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":219,"poli":"Mikrobiologi","subpoli":"G.2.22 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI SENDI","subsubpoli":"BTA","modaliti":"C. SENDI","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":225,"poli":"Mikrobiologi","subpoli":"G.2.6 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI TUBO OVARIAL","subsubpoli":"BTA","modaliti":"TUBO O","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":230,"poli":"Mikrobiologi","subpoli":"H.2.2 PEWARNAAN LANGSUNG BTA SPUTUM","subsubpoli":"BTA","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":235,"poli":"Mikrobiologi","subpoli":"I.2.2 PEWARNAAN LANGSUNG BTA PUS","subsubpoli":"BTA","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":210,"poli":"Mikrobiologi","subpoli":"G.2.14 PEWARNAAN LANGSUNG BTA CAIRAN ASPIRASI EFUSI PLEURA","subsubpoli":"BTA","modaliti":"C. PLEURA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":29,"poli":"Mikrobiologi","subpoli":"4.3.1 PEWARNAAN GRAM CAIRAN LAIN-LAIN","subsubpoli":"GRAM","modaliti":"DARAH","modaliti2":"1","created_at":"2025-09-03 04:47:47","updated_at":"2025-09-09 08:44:52"},
{"id":9,"poli":"Mikrobiologi","subpoli":"5.3.1 PEWARNAAN GRAM SWAB TENGGOROK","subsubpoli":"GRAM","modaliti":"SWAB TENGGOROK","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:46:37"},
{"id":4,"poli":"Mikrobiologi","subpoli":"7.3.1 PEWARNAAN GRAM SWAB TELINGA","subsubpoli":"GRAM","modaliti":"SWAB TELINGA","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:47:24"},
{"id":5,"poli":"Mikrobiologi","subpoli":"8.3.1 PEWARNAAN GRAM SPESIMEN MATA","subsubpoli":"GRAM","modaliti":"MATA","modaliti2":"1","created_at":"2025-09-02 02:01:44","updated_at":"2025-09-09 08:47:39"},
{"id":163,"poli":"Mikrobiologi","subpoli":"B.2.3 PEWARNAAN LANGSUNG GRAM SWAB TELINGA","subsubpoli":"GRAM","modaliti":"SWAB TELINGA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":164,"poli":"Mikrobiologi","subpoli":"B.2.4 PEWARNAAN LANGSUNG GRAM SWAB MATA","subsubpoli":"GRAM","modaliti":"SWAB MATA","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":165,"poli":"Mikrobiologi","subpoli":"B.2.5 PEWARNAAN LANGSUNG GRAM SWAB KULIT","subsubpoli":"GRAM","modaliti":"KULIT","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":228,"poli":"Mikrobiologi","subpoli":"G.2.9 PEWARNAAN LANGSUNG GRAM CAIRAN ASPIRASI ABSES HEPAR","subsubpoli":"GRAM","modaliti":"ABSES HEPAR","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":229,"poli":"Mikrobiologi","subpoli":"H.2.1 PEWARNAAN LANGSUNG GRAM SPUTUM","subsubpoli":"GRAM","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":234,"poli":"Mikrobiologi","subpoli":"I.2.1 PEWARNAAN LANGSUNG GRAM PUS","subsubpoli":"GRAM","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":63,"poli":"Mikrobiologi","subpoli":"2.3.2 PEWARNAAN GRAM SEKRET","subsubpoli":"GRAM","modaliti":"SEKRET","modaliti2":"1","created_at":"2025-09-14 04:54:56","updated_at":"2025-10-31 14:25:36"},
{"id":67,"poli":"Mikrobiologi","subpoli":"5.3.5 KULTUR JAMUR SWAB TENGGOROK","subsubpoli":"JAMUR","modaliti":"SWAB TENGGOROKAN","modaliti2":"14","created_at":"2025-11-17 10:34:43","updated_at":"2025-11-18 09:58:17"},
{"id":58,"poli":"Mikrobiologi","subpoli":"12.3.3 PEWARNAAN KOH JAMUR","subsubpoli":"KOH","modaliti":"JARINGAN","modaliti2":"1","created_at":"2025-09-09 19:15:11","updated_at":"2025-09-09 19:15:11"},
{"id":220,"poli":"Mikrobiologi","subpoli":"G.2.23 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI SENDI","subsubpoli":"KOH","modaliti":"CAIRAN ASPIRASI","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":222,"poli":"Mikrobiologi","subpoli":"G.2.3 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI OTAK","subsubpoli":"KOH","modaliti":"LCS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":226,"poli":"Mikrobiologi","subpoli":"G.2.7 PEWARNAAN LANGSUNG KOH CAIRAN ASPIRASI TUBO OVARIAL","subsubpoli":"KOH","modaliti":"TUBO O","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":231,"poli":"Mikrobiologi","subpoli":"H.2.3 PEWARNAAN LANGSUNG KOH SPUTUM","subsubpoli":"KOH","modaliti":"SPUTUM","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":236,"poli":"Mikrobiologi","subpoli":"I.2.3 PEWARNAAN LANGSUNG KOH PUS","subsubpoli":"KOH","modaliti":"PUS","modaliti2":"1","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":237,"poli":"Mikrobiologi","subpoli":"I.2.4 PEMRIKSAAN KULTUR BAKTERI PUS AEROB & UJI KEPEKAAN AB","subsubpoli":"KULTUR PUS","modaliti":"PUS","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":232,"poli":"Mikrobiologi","subpoli":"H.2.4 PEMRIKSAAN KULTUR BAKTERI SPUTUM AEROB NON SPESIFIK & UJI KEPEKAAN AB","subsubpoli":"KULTUR SPT","modaliti":"SPUTUM","modaliti2":"3","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":61,"poli":"Mikrobiologi","subpoli":"12.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"JARINGAN","modaliti2":"60","created_at":"2025-09-09 19:16:19","updated_at":"2025-09-09 19:16:19"},
{"id":68,"poli":"Mikrobiologi","subpoli":"1.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"URINE","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":69,"poli":"Mikrobiologi","subpoli":"1.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"URINE","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":75,"poli":"Mikrobiologi","subpoli":"15.2.1 KULTUR TB MEDIA LJ","subsubpoli":"KULTUR TB","modaliti":"PMDT","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":145,"poli":"Mikrobiologi","subpoli":"8.3.7 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"MATA","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":152,"poli":"Mikrobiologi","subpoli":"9.3.5 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":"KULTUR TB","modaliti":"FECES","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":153,"poli":"Mikrobiologi","subpoli":"9.3.6 KULTUR TBC MGIT (AUTOMATIC)","subsubpoli":"KULTUR TB","modaliti":"FECES","modaliti2":"60","created_at":"2025-09-04 04:09:47","updated_at":"2025-09-09 08:48:42"},
{"id":70,"poli":"Mikrobiologi","subpoli":"3.3.11 PEWARNAAN NEGATIVE STAINING INDIAN INK","subsubpoli":null,"modaliti":null,"modaliti2":null,"created_at":"2026-01-29 04:26:10","updated_at":"2026-01-29 04:26:10"},
{"id":71,"poli":"Mikrobiologi","subpoli":"3.3.6 KULTUR TBC MEDIA LJ (KONVENSIONAL)","subsubpoli":null,"modaliti":null,"modaliti2":null,"created_at":"2026-04-13 00:24:12","updated_at":"2026-04-13 00:24:12"}
]
+141
View File
@@ -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"}
]
File diff suppressed because it is too large Load diff
+45
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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' => '最も古いバックアップ日時',
];
+45
View File
@@ -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' => ':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' => 'Ең ескі резервтік көшірме күні',
];
+45
View File
@@ -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' => ':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
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Fout bericht: :message',
'exception_trace' => 'Fout trace: :trace',
'exception_message_title' => 'Fout bericht',
'exception_trace_title' => 'Fout trace',
'backup_failed_subject' => 'Back-up van :application_name mislukt',
'backup_failed_body' => 'Belangrijk: Er ging iets fout tijdens het maken van een back-up van :application_name',
'backup_successful_subject' => 'Succesvolle nieuwe back-up van :application_name',
'backup_successful_subject_title' => 'Succesvolle nieuwe back-up!',
'backup_successful_body' => 'Goed nieuws, een nieuwe back-up van :application_name was succesvol aangemaakt op de schijf genaamd :disk_name.',
'cleanup_failed_subject' => 'Het opschonen van de back-ups van :application_name is mislukt.',
'cleanup_failed_body' => 'Er ging iets fout tijdens het opschonen van de back-ups van :application_name',
'cleanup_successful_subject' => 'Opschonen van :application_name back-ups was succesvol.',
'cleanup_successful_subject_title' => 'Opschonen van back-ups was succesvol!',
'cleanup_successful_body' => 'Het opschonen van de :application_name back-ups op de schijf genaamd :disk_name was succesvol.',
'healthy_backup_found_subject' => 'De back-ups voor :application_name op schijf :disk_name zijn gezond',
'healthy_backup_found_subject_title' => 'De back-ups voor :application_name zijn gezond',
'healthy_backup_found_body' => 'De back-ups voor :application_name worden als gezond beschouwd. Goed gedaan!',
'unhealthy_backup_found_subject' => 'Belangrijk: De back-ups voor :application_name zijn niet meer gezond',
'unhealthy_backup_found_subject_title' => 'Belangrijk: De back-ups voor :application_name zijn niet gezond. :problem',
'unhealthy_backup_found_body' => 'De back-ups voor :application_name op schijf :disk_name zijn niet gezond.',
'unhealthy_backup_found_not_reachable' => 'De back-upbestemming kon niet worden bereikt. :error',
'unhealthy_backup_found_empty' => 'Er zijn geen back-ups van deze applicatie beschikbaar.',
'unhealthy_backup_found_old' => 'De laatste back-up gemaakt op :date is te oud.',
'unhealthy_backup_found_unknown' => 'Sorry, een exacte reden kon niet worden bepaald.',
'unhealthy_backup_found_full' => 'De back-ups gebruiken te veel opslagruimte. Momenteel wordt er :disk_usage gebruikt wat hoger is dan de toegestane limiet van :disk_limit.',
'no_backups_info' => 'Er zijn nog geen back-ups gemaakt',
'application_name' => 'Naam van de toepassing',
'backup_name' => 'Back-upnaam',
'disk' => 'Schijf',
'newest_backup_size' => 'Nieuwste back-upgrootte',
'number_of_backups' => 'Aantal back-ups',
'total_storage_used' => 'Totale gebruikte opslagruimte',
'newest_backup_date' => 'Datum nieuwste back-up',
'oldest_backup_date' => 'Datum oudste back-up',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Exception: :message',
'exception_trace' => 'Exception trace: :trace',
'exception_message_title' => 'Exception',
'exception_trace_title' => 'Exception trace',
'backup_failed_subject' => 'Backup feilet for :application_name',
'backup_failed_body' => 'Viktg: En feil oppstod under backing av :application_name',
'backup_successful_subject' => 'Gjennomført backup av :application_name',
'backup_successful_subject_title' => 'Gjennomført backup!',
'backup_successful_body' => 'Gode nyheter, en ny backup av :application_name ble opprettet på disken :disk_name.',
'cleanup_failed_subject' => 'Opprydding av backup for :application_name feilet.',
'cleanup_failed_body' => 'En feil oppstod under opprydding av backups for :application_name',
'cleanup_successful_subject' => 'Opprydding av backup for :application_name gjennomført',
'cleanup_successful_subject_title' => 'Opprydding av backup gjennomført!',
'cleanup_successful_body' => 'Oppryddingen av backup for :application_name på disken :disk_name har blitt gjennomfø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 jobba!',
'unhealthy_backup_found_subject' => 'Viktig: Backups for :application_name ikke OK',
'unhealthy_backup_found_subject_title' => 'Viktig: Backups for :application_name er ikke OK. :problem',
'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er ikke OK.',
'unhealthy_backup_found_not_reachable' => 'Kunne ikke finne backup-destinasjonen. :error',
'unhealthy_backup_found_empty' => 'Denne applikasjonen mangler backups.',
'unhealthy_backup_found_old' => 'Den siste backupem fra :date er for gammel.',
'unhealthy_backup_found_unknown' => 'Beklager, kunne ikke finne nøyaktig årsak.',
'unhealthy_backup_found_full' => 'Backups bruker for mye lagringsplass. Nåværende diskbruk er :disk_usage, som er mer enn den tillatte grensen på :disk_limit.',
'no_backups_info' => 'Ingen sikkerhetskopier ble gjort ennå',
'application_name' => 'Programnavn',
'backup_name' => 'Navn på sikkerhetskopi',
'disk' => 'Disk',
'newest_backup_size' => 'Nyeste backup-størrelse',
'number_of_backups' => 'Antall sikkerhetskopier',
'total_storage_used' => 'Total lagring brukt',
'newest_backup_date' => 'Nyeste backup-størrelse',
'oldest_backup_date' => 'Eldste sikkerhetskopistørrelse',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Błąd: :message',
'exception_trace' => 'Zrzut błędu: :trace',
'exception_message_title' => 'Błąd',
'exception_trace_title' => 'Zrzut błędu',
'backup_failed_subject' => 'Tworzenie kopii zapasowej aplikacji :application_name nie powiodło się',
'backup_failed_body' => 'Ważne: Wystąpił błąd podczas tworzenia kopii zapasowej aplikacji :application_name',
'backup_successful_subject' => 'Pomyślnie utworzono kopię zapasową aplikacji :application_name',
'backup_successful_subject_title' => 'Nowa kopia zapasowa!',
'backup_successful_body' => 'Wspaniała wiadomość, nowa kopia zapasowa aplikacji :application_name została pomyślnie utworzona na dysku o nazwie :disk_name.',
'cleanup_failed_subject' => 'Czyszczenie kopii zapasowych aplikacji :application_name nie powiodło się.',
'cleanup_failed_body' => 'Wystąpił błąd podczas czyszczenia kopii zapasowej aplikacji :application_name',
'cleanup_successful_subject' => 'Kopie zapasowe aplikacji :application_name zostały pomyślnie wyczyszczone',
'cleanup_successful_subject_title' => 'Kopie zapasowe zostały pomyślnie wyczyszczone!',
'cleanup_successful_body' => 'Czyszczenie kopii zapasowych aplikacji :application_name na dysku :disk_name zakończone sukcesem.',
'healthy_backup_found_subject' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są poprawne',
'healthy_backup_found_subject_title' => 'Kopie zapasowe aplikacji :application_name są poprawne',
'healthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name są poprawne. Dobra robota!',
'unhealthy_backup_found_subject' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne',
'unhealthy_backup_found_subject_title' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne. :problem',
'unhealthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są niepoprawne.',
'unhealthy_backup_found_not_reachable' => 'Miejsce docelowe kopii zapasowej nie jest osiągalne. :error',
'unhealthy_backup_found_empty' => 'W aplikacji nie ma żadnej kopii zapasowych tej aplikacji.',
'unhealthy_backup_found_old' => 'Ostatnia kopia zapasowa wykonania dnia :date jest zbyt stara.',
'unhealthy_backup_found_unknown' => 'Niestety, nie można ustalić dokładnego błędu.',
'unhealthy_backup_found_full' => 'Kopie zapasowe zajmują zbyt dużo miejsca. Obecne użycie dysku :disk_usage jest większe od ustalonego limitu :disk_limit.',
'no_backups_info' => 'Nie utworzono jeszcze kopii zapasowych',
'application_name' => 'Nazwa aplikacji',
'backup_name' => 'Nazwa kopii zapasowej',
'disk' => 'Dysk',
'newest_backup_size' => 'Najnowszy rozmiar kopii zapasowej',
'number_of_backups' => 'Liczba kopii zapasowych',
'total_storage_used' => 'Całkowite wykorzystane miejsce',
'newest_backup_date' => 'Najnowszy rozmiar kopii zapasowej',
'oldest_backup_date' => 'Najstarszy rozmiar kopii zapasowej',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Mensagem de exceção: :message',
'exception_trace' => 'Rasto da exceção: :trace',
'exception_message_title' => 'Mensagem de exceção',
'exception_trace_title' => 'Rasto da exceção',
'backup_failed_subject' => 'Falha no backup da aplicação :application_name',
'backup_failed_body' => 'Importante: Ocorreu um erro ao executar o backup da aplicação :application_name',
'backup_successful_subject' => 'Backup realizado com sucesso: :application_name',
'backup_successful_subject_title' => 'Backup Realizado com Sucesso!',
'backup_successful_body' => 'Boas notícias, foi criado um novo backup no disco :disk_name referente à aplicação :application_name.',
'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.',
'cleanup_failed_body' => 'Ocorreu um erro ao executar a limpeza dos backups da aplicação :application_name',
'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!',
'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!',
'cleanup_successful_body' => 'Concluída a limpeza dos backups da aplicação :application_name no disco :disk_name.',
'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',
'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia',
'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',
'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia',
'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',
'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',
'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error',
'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.',
'unhealthy_backup_found_old' => 'O último backup realizado em :date é demasiado antigo.',
'unhealthy_backup_found_unknown' => 'Desculpe, impossível determinar a razão exata.',
'unhealthy_backup_found_full' => 'Os backups estão a utilizar demasiado espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',
'no_backups_info' => 'Nenhum backup foi feito ainda',
'application_name' => 'Nome da Aplicação',
'backup_name' => 'Nome de backup',
'disk' => 'Disco',
'newest_backup_size' => 'Tamanho de backup mais recente',
'number_of_backups' => 'Número de backups',
'total_storage_used' => 'Armazenamento total usado',
'newest_backup_date' => 'Data de backup mais recente',
'oldest_backup_date' => 'Data de backup mais antiga',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Mensagem de exceção: :message',
'exception_trace' => 'Rastreamento de exceção: :trace',
'exception_message_title' => 'Mensagem de exceção',
'exception_trace_title' => 'Rastreamento de exceção',
'backup_failed_subject' => 'Falha no backup da aplicação :application_name',
'backup_failed_body' => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name',
'backup_successful_subject' => 'Backup realizado com sucesso: :application_name',
'backup_successful_subject_title' => 'Backup Realizado com sucesso!',
'backup_successful_body' => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.',
'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.',
'cleanup_failed_body' => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name',
'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!',
'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!',
'cleanup_successful_body' => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.',
'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',
'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia',
'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',
'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia',
'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',
'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',
'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error',
'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.',
'unhealthy_backup_found_old' => 'O último backup realizado em :date é considerado muito antigo.',
'unhealthy_backup_found_unknown' => 'Desculpe, a exata razão não pode ser encontrada.',
'unhealthy_backup_found_full' => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',
'no_backups_info' => 'Nenhum backup foi feito ainda',
'application_name' => 'Nome da Aplicação',
'backup_name' => 'Nome de backup',
'disk' => 'Disco',
'newest_backup_size' => 'Tamanho do backup mais recente',
'number_of_backups' => 'Número de backups',
'total_storage_used' => 'Armazenamento total usado',
'newest_backup_date' => 'Data do backup mais recente',
'oldest_backup_date' => 'Data do backup mais antigo',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Cu excepția mesajului: :message',
'exception_trace' => 'Urmă excepţie: :trace',
'exception_message_title' => 'Mesaj de excepție',
'exception_trace_title' => 'Urmă excepţie',
'backup_failed_subject' => 'Nu s-a putut face copie de rezervă pentru :application_name',
'backup_failed_body' => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name',
'backup_successful_subject' => 'Copie de rezervă efectuată cu succes pentru :application_name',
'backup_successful_subject_title' => 'O nouă copie de rezervă a fost efectuată cu succes!',
'backup_successful_body' => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.',
'cleanup_failed_subject' => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.',
'cleanup_failed_body' => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name',
'cleanup_successful_subject' => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes',
'cleanup_successful_subject_title' => 'Curățarea copiilor de rezervă a fost făcută cu succes!',
'cleanup_successful_body' => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.',
'healthy_backup_found_subject' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă',
'healthy_backup_found_subject_title' => 'Copiile de rezervă pentru :application_name sunt în regulă',
'healthy_backup_found_body' => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!',
'unhealthy_backup_found_subject' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă',
'unhealthy_backup_found_subject_title' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem',
'unhealthy_backup_found_body' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.',
'unhealthy_backup_found_not_reachable' => 'Nu se poate ajunge la destinația copiilor de rezervă. :error',
'unhealthy_backup_found_empty' => 'Nu există copii de rezervă ale acestei aplicații.',
'unhealthy_backup_found_old' => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.',
'unhealthy_backup_found_unknown' => 'Ne pare rău, un motiv exact nu poate fi determinat.',
'unhealthy_backup_found_full' => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.',
'no_backups_info' => 'Nu s-au făcut încă copii de rezervă',
'application_name' => 'Numele aplicatiei',
'backup_name' => 'Numele de rezervă',
'disk' => 'Disc',
'newest_backup_size' => 'Cea mai nouă dimensiune de rezervă',
'number_of_backups' => 'Număr de copii de rezervă',
'total_storage_used' => 'Spațiu total de stocare utilizat',
'newest_backup_date' => 'Cea mai nouă dimensiune de rezervă',
'oldest_backup_date' => 'Cea mai veche dimensiune de rezervă',
];
+45
View File
@@ -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
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Správa výnimky: :message',
'exception_trace' => 'Stopa výnimky: :trace',
'exception_message_title' => 'Správa výnimky',
'exception_trace_title' => 'Stopa výnimky',
'backup_failed_subject' => 'Záloha :application_name zlyhala',
'backup_failed_body' => 'Dôležité: Pri zálohovaní :application_name sa vyskytla chyba',
'backup_successful_subject' => 'Úspešná nová záloha :application_name',
'backup_successful_subject_title' => 'Úspešná nová záloha!',
'backup_successful_body' => 'Dobrá správa, na disku s názvom :disk_name bola úspešne vytvorená nová záloha :application_name.',
'cleanup_failed_subject' => 'Vyčistenie záloh :application_name zlyhalo.',
'cleanup_failed_body' => 'Pri čistení záloh :application_name sa vyskytla chyba',
'cleanup_successful_subject' => 'Vyčistenie záloh :application_name bolo úspešné',
'cleanup_successful_subject_title' => 'Vyčistenie záloh bolo úspešné!',
'cleanup_successful_body' => 'Vyčistenie záloh :application_name na disku s názvom :disk_name bolo úspešné.',
'healthy_backup_found_subject' => 'Zálohy pre :application_name na disku :disk_name sú zdravé',
'healthy_backup_found_subject_title' => 'Zálohy pre :application_name sú zdravé',
'healthy_backup_found_body' => 'Zálohy pre :application_name sa považujú za zdravé. Dobrá práca!',
'unhealthy_backup_found_subject' => 'Dôležité: Zálohy pre :application_name sú nezdravé',
'unhealthy_backup_found_subject_title' => 'Dôležité: Zálohy pre :application_name sú nezdravé. :problem',
'unhealthy_backup_found_body' => 'Zálohy pre :application_name na disku :disk_name sú nezdravé.',
'unhealthy_backup_found_not_reachable' => 'Nemožno sa dostať k cieľu zálohy. :error',
'unhealthy_backup_found_empty' => 'Táto aplikácia nemá žiadne zálohy.',
'unhealthy_backup_found_old' => 'Posledná záloha vytvorená dňa :date sa považuje za príliš starú.',
'unhealthy_backup_found_unknown' => 'Ospravedlňujeme sa, nemôžeme určiť presný dôvod.',
'unhealthy_backup_found_full' => 'Zálohy zaberajú príliš veľa miesta na disku. Aktuálne využitie disku je :disk_usage, čo je viac ako povolený limit :disk_limit.',
'no_backups_info' => 'Zatiaľ neboli vytvorené žiadne zálohy',
'application_name' => 'Názov aplikácie',
'backup_name' => 'Názov zálohy',
'disk' => 'Disk',
'newest_backup_size' => 'Veľkosť najnovšej zálohy',
'number_of_backups' => 'Počet záloh',
'total_storage_used' => 'Celková využitá kapacita úložiska',
'newest_backup_date' => 'Dátum najnovšej zálohy',
'oldest_backup_date' => 'Dátum najstaršej zálohy',
];
+45
View File
@@ -0,0 +1,45 @@
<?php
return [
'exception_message' => 'Hata mesajı: :message',
'exception_trace' => 'Hata izleri: :trace',
'exception_message_title' => 'Hata mesajı',
'exception_trace_title' => 'Hata izleri',
'backup_failed_subject' => 'Yedeklenemedi :application_name',
'backup_failed_body' => 'Önemli: Yedeklenirken bir hata oluştu :application_name',
'backup_successful_subject' => 'Başarılı :application_name yeni yedeklemesi',
'backup_successful_subject_title' => 'Başarılı bir yeni yedekleme!',
'backup_successful_body' => 'Harika bir haber, :application_name ait yeni bir yedekleme :disk_name adlı diskte başarıyla oluşturuldu.',
'cleanup_failed_subject' => ':application_name yedeklemeleri temizlenmesi başarısız.',
'cleanup_failed_body' => ':application_name yedeklerini temizlerken bir hata oluştu ',
'cleanup_successful_subject' => ':application_name yedeklemeleri temizlenmesi başarılı.',
'cleanup_successful_subject_title' => 'Yedeklerin temizlenmesi başarılı!',
'cleanup_successful_body' => ':application_name yedeklemeleri temizlenmesi, :disk_name diskinden silindi',
'healthy_backup_found_subject' => ':application_name yedeklenmesi, :disk_name adlı diskte sağlıklı',
'healthy_backup_found_subject_title' => ':application_name yedeklenmesi sağlıklı',
'healthy_backup_found_body' => ':application_name için yapılan yedeklemeler sağlıklı sayılır. Aferin!',
'unhealthy_backup_found_subject' => 'Önemli: :application_name için yedeklemeler sağlıksız',
'unhealthy_backup_found_subject_title' => 'Önemli: :application_name için yedeklemeler sağlıksız. :problem',
'unhealthy_backup_found_body' => 'Yedeklemeler: :application_name disk: :disk_name sağlıksız.',
'unhealthy_backup_found_not_reachable' => 'Yedekleme hedefine ulaşılamıyor. :error',
'unhealthy_backup_found_empty' => 'Bu uygulamanın yedekleri yok.',
'unhealthy_backup_found_old' => ':date tarihinde yapılan en son yedekleme çok eski kabul ediliyor.',
'unhealthy_backup_found_unknown' => 'Üzgünüm, kesin bir sebep belirlenemiyor.',
'unhealthy_backup_found_full' => 'Yedeklemeler çok fazla depolama alanı kullanıyor. Şu anki kullanım: :disk_usage, izin verilen sınırdan yüksek: :disk_limit.',
'no_backups_info' => 'Henüz yedekleme yapılmadı',
'application_name' => 'Uygulama Adı',
'backup_name' => 'Yedek adı',
'disk' => 'Disk',
'newest_backup_size' => 'En yeni yedekleme boyutu',
'number_of_backups' => 'Yedekleme sayısı',
'total_storage_used' => 'Kullanılan toplam depolama alanı',
'newest_backup_date' => 'En yeni yedekleme tarihi',
'oldest_backup_date' => 'En eski yedekleme tarihi',
];
+45
View File
@@ -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
View File
@@ -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' => '成功清除 :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' => '最旧的备份大小',
];
+45
View File
@@ -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' => '成功清除 :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' => '最早的備份大小',
];
-14
View File
@@ -1,14 +0,0 @@
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y \
net-tools \
iproute2 \
procps \
lsof \
&& rm -rf /var/lib/apt/lists/*
CMD ["python", "app.py"]
Loaded 100 of 15104 files, more files were not shown because too many files have changed in this diff. Show more