diff --git a/data/state.json b/data/state.json index e154ca7..39d3c42 100644 --- a/data/state.json +++ b/data/state.json @@ -1,5 +1,5 @@ { - "last_updated": "2026-04-23T02:01:27Z", + "last_updated": "2026-05-18T03:15:28Z", "rooms": { "BARI1": { "kode_ruang": "BARI1", @@ -7,20 +7,20 @@ "nama_ruang": "RUANG BARITO KELAS 1", "old_value": { "kapasitas": 6, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 6, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T11:16:36Z" + "last_synced": "2026-05-18T02:36:40Z" }, "BARI2": { "kode_ruang": "BARI2", @@ -28,20 +28,20 @@ "nama_ruang": "RUANG BARITO KELAS 2", "old_value": { "kapasitas": 4, - "tersedia": 0, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 4 }, "new_value": { "kapasitas": 4, - "tersedia": 0, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 4 }, "changed": false, - "last_synced": "2026-04-22T08:51:41Z" + "last_synced": "2026-05-18T02:35:52Z" }, "BARI3": { "kode_ruang": "BARI3", @@ -49,20 +49,20 @@ "nama_ruang": "RUANG BARITO KELAS 3", "old_value": { "kapasitas": 11, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 11, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T14:36:44Z" + "last_synced": "2026-05-18T02:35:52Z" }, "BARIV": { "kode_ruang": "BARIV", @@ -83,7 +83,7 @@ "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T14:36:29Z" + "last_synced": "2026-05-18T02:35:49Z" }, "BENG2": { "kode_ruang": "BENG2", @@ -91,20 +91,20 @@ "nama_ruang": "RUANG BENGAWAN SOLO KELAS 2", "old_value": { "kapasitas": 4, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 4, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T01:05:38Z" + "last_synced": "2026-05-11T10:23:47+07:00" }, "BRAN2": { "kode_ruang": "BRAN2", @@ -112,20 +112,20 @@ "nama_ruang": "RUANG HCU BRANTAS", "old_value": { "kapasitas": 9, - "tersedia": 3, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 2 }, "new_value": { "kapasitas": 9, - "tersedia": 3, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 2 }, "changed": false, - "last_synced": "2026-04-22T18:01:28Z" + "last_synced": "2026-05-18T02:35:41Z" }, "BROM3": { "kode_ruang": "BROM3", @@ -133,20 +133,20 @@ "nama_ruang": "RUANG BROMO KELAS 3", "old_value": { "kapasitas": 42, - "tersedia": 4, + "tersedia": 12, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 12 }, "new_value": { "kapasitas": 42, - "tersedia": 4, + "tersedia": 12, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 12 }, "changed": false, - "last_synced": "2026-04-23T01:26:28Z" + "last_synced": "2026-05-18T02:35:44Z" }, "BUGV3": { "kode_ruang": "BUGV3", @@ -154,20 +154,20 @@ "nama_ruang": "RUANG BUGENVILE KELAS 3", "old_value": { "kapasitas": 20, - "tersedia": 7, + "tersedia": 10, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 7 + "tersedia_pria_wanita": 10 }, "new_value": { "kapasitas": 20, - "tersedia": 7, + "tersedia": 10, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 7 + "tersedia_pria_wanita": 10 }, "changed": false, - "last_synced": "2026-04-22T13:56:30Z" + "last_synced": "2026-05-18T02:35:56Z" }, "BUNA2": { "kode_ruang": "BUNA2", @@ -175,20 +175,20 @@ "nama_ruang": "RUANG BUNAKEN KELAS 2", "old_value": { "kapasitas": 6, - "tersedia": 1, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 6, - "tersedia": 1, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T15:21:29Z" + "last_synced": "2026-05-18T02:35:38Z" }, "BUNA3": { "kode_ruang": "BUNA3", @@ -196,10 +196,10 @@ "nama_ruang": "RUANG BUNAKEN KELAS 3", "old_value": { "kapasitas": 16, - "tersedia": 4, + "tersedia": 5, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 5 }, "new_value": { "kapasitas": 16, @@ -208,8 +208,8 @@ "tersedia_wanita": 0, "tersedia_pria_wanita": 4 }, - "changed": false, - "last_synced": "2026-04-22T14:46:30Z" + "changed": true, + "last_synced": "2026-05-18T03:15:28Z" }, "CILI2": { "kode_ruang": "CILI2", @@ -217,20 +217,20 @@ "nama_ruang": "RUANG HCU CILIWUNG", "old_value": { "kapasitas": 28, - "tersedia": 4, + "tersedia": 10, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 10 }, "new_value": { "kapasitas": 28, - "tersedia": 4, + "tersedia": 10, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 10 }, "changed": false, - "last_synced": "2026-04-23T01:26:27Z" + "last_synced": "2026-05-11T10:23:47+07:00" }, "CISA2": { "kode_ruang": "CISA2", @@ -238,20 +238,20 @@ "nama_ruang": "RUANG HCU CISADANE", "old_value": { "kapasitas": 40, - "tersedia": 6, + "tersedia": 11, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 6 + "tersedia_pria_wanita": 11 }, "new_value": { "kapasitas": 40, - "tersedia": 6, + "tersedia": 11, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 6 + "tersedia_pria_wanita": 11 }, "changed": false, - "last_synced": "2026-04-22T13:46:39Z" + "last_synced": "2026-05-18T03:02:15Z" }, "DAHL1": { "kode_ruang": "DAHL1", @@ -259,20 +259,20 @@ "nama_ruang": "RUANG DAHLIA KELAS 1", "old_value": { "kapasitas": 38, - "tersedia": 14, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 14 + "tersedia_pria_wanita": 26 }, "new_value": { "kapasitas": 38, - "tersedia": 14, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 14 + "tersedia_pria_wanita": 26 }, "changed": false, - "last_synced": "2026-04-23T01:16:26Z" + "last_synced": "2026-05-18T02:35:57Z" }, "GALG3": { "kode_ruang": "GALG3", @@ -293,7 +293,7 @@ "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-23T01:11:31Z" + "last_synced": "2026-05-18T02:35:46Z" }, "GILI1": { "kode_ruang": "GILI1", @@ -301,20 +301,20 @@ "nama_ruang": "RUANG GILI TRAWANGAN KELAS 1", "old_value": { "kapasitas": 2, - "tersedia": 2, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 0 }, "new_value": { "kapasitas": 2, - "tersedia": 2, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 0 }, "changed": false, - "last_synced": "2026-04-22T01:05:20Z" + "last_synced": "2026-05-18T02:35:39Z" }, "GILI2": { "kode_ruang": "GILI2", @@ -322,20 +322,20 @@ "nama_ruang": "RUANG GILI TRAWANGAN KELAS 2", "old_value": { "kapasitas": 4, - "tersedia": 1, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 4, - "tersedia": 1, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T02:50:36Z" + "last_synced": "2026-05-11T10:23:47+07:00" }, "GILI3": { "kode_ruang": "GILI3", @@ -343,20 +343,20 @@ "nama_ruang": "RUANG GILI TRAWANGAN KELAS 3", "old_value": { "kapasitas": 9, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 9, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T09:11:32Z" + "last_synced": "2026-05-18T02:35:39Z" }, "HMEL1": { "kode_ruang": "HMEL1", @@ -377,7 +377,7 @@ "tersedia_pria_wanita": 7 }, "changed": false, - "last_synced": "2026-04-22T01:05:46Z" + "last_synced": "2026-05-18T02:35:56Z" }, "IMEL1": { "kode_ruang": "IMEL1", @@ -385,20 +385,20 @@ "nama_ruang": "RUANG ICU INFEKSI MELATI", "old_value": { "kapasitas": 6, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 6, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T21:36:27Z" + "last_synced": "2026-05-18T02:35:37Z" }, "JIMB2": { "kode_ruang": "JIMB2", @@ -406,20 +406,20 @@ "nama_ruang": "RUANG JIMBARAN KELAS 2", "old_value": { "kapasitas": 28, - "tersedia": 2, + "tersedia": 13, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 13 }, "new_value": { "kapasitas": 28, - "tersedia": 2, + "tersedia": 13, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 13 }, "changed": false, - "last_synced": "2026-04-22T13:06:38Z" + "last_synced": "2026-05-18T02:52:15Z" }, "KAPA1": { "kode_ruang": "KAPA1", @@ -427,20 +427,20 @@ "nama_ruang": "RUANG ICU KAPUAS A", "old_value": { "kapasitas": 16, - "tersedia": 0, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 16, - "tersedia": 0, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T15:16:30Z" + "last_synced": "2026-05-18T02:35:55Z" }, "KAPB1": { "kode_ruang": "KAPB1", @@ -448,20 +448,20 @@ "nama_ruang": "RUANG ICU KAPUAS B", "old_value": { "kapasitas": 9, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 9, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T19:11:33Z" + "last_synced": "2026-05-18T02:35:55Z" }, "KAPC1": { "kode_ruang": "KAPC1", @@ -469,20 +469,20 @@ "nama_ruang": "RUANG ICU KAPUAS C KELAS 1", "old_value": { "kapasitas": 14, - "tersedia": 2, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 14, - "tersedia": 2, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T22:46:27Z" + "last_synced": "2026-05-18T02:35:56Z" }, "KELI1": { "kode_ruang": "KELI1", @@ -490,20 +490,20 @@ "nama_ruang": "RUANG KELIMUTU KELAS 1", "old_value": { "kapasitas": 16, - "tersedia": 9, + "tersedia": 7, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 9 + "tersedia_pria_wanita": 7 }, "new_value": { "kapasitas": 16, - "tersedia": 9, + "tersedia": 7, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 9 + "tersedia_pria_wanita": 7 }, "changed": false, - "last_synced": "2026-04-22T19:16:35Z" + "last_synced": "2026-05-18T02:35:47Z" }, "KELI2": { "kode_ruang": "KELI2", @@ -511,20 +511,20 @@ "nama_ruang": "RUANG KELIMUTU KELAS 2", "old_value": { "kapasitas": 8, - "tersedia": 2, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 4 }, "new_value": { "kapasitas": 8, - "tersedia": 2, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 4 }, "changed": false, - "last_synced": "2026-04-23T01:41:33Z" + "last_synced": "2026-05-18T02:35:48Z" }, "KERC2": { "kode_ruang": "KERC2", @@ -532,20 +532,20 @@ "nama_ruang": "RUANG KERINCI KELAS 2", "old_value": { "kapasitas": 8, - "tersedia": 0, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 2 }, "new_value": { "kapasitas": 8, - "tersedia": 0, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 2 }, "changed": false, - "last_synced": "2026-04-22T17:16:29Z" + "last_synced": "2026-05-18T02:35:58Z" }, "KERC3": { "kode_ruang": "KERC3", @@ -553,20 +553,20 @@ "nama_ruang": "RUANG KERINCI KELAS 3", "old_value": { "kapasitas": 18, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 18, - "tersedia": 4, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-23T01:16:27Z" + "last_synced": "2026-05-18T02:52:15Z" }, "KRAK1": { "kode_ruang": "KRAK1", @@ -574,20 +574,20 @@ "nama_ruang": "RUANG PICU KRAKATAU", "old_value": { "kapasitas": 17, - "tersedia": 2, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 0 }, "new_value": { "kapasitas": 17, - "tersedia": 2, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 0 }, "changed": false, - "last_synced": "2026-04-22T15:41:36Z" + "last_synced": "2026-05-18T02:35:49Z" }, "LOSA3": { "kode_ruang": "LOSA3", @@ -595,20 +595,20 @@ "nama_ruang": "RUANG LOSARI KELAS 3", "old_value": { "kapasitas": 14, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 14, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T15:26:29Z" + "last_synced": "2026-05-18T02:35:43Z" }, "MAHA2": { "kode_ruang": "MAHA2", @@ -616,20 +616,20 @@ "nama_ruang": "RUANG HCU MAHAKAM", "old_value": { "kapasitas": 20, - "tersedia": 10, + "tersedia": 8, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 8 }, "new_value": { "kapasitas": 20, - "tersedia": 10, + "tersedia": 8, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 8 }, "changed": false, - "last_synced": "2026-04-23T00:11:27Z" + "last_synced": "2026-05-18T02:35:40Z" }, "MUSI1": { "kode_ruang": "MUSI1", @@ -650,7 +650,7 @@ "tersedia_pria_wanita": 2 }, "changed": false, - "last_synced": "2026-04-22T13:51:31Z" + "last_synced": "2026-05-18T02:35:50Z" }, "MWAR1": { "kode_ruang": "MWAR1", @@ -658,20 +658,20 @@ "nama_ruang": "RUANG MAWAR KELAS 1", "old_value": { "kapasitas": 30, - "tersedia": 10, + "tersedia": 13, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 13 }, "new_value": { "kapasitas": 30, - "tersedia": 10, + "tersedia": 13, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 13 }, "changed": false, - "last_synced": "2026-04-22T23:31:28Z" + "last_synced": "2026-05-18T03:02:15Z" }, "PANG3": { "kode_ruang": "PANG3", @@ -679,20 +679,20 @@ "nama_ruang": "RUANG PANGANDARAN", "old_value": { "kapasitas": 35, - "tersedia": 2, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 35, - "tersedia": 2, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T16:31:29Z" + "last_synced": "2026-05-18T02:35:41Z" }, "PARA3": { "kode_ruang": "PARA3", @@ -700,20 +700,20 @@ "nama_ruang": "RUANG PARANGTRITIS", "old_value": { "kapasitas": 30, - "tersedia": 4, + "tersedia": 6, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 6 }, "new_value": { "kapasitas": 30, - "tersedia": 4, + "tersedia": 5, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 5 }, - "changed": false, - "last_synced": "2026-04-23T01:46:26Z" + "changed": true, + "last_synced": "2026-05-18T03:15:28Z" }, "RANKB3": { "kode_ruang": "RANKB3", @@ -721,20 +721,20 @@ "nama_ruang": "RUANG RANU KUMBOLO (BAYI) KELAS 3", "old_value": { "kapasitas": 1, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 1, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T03:30:23Z" + "last_synced": "2026-05-18T02:35:47Z" }, "RANU2": { "kode_ruang": "RANU2", @@ -742,20 +742,20 @@ "nama_ruang": "RUANG HCU RANU GRATI", "old_value": { "kapasitas": 8, - "tersedia": 2, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 4 }, "new_value": { "kapasitas": 8, - "tersedia": 2, + "tersedia": 4, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 4 }, "changed": false, - "last_synced": "2026-04-22T22:36:28Z" + "last_synced": "2026-05-18T02:35:54Z" }, "RANU3": { "kode_ruang": "RANU3", @@ -763,20 +763,20 @@ "nama_ruang": "RUANG RANU KUMBOLO KELAS 3", "old_value": { "kapasitas": 18, - "tersedia": 8, + "tersedia": 12, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 8 + "tersedia_pria_wanita": 12 }, "new_value": { "kapasitas": 18, - "tersedia": 8, + "tersedia": 12, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 8 + "tersedia_pria_wanita": 12 }, "changed": false, - "last_synced": "2026-04-22T15:01:31Z" + "last_synced": "2026-05-18T02:35:59Z" }, "RGPLT21": { "kode_ruang": "RGPLT21", @@ -784,20 +784,20 @@ "nama_ruang": "RUANG GRAND PAV LANTAI 2 KELAS 1", "old_value": { "kapasitas": 12, - "tersedia": 10, + "tersedia": 7, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 7 }, "new_value": { "kapasitas": 12, - "tersedia": 10, + "tersedia": 7, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 7 }, "changed": false, - "last_synced": "2026-04-22T06:51:32Z" + "last_synced": "2026-05-18T02:36:07Z" }, "RGPLT2VIP": { "kode_ruang": "RGPLT2VIP", @@ -805,20 +805,20 @@ "nama_ruang": "RUANG GRAND PAV LANTAI 2 KELAS VIP", "old_value": { "kapasitas": 5, - "tersedia": 3, + "tersedia": 5, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 5 }, "new_value": { "kapasitas": 5, - "tersedia": 3, + "tersedia": 5, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 5 }, "changed": false, - "last_synced": "2026-04-22T12:36:32Z" + "last_synced": "2026-05-18T02:36:09Z" }, "RGPLT3": { "kode_ruang": "RGPLT3", @@ -839,28 +839,7 @@ "tersedia_pria_wanita": 15 }, "changed": false, - "last_synced": "2026-04-23T01:26:29Z" - }, - "RGPLT4": { - "kode_ruang": "RGPLT4", - "kodekelas": "VIP", - "nama_ruang": "RUANG GRAND PAV LANTAI 4 KELAS VIP A", - "old_value": { - "kapasitas": 24, - "tersedia": 24, - "tersedia_pria": 0, - "tersedia_wanita": 0, - "tersedia_pria_wanita": 24 - }, - "new_value": { - "kapasitas": 24, - "tersedia": 24, - "tersedia_pria": 0, - "tersedia_wanita": 0, - "tersedia_pria_wanita": 24 - }, - "changed": false, - "last_synced": "2026-04-22T01:06:01Z" + "last_synced": "2026-05-18T02:36:01Z" }, "RGPLT7VIP": { "kode_ruang": "RGPLT7VIP", @@ -868,20 +847,20 @@ "nama_ruang": "RUANG GRAND PAV LANTAI 7 KELAS VIP", "old_value": { "kapasitas": 3, - "tersedia": 3, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 2 }, "new_value": { "kapasitas": 3, - "tersedia": 3, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 2 }, "changed": false, - "last_synced": "2026-04-22T01:06:03Z" + "last_synced": "2026-05-18T02:36:08Z" }, "RHCKW2": { "kode_ruang": "RHCKW2", @@ -889,20 +868,20 @@ "nama_ruang": "RUANG HCU KAWI KELAS 2", "old_value": { "kapasitas": 9, - "tersedia": 8, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 8 + "tersedia_pria_wanita": 3 }, "new_value": { "kapasitas": 9, - "tersedia": 8, + "tersedia": 3, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 8 + "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-22T04:01:45Z" + "last_synced": "2026-05-18T02:36:03Z" }, "RHRP3": { "kode_ruang": "RHRP3", @@ -910,20 +889,20 @@ "nama_ruang": "RUANG HCU RANU PANE KELAS 2", "old_value": { "kapasitas": 38, - "tersedia": 30, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 30 + "tersedia_pria_wanita": 26 }, "new_value": { "kapasitas": 38, - "tersedia": 30, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 30 + "tersedia_pria_wanita": 26 }, "changed": false, - "last_synced": "2026-04-23T00:31:34Z" + "last_synced": "2026-05-18T02:36:05Z" }, "RINJ1": { "kode_ruang": "RINJ1", @@ -931,20 +910,20 @@ "nama_ruang": "RUANG RINJANI KELAS 1", "old_value": { "kapasitas": 2, - "tersedia": 1, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 0 }, "new_value": { "kapasitas": 2, - "tersedia": 1, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 0 }, "changed": false, - "last_synced": "2026-04-22T07:51:42Z" + "last_synced": "2026-05-18T02:35:44Z" }, "RINJ2": { "kode_ruang": "RINJ2", @@ -952,20 +931,20 @@ "nama_ruang": "RUANG RINJANI KELAS 2", "old_value": { "kapasitas": 2, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "new_value": { "kapasitas": 2, - "tersedia": 0, + "tersedia": 1, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 0 + "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T01:05:29Z" + "last_synced": "2026-05-11T10:23:47+07:00" }, "RINJ3": { "kode_ruang": "RINJ3", @@ -973,20 +952,20 @@ "nama_ruang": "RUANG RINJANI KELAS 3", "old_value": { "kapasitas": 18, - "tersedia": 1, + "tersedia": 8, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 8 }, "new_value": { "kapasitas": 18, - "tersedia": 1, + "tersedia": 8, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 1 + "tersedia_pria_wanita": 8 }, "changed": false, - "last_synced": "2026-04-22T22:01:28Z" + "last_synced": "2026-05-18T02:52:15Z" }, "RNICU1": { "kode_ruang": "RNICU1", @@ -994,20 +973,20 @@ "nama_ruang": "RUANG NICU MANINJAU KELAS 1", "old_value": { "kapasitas": 12, - "tersedia": 3, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 0 }, "new_value": { "kapasitas": 12, - "tersedia": 3, + "tersedia": 0, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 3 + "tersedia_pria_wanita": 0 }, "changed": false, - "last_synced": "2026-04-23T01:21:36Z" + "last_synced": "2026-05-18T02:36:06Z" }, "RNS1": { "kode_ruang": "RNS1", @@ -1015,20 +994,20 @@ "nama_ruang": "RUANG NUSA DUA KELAS 1", "old_value": { "kapasitas": 20, - "tersedia": 2, + "tersedia": 9, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 9 }, "new_value": { "kapasitas": 20, - "tersedia": 2, + "tersedia": 8, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 2 + "tersedia_pria_wanita": 8 }, - "changed": false, - "last_synced": "2026-04-23T01:01:35Z" + "changed": true, + "last_synced": "2026-05-18T03:15:28Z" }, "ROE2": { "kode_ruang": "ROE2", @@ -1036,20 +1015,20 @@ "nama_ruang": "RUANG ROE KELAS 2", "old_value": { "kapasitas": 10, - "tersedia": 4, + "tersedia": 9, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 9 }, "new_value": { "kapasitas": 10, - "tersedia": 4, + "tersedia": 9, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 4 + "tersedia_pria_wanita": 9 }, "changed": false, - "last_synced": "2026-04-22T23:16:33Z" + "last_synced": "2026-05-18T02:36:00Z" }, "RSING3": { "kode_ruang": "RSING3", @@ -1057,20 +1036,20 @@ "nama_ruang": "RUANG SINGKARAK KELAS 3", "old_value": { "kapasitas": 30, - "tersedia": 10, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 26 }, "new_value": { "kapasitas": 30, - "tersedia": 10, + "tersedia": 26, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 10 + "tersedia_pria_wanita": 26 }, "changed": false, - "last_synced": "2026-04-23T02:01:27Z" + "last_synced": "2026-05-18T02:36:04Z" }, "RTOBY2": { "kode_ruang": "RTOBY2", @@ -1091,7 +1070,7 @@ "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T01:05:57Z" + "last_synced": "2026-05-18T02:36:03Z" }, "SARA2": { "kode_ruang": "SARA2", @@ -1099,20 +1078,20 @@ "nama_ruang": "RUANG HCU SARANGAN", "old_value": { "kapasitas": 11, - "tersedia": 6, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 6 + "tersedia_pria_wanita": 2 }, "new_value": { "kapasitas": 11, - "tersedia": 6, + "tersedia": 2, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 6 + "tersedia_pria_wanita": 2 }, "changed": false, - "last_synced": "2026-04-23T01:01:26Z" + "last_synced": "2026-05-18T02:35:48Z" }, "SEME3": { "kode_ruang": "SEME3", @@ -1120,20 +1099,20 @@ "nama_ruang": "RUANG SEMERU", "old_value": { "kapasitas": 43, - "tersedia": 11, + "tersedia": 34, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 11 + "tersedia_pria_wanita": 34 }, "new_value": { "kapasitas": 43, - "tersedia": 11, + "tersedia": 34, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 11 + "tersedia_pria_wanita": 34 }, "changed": false, - "last_synced": "2026-04-23T00:31:33Z" + "last_synced": "2026-05-18T02:35:53Z" }, "TOBA1": { "kode_ruang": "TOBA1", @@ -1154,7 +1133,7 @@ "tersedia_pria_wanita": 1 }, "changed": false, - "last_synced": "2026-04-22T01:05:40Z" + "last_synced": "2026-05-18T02:35:53Z" }, "TOIB1": { "kode_ruang": "TOIB1", @@ -1175,7 +1154,7 @@ "tersedia_pria_wanita": 4 }, "changed": false, - "last_synced": "2026-04-23T02:01:26Z" + "last_synced": "2026-05-18T02:52:15Z" }, "TOIB2": { "kode_ruang": "TOIB2", @@ -1196,7 +1175,7 @@ "tersedia_pria_wanita": 3 }, "changed": false, - "last_synced": "2026-04-23T01:36:27Z" + "last_synced": "2026-05-18T02:52:15Z" }, "TOND3": { "kode_ruang": "TOND3", @@ -1204,20 +1183,20 @@ "nama_ruang": "RUANG TONDANO", "old_value": { "kapasitas": 50, - "tersedia": 26, + "tersedia": 29, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 26 + "tersedia_pria_wanita": 29 }, "new_value": { "kapasitas": 50, - "tersedia": 26, + "tersedia": 28, "tersedia_pria": 0, "tersedia_wanita": 0, - "tersedia_pria_wanita": 26 + "tersedia_pria_wanita": 28 }, - "changed": false, - "last_synced": "2026-04-22T22:41:38Z" + "changed": true, + "last_synced": "2026-05-18T03:15:28Z" } } } \ No newline at end of file diff --git a/internal/admin/admin.go b/internal/admin/admin.go new file mode 100644 index 0000000..ae76ea0 --- /dev/null +++ b/internal/admin/admin.go @@ -0,0 +1,576 @@ +package admin + +import ( + "api-service/internal/config" + "api-service/internal/database" + "context" + "database/sql" + "encoding/json" + "fmt" + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" +) + +type Ruangan struct { + No int + Nama string + JumlahTT int + KodeKelas sql.NullString + KodeAplicare sql.NullString + NamaRuang sql.NullString + StAktif int +} + +type AdminHandler struct { + db database.Service +} + +type AdminHandlerConfig struct { + Config *config.Config +} + +func NewAdminHandler(cfg AdminHandlerConfig) *AdminHandler { + return &AdminHandler{db: database.New(cfg.Config)} +} + +func (h *AdminHandler) getRuangan(ctx context.Context) ([]Ruangan, error) { + db, err := h.db.GetDB("simrs") + if err != nil { + return nil, fmt.Errorf("koneksi simrs gagal: %w", err) + } + + rows, err := db.QueryContext(ctx, ` + SELECT no, nama, jumlah_tt, kode_kelas, kode_aplicare, nama_ruang, st_aktif + FROM m_ruang + WHERE subsistem LIKE '%RAWAT INAP%' + ORDER BY no + `) + if err != nil { + return nil, err + } + defer rows.Close() + + var result []Ruangan + for rows.Next() { + var r Ruangan + if err := rows.Scan(&r.No, &r.Nama, &r.JumlahTT, + &r.KodeKelas, &r.KodeAplicare, &r.NamaRuang, &r.StAktif); err != nil { + return nil, err + } + result = append(result, r) + } + return result, rows.Err() +} + +// GetPage — GET /admin/aplicares +func (h *AdminHandler) GetPage(c *gin.Context) { + ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second) + defer cancel() + + ruangans, err := h.getRuangan(ctx) + if err != nil { + c.String(http.StatusInternalServerError, "Error: "+err.Error()) + return + } + + type RuanganJSON struct { + No int `json:"no"` + Nama string `json:"nama"` + JumlahTT int `json:"jumlah_tt"` + KodeKelas string `json:"kode_kelas"` + KodeAplicare string `json:"kode_aplicare"` + NamaRuang string `json:"nama_ruang"` + SudahMapping bool `json:"sudah_mapping"` + StAktif int `json:"st_aktif"` + } + + var data []RuanganJSON + belumMapping := 0 + for _, r := range ruangans { + sudah := r.KodeKelas.Valid && r.KodeKelas.String != "" && + r.KodeAplicare.Valid && r.KodeAplicare.String != "" + if !sudah { + belumMapping++ + } + data = append(data, RuanganJSON{ + No: r.No, + Nama: r.Nama, + JumlahTT: r.JumlahTT, + KodeKelas: r.KodeKelas.String, + KodeAplicare: r.KodeAplicare.String, + NamaRuang: r.NamaRuang.String, + SudahMapping: sudah, + StAktif: r.StAktif, + }) + } + + jsonData, _ := json.Marshal(data) + + html := ` + + + + +Admin Aplicares + + + + +
+

🏥 Admin Aplicares — Mapping Ruangan BPJS

+ +
+ +
+
+
-
+
Total Ruangan
+
+
+
-
+
Sudah Mapping
+
+
+
-
+
Belum Mapping
+
+
+ +
+ +
+ + + + + + + + + + + + + + +
NoNama Ruangan (SIMRS)KapasitasStatusKode KelasKode BPJSStatusAksi
+
+
+ + + + + + + +
+ + + +` + + c.Header("Content-Type", "text/html; charset=utf-8") + c.String(http.StatusOK, html) +} + +func kelasOptions() string { + opts := ` + + + + + + + + + + + + + + + + ` + return opts +} + +// GetRuangan — GET /api/v1/admin/aplicares/ruangan (JSON) +func (h *AdminHandler) GetRuangan(c *gin.Context) { + ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second) + defer cancel() + + ruangans, err := h.getRuangan(ctx) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + type Resp struct { + No int `json:"no"` + Nama string `json:"nama"` + JumlahTT int `json:"jumlah_tt"` + KodeKelas string `json:"kode_kelas"` + KodeAplicare string `json:"kode_aplicare"` + NamaRuang string `json:"nama_ruang"` + SudahMapping bool `json:"sudah_mapping"` + } + + var data []Resp + belum := 0 + for _, r := range ruangans { + sudah := r.KodeKelas.Valid && r.KodeKelas.String != "" && + r.KodeAplicare.Valid && r.KodeAplicare.String != "" + if !sudah { + belum++ + } + data = append(data, Resp{ + No: r.No, Nama: r.Nama, JumlahTT: r.JumlahTT, + KodeKelas: r.KodeKelas.String, KodeAplicare: r.KodeAplicare.String, + NamaRuang: r.NamaRuang.String, SudahMapping: sudah, + }) + } + + c.JSON(http.StatusOK, gin.H{ + "total": len(data), "belum_mapping": belum, + "sudah_mapping": len(data) - belum, "data": data, + }) +} + +// UpdateRuangan — PUT /api/v1/admin/aplicares/ruangan/:no +func (h *AdminHandler) UpdateRuangan(c *gin.Context) { + no, err := strconv.Atoi(c.Param("no")) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "no tidak valid"}) + return + } + + var body struct { + KodeKelas string `json:"kode_kelas"` + KodeAplicare string `json:"kode_aplicare"` + NamaRuang string `json:"nama_ruang"` + JumlahTT int `json:"jumlah_tt"` + StAktif int `json:"st_aktif"` + } + if err := c.ShouldBindJSON(&body); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + if body.KodeKelas == "" || body.KodeAplicare == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "kode_kelas dan kode_aplicare wajib diisi"}) + return + } + + db, err := h.db.GetDB("simrs") + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "koneksi DB gagal"}) + return + } + + ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Second) + defer cancel() + + result, err := db.ExecContext(ctx, ` + UPDATE m_ruang SET kode_kelas=$1, kode_aplicare=$2, nama_ruang=$3, jumlah_tt=$4, st_aktif=$5 WHERE no=$6 + `, body.KodeKelas, body.KodeAplicare, body.NamaRuang, body.JumlahTT, body.StAktif, no) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "update gagal: " + err.Error()}) + return + } + rowsAffected, _ := result.RowsAffected() + if rowsAffected == 0 { + c.JSON(http.StatusOK, gin.H{"error": "tidak ada row yang terupdate, no=" + fmt.Sprintf("%d", no)}) + return + } + c.JSON(http.StatusOK, gin.H{"message": "berhasil diupdate", "no": no, "rows_affected": rowsAffected}) +} + +// CreateRuangan — POST /api/v1/admin/aplicares/ruangan +func (h *AdminHandler) CreateRuangan(c *gin.Context) { + var body struct { + Nama string `json:"nama"` + JumlahTT int `json:"jumlah_tt"` + KodeKelas string `json:"kode_kelas"` + KodeAplicare string `json:"kode_aplicare"` + NamaRuang string `json:"nama_ruang"` + } + if err := c.ShouldBindJSON(&body); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + if body.Nama == "" || body.KodeKelas == "" || body.KodeAplicare == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "nama, kode_kelas, kode_aplicare wajib diisi"}) + return + } + + db, err := h.db.GetDB("simrs") + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "koneksi DB gagal"}) + return + } + + ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Second) + defer cancel() + + // Auto generate no = MAX(no) + 1 + var maxNo int + err = db.QueryRowContext(ctx, `SELECT COALESCE(MAX(no), 0) FROM m_ruang`).Scan(&maxNo) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "gagal generate no: " + err.Error()}) + return + } + newNo := maxNo + 1 + + _, err = db.ExecContext(ctx, ` + INSERT INTO m_ruang (no, nama, jumlah_tt, subsistem, st_aktif, kode_kelas, kode_aplicare, nama_ruang) + VALUES ($1, $2, $3, 'RAWAT INAP', 1, $4, $5, $6) + `, newNo, body.Nama, body.JumlahTT, body.KodeKelas, body.KodeAplicare, body.NamaRuang) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "insert gagal: " + err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"message": "ruangan berhasil ditambahkan", "no": newNo}) +} diff --git a/internal/routes/v1/routes.go b/internal/routes/v1/routes.go index 00ad537..84e5bca 100644 --- a/internal/routes/v1/routes.go +++ b/internal/routes/v1/routes.go @@ -1,6 +1,7 @@ package v1 import ( + "api-service/internal/admin" AplicareHandler "api-service/internal/aplicare" "api-service/internal/config" "api-service/internal/database" @@ -145,6 +146,18 @@ func RegisterRoutes(cfg *config.Config) *gin.Engine { ag.GET("/logs", aplicaresHandler.GetSyncLogs) } + adminHandler := admin.NewAdminHandler(admin.AdminHandlerConfig{ + Config: cfg, + }) + + adminGroup := v1.Group("/admin/aplicares") + { + adminGroup.GET("/ruangan", adminHandler.GetRuangan) // JSON API + adminGroup.PUT("/ruangan/:no", adminHandler.UpdateRuangan) // update mapping + adminGroup.POST("/ruangan", adminHandler.CreateRuangan) + } + + router.GET("/admin", adminHandler.GetPage) // ============================================================================= // PROTECTED ROUTES (Authentication Required) // ============================================================================= diff --git a/internal/ruang/database.go b/internal/ruang/database.go new file mode 100644 index 0000000..4e966d3 --- /dev/null +++ b/internal/ruang/database.go @@ -0,0 +1,39 @@ +package ruang + +import ( + "context" + "fmt" +) + +func (s *SimrsDB) GetMRuangan(ctx context.Context) ([]Ruangan, error) { + db, err := s.db.GetDB("simrs") + if err != nil { + return nil, fmt.Errorf("koneksi simrs gagal: %w", err) + } + + query := ` + SELECT no, nama, jumlah_tt,kode_aplicare, nama_ruang, kode_kelas + FROM m_ruang + where st_aktif = 1 + ORDER BY no + ` + + rows, err := db.QueryContext(ctx, query) + if err != nil { + return nil, fmt.Errorf("query m_ruang gagal: %w", err) + } + defer rows.Close() + + var result []Ruangan + for rows.Next() { + var r Ruangan + if err := rows.Scan( + &r.No, &r.Nama, &r.JumlahTT, + &r.KodeRuang, &r.NamaRuang, &r.KelasRuang, + ); err != nil { + return nil, fmt.Errorf("scan m_ruang gagal: %w", err) + } + result = append(result, r) + } + return result, rows.Err() +} diff --git a/internal/ruang/models.go b/internal/ruang/models.go new file mode 100644 index 0000000..1965537 --- /dev/null +++ b/internal/ruang/models.go @@ -0,0 +1,12 @@ +package ruang + +import "database/sql" + +type Ruangan struct { + No int `db:"no"` + Nama string `db:"nama"` + JumlahTT int `db:"jumlah_tt"` + KodeRuang sql.NullString `db:"kode_aplicare"` // diisi manual, dikirim ke BPJS + NamaRuang sql.NullString `db:"nama_ruang"` // diisi manual, dikirim ke BPJS + KelasRuang sql.NullString `db:"kode_kelas"` // diisi manual, dikirim ke BPJS +} diff --git a/internal/ruang/ruang.go b/internal/ruang/ruang.go new file mode 100644 index 0000000..4fcfdd4 --- /dev/null +++ b/internal/ruang/ruang.go @@ -0,0 +1,44 @@ +package ruang + +import ( + "api-service/internal/config" + "api-service/internal/database" + "api-service/pkg/logger" + "context" + "github.com/gin-gonic/gin" + "github.com/go-playground/validator/v10" + "net/http" + "sync" + "time" +) + +type MruangHandler struct { + simrs *SimrsDB + validator *validator.Validate + logger logger.Logger + cfg *config.Config + once sync.Once + interval time.Duration +} + +type MruangHandlerConfig struct { + Config *config.Config + Logger logger.Logger + Validator *validator.Validate +} +type SimrsDB struct { + db database.Service +} + +func (h *MruangHandler) NewMruangHandler(c *gin.Context) { + ctx, cancel := context.WithTimeout(c.Request.Context(), 120*time.Second) + defer cancel() + + ruangans, err := h.simrs.GetMRuangan(ctx) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, ruangans) +} diff --git a/logs/sync.log b/logs/sync.log index 10f3b64..68aa42c 100644 --- a/logs/sync.log +++ b/logs/sync.log @@ -772,3 +772,743 @@ {"timestamp":"2026-04-23T02:01:26Z","kode_ruang":"TOIB1","nama_ruang":"RUANG TOBA (IBU) KELAS 1","kode_kelas":"KL1","kapasitas":10,"tersedia":4,"action":"post","status":"sukses","response_ms":1125} {"timestamp":"2026-04-23T02:01:27Z","kode_ruang":"RSING3","nama_ruang":"RUANG SINGKARAK KELAS 3","kode_kelas":"KL3","kapasitas":30,"tersedia":10,"action":"post","status":"sukses","response_ms":765} {"action":"batch_sync","changed":2,"dry_run":false,"errors":null,"posted":2,"status":"sukses","timestamp":"2026-04-23T02:01:27Z","total_rooms":58} +{"action":"batch_sync","changed":40,"dry_run":true,"errors":null,"posted":40,"status":"sukses","timestamp":"2026-05-11T10:23:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:28:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:33:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:38:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:43:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:48:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:53:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:58:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:03:47+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:08:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:13:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:18:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:23:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:28:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:33:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:38:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:43:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:48:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:53:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:58:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:03:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:08:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:13:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:18:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:23:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:28:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:33:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:38:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:43:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:48:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:53:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:58:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:03:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:08:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:13:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:18:11+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:21:13+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:24:56+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:29:56+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:34:21+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:38:38+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:40:30+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:07:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:12:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:17:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:22:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:27:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:32:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:37:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:42:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:47:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:52:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:57:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:02:58+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:43:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:48:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:53:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:58:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:03:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:08:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:13:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:18:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:23:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:28:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:33:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:38:00+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:38:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:43:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:48:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:53:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:58:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:03:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:08:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:13:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:18:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:23:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:28:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:33:02+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:33:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:38:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:43:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:48:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:53:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:58:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:03:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:08:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:13:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:18:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:23:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:28:03+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T08:56:20+07:00","total_rooms":46} +{"action":"batch_sync","changed":1,"dry_run":true,"errors":null,"posted":1,"status":"sukses","timestamp":"2026-05-18T09:01:20+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:22:49+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:27:49+07:00","total_rooms":46} +{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:32:02+07:00","total_rooms":46} +{"timestamp":"2026-05-18T02:35:37Z","kode_ruang":"IMEL1","nama_ruang":"RUANG ICU INFEKSI MELATI","kode_kelas":"ISO","kapasitas":6,"tersedia":1,"action":"post","status":"sukses","response_ms":5213} +{"timestamp":"2026-05-18T02:35:38Z","kode_ruang":"BUNA2","nama_ruang":"RUANG BUNAKEN KELAS 2","kode_kelas":"KL2","kapasitas":6,"tersedia":3,"action":"post","status":"sukses","response_ms":496} +{"timestamp":"2026-05-18T02:35:38Z","kode_ruang":"BUNA3","nama_ruang":"RUANG BUNAKEN KELAS 3","kode_kelas":"KL3","kapasitas":16,"tersedia":7,"action":"post","status":"sukses","response_ms":518} +{"timestamp":"2026-05-18T02:35:39Z","kode_ruang":"GILI1","nama_ruang":"RUANG GILI TRAWANGAN KELAS 1","kode_kelas":"KL1","kapasitas":2,"action":"post","status":"sukses","response_ms":460} +{"timestamp":"2026-05-18T02:35:39Z","kode_ruang":"GILI3","nama_ruang":"RUANG GILI TRAWANGAN KELAS 3","kode_kelas":"KL3","kapasitas":9,"tersedia":1,"action":"post","status":"sukses","response_ms":524} +{"timestamp":"2026-05-18T02:35:40Z","kode_ruang":"MAHA2","nama_ruang":"RUANG HCU MAHAKAM","kode_kelas":"HCU","kapasitas":20,"tersedia":8,"action":"post","status":"sukses","response_ms":908} +{"timestamp":"2026-05-18T02:35:41Z","kode_ruang":"BRAN2","nama_ruang":"RUANG HCU BRANTAS","kode_kelas":"HCU","kapasitas":9,"tersedia":2,"action":"post","status":"sukses","response_ms":853} +{"timestamp":"2026-05-18T02:35:41Z","kode_ruang":"PANG3","nama_ruang":"RUANG PANGANDARAN","kode_kelas":"KL3","kapasitas":35,"tersedia":3,"action":"post","status":"sukses","response_ms":461} +{"timestamp":"2026-05-18T02:35:42Z","kode_ruang":"PARA3","nama_ruang":"RUANG PARANGTRITIS","kode_kelas":"KL3","kapasitas":30,"tersedia":6,"action":"post","status":"sukses","response_ms":474} +{"timestamp":"2026-05-18T02:35:43Z","kode_ruang":"LOSA3","nama_ruang":"RUANG LOSARI KELAS 3","kode_kelas":"KL3","kapasitas":14,"tersedia":1,"action":"post","status":"sukses","response_ms":957} +{"timestamp":"2026-05-18T02:35:44Z","kode_ruang":"BROM3","nama_ruang":"RUANG BROMO KELAS 3","kode_kelas":"KL3","kapasitas":42,"tersedia":12,"action":"post","status":"sukses","response_ms":873} +{"timestamp":"2026-05-18T02:35:44Z","kode_ruang":"RINJ1","nama_ruang":"RUANG RINJANI KELAS 1","kode_kelas":"KL1","kapasitas":2,"action":"post","status":"sukses","response_ms":882} +{"timestamp":"2026-05-18T02:35:45Z","kode_ruang":"RINJ3","nama_ruang":"RUANG RINJANI KELAS 3","kode_kelas":"KL3","kapasitas":18,"tersedia":9,"action":"post","status":"sukses","response_ms":893} +{"timestamp":"2026-05-18T02:35:46Z","kode_ruang":"GALG3","nama_ruang":"RUANG GALUNGGUNG KELAS 3","kode_kelas":"KL3","kapasitas":16,"tersedia":1,"action":"post","status":"sukses","response_ms":518} +{"timestamp":"2026-05-18T02:35:47Z","kode_ruang":"RANKB3","nama_ruang":"RUANG RANU KUMBOLO (BAYI) KELAS 3","kode_kelas":"KL3","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":743} +{"timestamp":"2026-05-18T02:35:47Z","kode_ruang":"KELI1","nama_ruang":"RUANG KELIMUTU KELAS 1","kode_kelas":"KL1","kapasitas":16,"tersedia":7,"action":"post","status":"sukses","response_ms":664} +{"timestamp":"2026-05-18T02:35:48Z","kode_ruang":"KELI2","nama_ruang":"RUANG KELIMUTU KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":347} +{"timestamp":"2026-05-18T02:35:48Z","kode_ruang":"SARA2","nama_ruang":"RUANG HCU SARANGAN","kode_kelas":"HCU","kapasitas":11,"tersedia":2,"action":"post","status":"sukses","response_ms":505} +{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"TOND3","nama_ruang":"RUANG TONDANO","kode_kelas":"KL3","kapasitas":50,"tersedia":30,"action":"post","status":"sukses","response_ms":369} +{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"KRAK1","nama_ruang":"RUANG PICU KRAKATAU","kode_kelas":"PIC","kapasitas":17,"action":"post","status":"sukses","response_ms":424} +{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"BARIV","nama_ruang":"RUANG BARITO VIP","kode_kelas":"VIP","kapasitas":2,"tersedia":1,"action":"post","status":"sukses","response_ms":506} +{"timestamp":"2026-05-18T02:35:50Z","kode_ruang":"MUSI1","nama_ruang":"RUANG CVCU MUSI","kode_kelas":"ICC","kapasitas":13,"tersedia":2,"action":"post","status":"sukses","response_ms":430} +{"timestamp":"2026-05-18T02:35:51Z","kode_ruang":"BARI1","nama_ruang":"RUANG BARITO KELAS 1","kode_kelas":"KL1","kapasitas":6,"action":"post","status":"sukses","response_ms":688} +{"timestamp":"2026-05-18T02:35:51Z","kode_ruang":"TOIB1","nama_ruang":"RUANG TOBA (IBU) KELAS 1","kode_kelas":"KL1","kapasitas":10,"tersedia":5,"action":"post","status":"sukses","response_ms":535} +{"timestamp":"2026-05-18T02:35:52Z","kode_ruang":"BARI2","nama_ruang":"RUANG BARITO KELAS 2","kode_kelas":"KL2","kapasitas":4,"tersedia":4,"action":"post","status":"sukses","response_ms":660} +{"timestamp":"2026-05-18T02:35:52Z","kode_ruang":"BARI3","nama_ruang":"RUANG BARITO KELAS 3","kode_kelas":"KL3","kapasitas":11,"tersedia":1,"action":"post","status":"sukses","response_ms":385} +{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"TOBA1","nama_ruang":"RUANG TOBA (BAYI) KELAS 1","kode_kelas":"KL1","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":380} +{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"CISA2","nama_ruang":"RUANG HCU CISADANE","kode_kelas":"HCU","kapasitas":40,"tersedia":11,"action":"post","status":"sukses","response_ms":359} +{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"SEME3","nama_ruang":"RUANG SEMERU","kode_kelas":"KL3","kapasitas":43,"tersedia":34,"action":"post","status":"sukses","response_ms":396} +{"timestamp":"2026-05-18T02:35:54Z","kode_ruang":"RANU2","nama_ruang":"RUANG HCU RANU GRATI","kode_kelas":"HCU","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":349} +{"timestamp":"2026-05-18T02:35:54Z","kode_ruang":"TOIB2","nama_ruang":"RUANG TOBA (IBU) KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":404} +{"timestamp":"2026-05-18T02:35:55Z","kode_ruang":"KAPA1","nama_ruang":"RUANG ICU KAPUAS A","kode_kelas":"ICU","kapasitas":16,"tersedia":3,"action":"post","status":"sukses","response_ms":652} +{"timestamp":"2026-05-18T02:35:55Z","kode_ruang":"KAPB1","nama_ruang":"RUANG ICU KAPUAS B","kode_kelas":"ICU","kapasitas":9,"tersedia":1,"action":"post","status":"sukses","response_ms":407} +{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"HMEL1","nama_ruang":"RUANG HCU INFEKSI MELATI","kode_kelas":"ISO","kapasitas":8,"tersedia":7,"action":"post","status":"sukses","response_ms":400} +{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"BUGV3","nama_ruang":"RUANG BUGENVILE KELAS 3","kode_kelas":"ISO","kapasitas":20,"tersedia":10,"action":"post","status":"sukses","response_ms":403} +{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"KAPC1","nama_ruang":"RUANG ICU KAPUAS C KELAS 1","kode_kelas":"ICU","kapasitas":14,"tersedia":3,"action":"post","status":"sukses","response_ms":413} +{"timestamp":"2026-05-18T02:35:57Z","kode_ruang":"DAHL1","nama_ruang":"RUANG DAHLIA KELAS 1","kode_kelas":"KL1","kapasitas":38,"tersedia":26,"action":"post","status":"sukses","response_ms":533} +{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"MWAR1","nama_ruang":"RUANG MAWAR KELAS 1","kode_kelas":"KL1","kapasitas":30,"tersedia":15,"action":"post","status":"sukses","response_ms":744} +{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"JIMB2","nama_ruang":"RUANG JIMBARAN KELAS 2","kode_kelas":"KL2","kapasitas":28,"tersedia":14,"action":"post","status":"sukses","response_ms":344} +{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"KERC2","nama_ruang":"RUANG KERINCI KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":2,"action":"post","status":"sukses","response_ms":408} +{"timestamp":"2026-05-18T02:35:59Z","kode_ruang":"KERC3","nama_ruang":"RUANG KERINCI KELAS 3","kode_kelas":"KL3","kapasitas":18,"action":"post","status":"sukses","response_ms":484} +{"timestamp":"2026-05-18T02:35:59Z","kode_ruang":"RANU3","nama_ruang":"RUANG RANU KUMBOLO KELAS 3","kode_kelas":"KL3","kapasitas":18,"tersedia":12,"action":"post","status":"sukses","response_ms":365} +{"timestamp":"2026-05-18T02:36:00Z","kode_ruang":"ROE2","nama_ruang":"RUANG ROE KELAS 2","kode_kelas":"KL2","kapasitas":10,"tersedia":9,"action":"post","status":"sukses","response_ms":493} +{"timestamp":"2026-05-18T02:36:01Z","kode_ruang":"RGPLT3","nama_ruang":"RUANG GRAND PAV LANTAI 3 KELAS VIP A","kode_kelas":"VIP","kapasitas":24,"tersedia":15,"action":"post","status":"sukses","response_ms":893} +{"timestamp":"2026-05-18T02:36:02Z","kode_ruang":"RNS1","nama_ruang":"RUANG NUSA DUA KELAS 1","kode_kelas":"KL1","kapasitas":20,"tersedia":10,"action":"post","status":"sukses","response_ms":941} +{"timestamp":"2026-05-18T02:36:03Z","kode_ruang":"RHCKW2","nama_ruang":"RUANG HCU KAWI KELAS 2","kode_kelas":"HCU","kapasitas":9,"tersedia":3,"action":"post","status":"sukses","response_ms":1003} +{"timestamp":"2026-05-18T02:36:03Z","kode_ruang":"RTOBY2","nama_ruang":"RUANG TOBA (BAYI) KELAS 2","kode_kelas":"KL2","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":530} +{"timestamp":"2026-05-18T02:36:04Z","kode_ruang":"RSING3","nama_ruang":"RUANG SINGKARAK KELAS 3","kode_kelas":"KL3","kapasitas":30,"tersedia":26,"action":"post","status":"sukses","response_ms":1016} +{"timestamp":"2026-05-18T02:36:05Z","kode_ruang":"RHRP3","nama_ruang":"RUANG HCU RANU PANE KELAS 2","kode_kelas":"HCU","kapasitas":38,"tersedia":26,"action":"post","status":"sukses","response_ms":873} +{"timestamp":"2026-05-18T02:36:06Z","kode_ruang":"RNICU1","nama_ruang":"RUANG NICU MANINJAU KELAS 1","kode_kelas":"NIC","kapasitas":12,"action":"post","status":"sukses","response_ms":1138} +{"timestamp":"2026-05-18T02:36:07Z","kode_ruang":"RGPLT21","nama_ruang":"RUANG GRAND PAV LANTAI 2 KELAS 1","kode_kelas":"KL1","kapasitas":12,"tersedia":7,"action":"post","status":"sukses","response_ms":940} +{"timestamp":"2026-05-18T02:36:08Z","kode_ruang":"RGPLT7VIP","nama_ruang":"RUANG GRAND PAV LANTAI 7 KELAS VIP","kode_kelas":"VIP","kapasitas":3,"tersedia":2,"action":"post","status":"sukses","response_ms":981} +{"timestamp":"2026-05-18T02:36:09Z","kode_ruang":"RGPLT2VIP","nama_ruang":"RUANG GRAND PAV LANTAI 2 KELAS VIP","kode_kelas":"VIP","kapasitas":5,"tersedia":5,"action":"post","status":"sukses","response_ms":878} +{"action":"batch_sync","changed":53,"dry_run":false,"errors":null,"posted":53,"status":"sukses","timestamp":"2026-05-18T02:36:09Z","total_rooms":57} +{"action":"batch_sync","changed":1,"dry_run":true,"errors":null,"posted":1,"status":"sukses","timestamp":"2026-05-18T02:36:40Z","total_rooms":57} +{"action":"batch_sync","changed":9,"dry_run":true,"errors":null,"posted":9,"status":"sukses","timestamp":"2026-05-18T02:52:15Z","total_rooms":57} +{"action":"batch_sync","changed":2,"dry_run":true,"errors":null,"posted":2,"status":"sukses","timestamp":"2026-05-18T02:57:15Z","total_rooms":57} +{"action":"batch_sync","changed":4,"dry_run":true,"errors":null,"posted":4,"status":"sukses","timestamp":"2026-05-18T03:02:15Z","total_rooms":57} +{"action":"batch_sync","changed":4,"dry_run":true,"errors":null,"posted":4,"status":"sukses","timestamp":"2026-05-18T03:15:28Z","total_rooms":57}