{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:19:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-13 18:19:20"}
{"durationMs":42.29,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"6bd2b5be-bd40-461c-a116-018dcc9e19b7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:19:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":158.09,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"cbd60898-c834-470f-a124-a7a08145cc86","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":166.43,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"9a4dc9af-9352-4017-a562-5e1a76faa359","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":137.13,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"82f3e867-0706-4f71-9586-1942eee3dfe1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":157.04,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"5948c674-95e1-4660-9ec6-7d1a79ba1c63","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.33,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"61467abf-c989-459c-9230-831cfd3c7475","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":31.73,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"aecc47bd-00a5-44bd-a523-c46e8a4af27a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":50.43,"ip":"41.81.208.161","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"4fbed31f-4f70-4a2f-b24c-50f8c86e0794","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:19:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:20:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52fe7dd5-d384-46a5-a04d-d4b67499c2ef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:25:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6c121937-84da-445b-b275-9d6571663474","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 18:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:30:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fa851ffd-8143-420f-a53b-ec99fe0484bb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:31:00"}
{"data":{"from":"/dashboard","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:31:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:31:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"38e39f28-e095-49d4-b0df-9e8e12459749","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:40","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":35,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:31:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f98a2671-4a9a-41c9-a4e2-0ca31101a0de","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:51","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":70,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:31:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"96ec8c45-e6d2-4fe8-88c3-74f51e5b915f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:55","userId":null}
{"durationMs":977.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"f2a4d2de-89ea-4867-bd9a-ecb18cf8b796","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:55","userId":null}
{"durationMs":57.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"4cd8b76f-0e17-41f5-84ce-9490a5a11675","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":191.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"040892fb-2c2c-488d-9b96-1f72b5fe6637","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":185.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"3a35051b-5f84-4b96-bf01-ca3542ab94b3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":45.26,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"31deaf5d-9237-45c2-95b6-bc7a4d9bd53d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1464,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":543.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"83092c45-75d2-49b9-9c49-efd88f765259","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:31:57"}
{"durationMs":105.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"be513774-c645-47ae-a5df-252f1315bab6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":157.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"4c9b813e-bb80-413e-91e7-ba89a6e53a71","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":146.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"bafe46b7-9086-4261-bc17-9b2d9a821f39","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":115.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"8933da42-b719-4995-a188-fa4630369a2c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":110.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"f13a677e-5764-4d8f-b3d2-81c092b1c67e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":67.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"d9e7f10d-2b40-44e9-a7a5-05bec34ee511","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":65.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"04ebb6d3-2f65-4eba-8112-7818cdf0abbe","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":40.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"061987f3-4082-459c-8e26-6d0803389af2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"82e38585-04e3-423b-9552-45a076cf23e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":68.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"021f0b2c-d63f-44ba-8770-9891d593d6b5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":675,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":678,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":956.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04cb5062-3b6e-4d95-9b56-6afd57faf524","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":31.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"8b90c200-3784-4a2a-8658-38ae81dadf41","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:31:58"}
{"durationMs":22.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ed26a68d-30a0-4878-9864-a6cea4a8602c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:31:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1188.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1529.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1531.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":984.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":1001,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1237.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1238.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1582,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1583.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1668.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1948.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":27,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":487,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:31:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d45d0f71-9aae-43ae-93d3-e72e68c47810","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:31:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":22,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"48184f3a-0691-4653-baa7-27b38878cd8c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:32:00"}
{"data":{"id":null,"label":"Exit Portal","name":null,"type":null},"durationMs":41,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"22cf335f-3951-4bc8-9d9d-89d51ac904e2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:32:01"}
{"durationMs":32.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"4b1db867-9521-40f0-8d90-81a8acd3a804","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:32:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Exit Portal","name":null,"type":null},"durationMs":8,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1065.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0fa171dc-32bd-4871-82b5-5458b768e348","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:02","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":23,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:32:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fe6e4576-549e-48da-aba6-47d55b0e032b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:19","userId":null}
{"durationMs":655.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"838ce72d-2f19-4b25-bf91-73b8561743a3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:20","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":46,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 18:32:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"23eafca2-e38c-4947-b4c7-21c4f5719fe0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:20","userId":null}
{"durationMs":44.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"9196a02e-6cd0-4aa3-98ff-f70c07040100","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":67.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"9cedc0fc-62bb-49f8-a14a-7681e7c1759b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":45.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"ae5001b5-e01e-41bd-8ef2-36cb25710bc1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":48.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"de47c519-22bf-4370-a4c6-9d500736cbad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":44.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"039232ac-b5fd-4a4d-8669-f7644f0201bf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":47.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"3a1d4026-a76f-48fc-aba2-6ac2ffe6a85d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:32:23"}
{"durationMs":24.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f0788732-e8be-49c4-87bd-0fca0cd11e85","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:32:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1089.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":472.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"37617e21-4698-4a53-ab2f-cdb6b55ae49c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":45.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"8ea28e87-602c-40f6-a175-33a6de16c528","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":165.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"84c76c67-bdfc-416e-972c-777c5b9eeaad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"07356520-b272-414f-991a-1e325f9d1a4c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":59.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"b364899e-418d-4715-9405-dc4616193b5a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":37.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"2226b9bf-5d5a-4670-b740-58ee8dce7174","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":33.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"2f909a76-e866-4b7a-a5e4-ba24abb6e781","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:32:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"24364a1f-8d5f-4897-a928-a57c6d76ec78","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:32:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"a4099ea1-4216-404b-8fad-2529de5df071","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 18:32:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":479.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":896.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1398.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":1403.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1746,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1810,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":1980.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f173fa6f-c0b9-4836-baaf-90e09280655e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:32:26"}
{"durationMs":25.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2134d4b9-7e4d-489a-8674-bf86b6a67676","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:32:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":2544.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":2890.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":3588,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":3766,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":3976.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":4364.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":4727,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2400.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d241104a-41a7-4b6b-8c22-2ee77a1f83be","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 18:32:29"}
{"durationMs":19.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2eabb16f-c756-4c9a-8124-06d96e051992","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 18:32:29","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":426.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 18:32:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4b1c9ce2-cf39-4662-88ae-2de384bd3450","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 18:32:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:35:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6186dd2-e490-462a-ba4d-0b35dca3b1ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:40:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2104aa88-81f4-47e2-9c18-b2b071a7ce97","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:45:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6804f770-003d-48f8-a9f8-88ae5981de21","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:50:01"}
{"durationMs":7.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"58386caf-fd59-4f4b-8a1f-9f6b06d416f3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 18:55:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2b79abbe-724e-4346-832b-1f21ca6ab20d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 18:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 18:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 19:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:00:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"45d79892-baa3-4187-8bea-e7e67b942283","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:05:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3af17887-3dc0-418b-8a4a-5142b98d7dc8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:10:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3644d2ad-bce9-49aa-8695-bcac920bf7a1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:15:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"be51a26c-e3f4-4f6c-a474-264837384819","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:20:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0c0a9331-12a2-4159-840e-69a257a551e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:25:00","totalConnections":1}
{"durationMs":3.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"465a159a-8da6-48c3-a4cc-ddd04b3fed35","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 19:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:30:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"48b75344-7d8f-41f0-be41-0e9228f3967b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:35:00","totalConnections":1}
{"durationMs":1.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"24362860-2a3e-4af6-86a6-1efe716cf396","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:38:00"}
{"data":{"id":null,"label":"Sign Up","name":null,"type":"button"},"durationMs":653,"event":"UI_CLICK","ip":"41.90.192.2","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 19:38:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.33,"ip":"41.90.192.2","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c0146721-7d4f-461a-89cf-efb5b81a7d8d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 19:38:17","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:40:00","totalConnections":1}
{"durationMs":2.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"47fea3e7-0b13-47e4-8bc2-75630a42b0b3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:45:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1897be6-d46c-4b18-b563-c4497b04724d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:50:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fec225f0-a842-46b1-91ff-2a72d038efc2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 19:55:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dd15b51f-bada-479c-9de1-e9bcde557d00","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 19:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 19:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 20:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:00:00","totalConnections":1}
{"durationMs":3.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"21ac1cca-2018-4226-90e7-102167bb49a9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:05:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0a069d4e-0be5-4015-88ec-3590eb837ce0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:10:00","totalConnections":1}
{"durationMs":2.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"824cf329-fbc1-4f96-978f-f52f104b44a4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:15:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"146414e5-d477-494a-b98d-681ad28e07ff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:20:00","totalConnections":1}
{"durationMs":2.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9fd23005-1356-4b04-a2ab-70cac86d3681","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:25:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:25:01","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c638454a-0846-4eec-9801-9884001e60d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 20:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:30:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a5736a01-5723-4d60-8c65-2959e395fdb4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:35:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"71f5381d-fa0c-404a-b0d2-e54e4b921785","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:40:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"66186fd1-2039-4d8b-9530-00bfea08e9cc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:40:02","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":39,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 20:40:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.3,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a65ce9c8-10ca-4371-b3b8-583731ad7ef0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:15","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":76,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 20:40:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2ff9965d-be2f-47ac-87a0-b48f7c472a34","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:16","userId":null}
{"durationMs":1375.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"d79c625f-c308-437c-bbda-bf758fa89360","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:16","userId":null}
{"durationMs":46,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"1f738a2e-a0d7-4483-afb7-ad8b28b6e534","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:17","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":3212.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.4,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c21ccabe-ca21-4756-9c04-6f803dfab8cd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":58.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"b79bfd8c-724d-4723-b658-30e55ad3b6d9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":56.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"9698b9f0-782f-4091-bcd1-811ebb1ca154","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":102.08,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"6fe3867c-9fd4-48a8-8095-87e94b9b726d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":29.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"cbcfc093-d89f-4277-97d0-6137a12af140","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":43.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"867985fc-276a-4210-a02e-0f26fb66b653","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:40:22"}
{"durationMs":20.32,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c22e3ad9-bc11-487c-b14f-7f2543fe53e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:40:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":46.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"5b038e52-54c6-41fd-86c7-b5b01347a6b8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":56.37,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"8feb4c94-e141-42b4-a27d-28dde4dcae28","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":83.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"23beebff-31a2-4a2b-898e-54b4a1ccb20c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":43.86,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"d330faea-4fae-43bd-8342-456e41fd09fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":37.77,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"ad895563-2777-4a39-b998-318b1540aac2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"d6bafd7e-5492-4ea2-8c52-fe5f10749533","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 20:40:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":40.91,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"0ed287c5-c7e4-46a8-8025-7488ab887b0c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 20:40:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.54,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"882b7869-9184-4652-ba15-05966e5f4b8e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-13 20:40:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":967.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5c05e424-9f1b-4090-a442-a65d0b3aee62","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:40:26"}
{"durationMs":28.82,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"85f6678b-501f-4a06-805a-edd5e0fb352b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:40:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":1395.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":2157.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":3105.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":3551.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":4250.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":4527.9,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":4969.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":21,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":5404.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":5832.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":91,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":6584.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":6692.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":7153.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":7501.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":7897.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.47,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"646bbeaa-6b67-44aa-bcbf-a9681f3a27cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":3268.7,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"33ca839e-84ce-47ea-b3bc-c75b3a3e4625","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:40:30"}
{"durationMs":22.73,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"cd7dc621-3b74-4058-b7a4-87912887fce6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:40:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1129.8,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.53,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"90fc2df0-37e9-4b13-b0a5-7bdb43268dc5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Staff Portals","name":null,"type":null},"durationMs":30,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:40:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.81,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"facbb525-5f77-4e1f-a63b-9119dfff5fce","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:40:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:41:00"}
{"durationMs":69.52,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"e788b135-3a59-4dba-8a66-6521cc9ed8f0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:41:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":2493.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:41:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.04,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e2a811bd-074d-4d5c-98de-6e3b22294b24","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:41:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:41:33"}
{"durationMs":25.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"53f5b57b-f4d1-4642-9eb8-74e4bcbb9eb1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:41:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":3064.1,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:41:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.76,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db73452b-c355-4a80-8d82-e4cb41aa5917","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:41:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:41:36"}
{"durationMs":25.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"25760be1-9529-4766-b898-31327c355603","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:41:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1914,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:41:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.85,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c4a32e5e-df09-4cf5-ba9a-faa63526db35","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:41:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:41:39"}
{"durationMs":15.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1d12713c-4716-48e7-bdd6-833fedfe68c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:41:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1378.2,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:41:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.93,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c9375bda-8a35-434e-bf3a-7747525098fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:41:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:42:00"}
{"durationMs":68.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"49687764-81df-42e5-b07d-869c1b9daa4e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:42:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":3147.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:42:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4f6a9da4-144d-48ec-af82-7af5a3599427","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:42:32","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:42:41"}
{"durationMs":21.92,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5a33f503-f6ab-4e0c-ab26-2b486260a04c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:42:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1840.5,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:42:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.44,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d35e4e7a-d949-4c3e-a352-baa8dd8175e7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:42:42","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:42:44"}
{"durationMs":33.03,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"dc4babb2-06c5-4336-b9a5-53ab8b4068f8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:42:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2099.1,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:42:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.1,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"68326293-021d-45f5-811f-77aa642beaa2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:42:46","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:42:47"}
{"durationMs":30.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9fc4d814-5ea3-4977-9134-c6cbdbdbd944","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:42:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1096,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:42:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cad10a1f-6789-429c-92f1-c2337e88b4e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:42:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:43:00"}
{"durationMs":65.33,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"c9611d1b-39d6-4e10-ab38-860996de2395","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:43:32","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1443.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:43:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.95,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b8d9e66c-6f3a-4df2-b1b0-dee0b6c94255","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:43:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:43:53"}
{"durationMs":28.54,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"112d7c16-2d04-48bf-b6ec-8cb7128e1652","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:43:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":5552.8,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:43:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.28,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eb0caeba-f49a-4a98-b2ac-c80759961c05","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:43:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:44:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:44:01"}
{"durationMs":31.94,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"abce567f-6407-4f87-aa83-4f701623e281","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:44:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":7039.6,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.37,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"22898318-9fee-4ab4-81c4-e87d26db28f8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:03","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:44:05"}
{"durationMs":27.74,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b54f92da-e7d3-4f50-ae25-9be89e2d486b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:44:05","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2126.3,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.87,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"acdcf47a-4411-477a-9c1b-48fce9adfdc8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":20,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.49,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e431d14a-24a1-4b6f-a722-0992eb66a7a6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:09","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/library","navId":"1786643051626-131224","text":"Library"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.09,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fe3a298c-ddc2-47d6-a90c-350f1e1baa37","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":90.42,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/library/stats","requestId":"78053b58-e2df-470e-b37d-e934f99ddd92","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":41.47,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/library/settings","requestId":"2475a795-e032-409f-9a16-36a0100db00d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":93.57,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/library/my-loans","requestId":"9060978d-785a-4f4c-91e2-d0365bdbc78d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/library/new-arrivals?limit=10","requestId":"d67f2ebe-44c4-4886-9627-a80337cac01a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":80,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/library","navId":"1786643051626-131224","text":"Library","to":"/dashboard/library"},"durationMs":5657,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/library","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786643051626-131224","to":"/dashboard/library"},"durationMs":5657,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/library","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786643051626-131224","to":"/dashboard/library"},"durationMs":5710,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/library","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.23,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e7b6cdd8-aba5-4e1e-8ffe-fac2b60123ff","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/library/stats"},"durationMs":2143.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/library/settings"},"durationMs":3350.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/library/my-loans"},"durationMs":4331.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/library/new-arrivals?limit=10"},"durationMs":4632.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:44:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.12,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c874b763-59bf-414b-ab0b-98631374c73f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:44:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:45:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"350f3eb8-7281-48eb-956d-268142f9a7be","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:45:02","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:45:07"}
{"durationMs":43.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"17c54b77-1ed9-4c13-a501-5904372d2843","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:45:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1817.1,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:45:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.23,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"36a98059-bd63-4789-a73f-4e761d8931ad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:45:09","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:45:11"}
{"durationMs":31.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1b409825-5ac3-4420-84a9-a42232963476","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:45:11","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":3548.4,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:45:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1c7c9217-a085-4aa1-9f39-084c366f6662","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:45:14","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:45:16"}
{"durationMs":32.25,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e5e5e7b4-68d0-450b-a25e-31c091d51029","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:45:16","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2958,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:45:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cc81e9cb-f1d4-4a22-8a6e-1ccb09280928","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:45:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:46:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:46:17"}
{"durationMs":36.06,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5a4140b6-c090-43c1-8fae-cfc5247d1f95","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:46:17","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1300.9,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:46:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.76,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fe7cb5ae-d6c4-4968-a5c0-9bca82a20bc8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:46:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:46:20"}
{"durationMs":20.07,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"36fb4631-80aa-45b4-b910-ca60375b22e2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:46:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1799.4,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:46:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.72,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"41a82882-d749-428d-a35d-232545174ba6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:46:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:46:24"}
{"durationMs":26.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9fc0d480-febf-4b26-b1a2-63a6d14f637d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:46:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1625.4,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:46:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.69,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c9456338-80cc-4537-896e-3ad793307b9c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:46:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:47:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:47:29"}
{"durationMs":23.55,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f92b883b-f15c-4cfe-8c22-e1176f0efb4b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:47:29","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":4984.5,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:47:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":28.09,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"28af9e43-982f-4c6e-bf8e-74274045dcd0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:47:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:47:32"}
{"durationMs":21.53,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f98e03d2-b48e-451b-bd8c-70d189607656","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:47:32","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2608.2,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:47:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.72,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1a0fedcb-7db6-473d-9e4f-2d2476d036b3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:47:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:47:35"}
{"durationMs":28.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"cb8f904b-5aff-4599-9716-c037e187f450","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:47:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1033.6,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:47:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c2de2961-5405-4b5d-9314-07607e6460e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:47:38","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:48:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:48:37"}
{"durationMs":59.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"434032df-c549-42db-9f24-dfcb25b0b579","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:48:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1367.5,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:48:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":28.16,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9a6832eb-8192-4020-9b41-86c82bdfd813","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:48:38","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:48:39"}
{"durationMs":26.72,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d4bc34a8-418d-4bfd-b9b0-5236addf9a2d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:48:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1133.8,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:48:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.4,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4e4a1aba-124c-41e5-a45e-87e9cec187d1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:48:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 20:48:42"}
{"durationMs":25.69,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"48b21d20-8d89-4f64-a5ef-8e4aba59de66","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 20:48:42","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1353.5,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 20:48:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.59,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4ca64049-60bd-4ee9-8277-8e4d57957e21","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 20:48:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:50:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e38c5f40-9a4c-429f-a3ec-09f26b095938","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 20:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 20:55:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2c9e697a-8ea3-4fd7-88ce-b3ebbaa76337","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 20:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 20:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 21:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:00:00","totalConnections":1}
{"durationMs":1.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"28961bcd-ac6e-45c9-9cd2-8ee6ab82678c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:05:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed210b5f-3f38-414d-97f4-3d409be3782c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:07:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":30,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 21:07:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.82,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"56c333c7-b8d4-4815-b41e-3c49f1d28c6e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:19","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":48,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-13 21:07:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.4,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fa97a7ab-9edb-42e3-88f2-200c5e0f27c0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:25","userId":null}
{"durationMs":809.98,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"e2d16d72-55f2-4787-9531-b6e570b587df","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:25","userId":null}
{"durationMs":43.22,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"7ea3a19d-2c91-479c-a274-98f58f29d4ce","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":146.03,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"ecc62a9e-b864-4069-9ec0-df2765d0f42f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":126.59,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"99b5a5a7-f299-471c-8f02-bcd6a6706fa3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":36.05,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"ce2824ac-56ad-4198-bb4c-f7f15d9ab802","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":38.29,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"bce744b9-eec8-4d99-8f5c-11c416a80fee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":38.34,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"a62d4082-3040-4b79-961d-f26f51c895d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1238.6,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":495.8,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.42,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aa9e1fea-0fb6-4852-aa16-26d7d189b635","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:07:27"}
{"durationMs":18.63,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"0479aa21-beb1-49da-9109-42fa78aa4792","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:07:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":562.8,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":639.7,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":805.3,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":898.5,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1095.5,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.38,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aa17e05e-102e-427c-96cf-e624a68a6f10","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":48.84,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"e122cfd4-1ce4-4e08-81c4-de17134aa39c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":43.77,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"47432ab1-67f3-46d2-bc5e-c90a0d6bccc5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":55.14,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"aabeddc0-f5a7-4ca5-b618-873c1cfd83d5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":52.56,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"59759415-2971-42f4-9f86-8ca0fcea3c45","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":36.02,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"8dc2692f-df21-4f59-8283-7153688c027a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.18,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"3745aee4-92e2-42b4-a661-2a47a6b5ea03","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.74,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"abda0ddd-40a9-408b-b985-787ba7837f7f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.11,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"7e83f343-62cd-4156-a19b-393b8485728b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":7376,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":644.5,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":652.9,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.13,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b1975621-88a0-462b-8088-9ffbf8a1cbac","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:07:36"}
{"durationMs":23.45,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"382b3449-f6f2-4586-953f-91b9ba36f164","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:07:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":944.8,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1083.7,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1190,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1292.3,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1425.7,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1564.1,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.86,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f68357f9-c761-4649-903a-c441c3a666ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1051.1,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.66,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5fd7e4a7-7e00-4df8-b0f3-86ffac63e376","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:07:39"}
{"durationMs":26.28,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"4a355ea0-b326-40a3-b8fa-5ff49702c685","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:07:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":564,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:07:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":11.76,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e62d2fc6-ca47-4953-99bb-911dd8c4f982","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:07:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:08:00"}
{"durationMs":72.71,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"d0ca67fb-683f-4608-8bb0-eb8aa0779784","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:08:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":2031,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:08:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.96,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d4bb7e6b-187d-4a14-be35-51ce3db18c7b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:08:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:08:40"}
{"durationMs":30.14,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3f6f17f9-ad5a-4770-bf43-638c3adf6bef","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:08:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1083,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:08:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.76,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"58ae432a-f088-439d-9931-f1b3f3e9c890","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:08:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:08:41"}
{"durationMs":22.01,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"41bf745b-dede-47ec-8f0c-84151869942f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:08:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":609.9,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:08:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.56,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"88387818-8054-4ded-b156-05d87de0a421","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:08:43","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:08:44"}
{"durationMs":22.77,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ac5c115c-bab5-4354-a0d1-934a8c589493","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:08:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":673.8,"event":"API_ERROR","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:08:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.36,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c95a2626-ec54-490a-bd38-87abcefef6f4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:08:45","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:09:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":69,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.17,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04c6f9e5-5216-4acb-8671-ec13729b67fd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/attendance","navId":"1786644545378-116247","text":"Attendance"},"durationMs":null,"event":"NAV_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.36,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"278e4122-a142-4598-9dbc-e12ee268c8ee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:12","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":59.04,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"65dd511a-cccb-4b22-90e7-355fe9fcb79d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:16","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":34.86,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"dc1909f8-a567-426d-9a70-3c675cde4cdf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:17","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/attendance","navId":"1786644545378-116247","text":"Attendance","to":"/dashboard/attendance"},"durationMs":3089,"event":"NAV_PATH_CHANGE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786644545378-116247","to":"/dashboard/attendance"},"durationMs":3089,"event":"NAV_STALL","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786644545378-116247","to":"/dashboard/attendance"},"durationMs":3136,"event":"NAV_RENDER","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.65,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"79215cf9-77e0-433a-800b-517c4c9f2b3b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":53,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":5527.9,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":6683.3,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/timetable","navId":"1786644555377-106501","text":"Timetable"},"durationMs":null,"event":"NAV_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Select class","name":null,"type":"button"},"durationMs":112,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.9,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"54975130-b8fe-4646-8d37-4fe49485c667","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.59,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams?gradeLevelId=cmp8gtpn400dc8bcnf8rxynpl","requestId":"160217de-3a2e-447c-8a72-bf2f79a512c1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":217.87,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?classId=cmp8gtpn400dc8bcnf8rxynpl&limit=100","requestId":"e3c252d6-8847-4e11-8a53-1ffbd8551e02","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":45.24,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"090d5380-da13-44e3-ac76-a0d4593806fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:45","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":281.52,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff?role=TEACHER&limit=100","requestId":"90369a00-de42-49a1-920a-6e88b0046124","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":315.37,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/rooms","requestId":"a58cf2de-9613-4cf8-996a-32e801503d4d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":32.49,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams?gradeLevelId=cmp8gtpnl00dg8bcnt1kx3mrd","requestId":"1211e873-56bf-4f47-8b40-17b39c7bb449","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Select stream","name":null,"type":"button"},"durationMs":56,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/attendance","href":"/dashboard/timetable","navId":"1786644555377-106501","text":"Timetable","to":"/dashboard/timetable"},"durationMs":7809,"event":"NAV_PATH_CHANGE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/attendance","navId":"1786644555377-106501","to":"/dashboard/timetable"},"durationMs":7809,"event":"NAV_STALL","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/attendance","navId":"1786644555377-106501","to":"/dashboard/timetable"},"durationMs":7867,"event":"NAV_RENDER","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Select class","name":null,"type":"button"},"durationMs":74,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:09:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.38,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7ca8d81a-9b23-4853-8d15-7beff2f9e3c8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:09:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:10:00","totalConnections":1}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-13 21:10:01"}
{"durationMs":24.7,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"cb656e6c-84c7-41b9-a065-75b1b0b612ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-13 21:10:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":5.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"537f9d27-4f73-4533-9510-304f4f4b86c1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:10:02","userId":null}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":14763.3,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":17291.9,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":51,"event":"UI_CLICK","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":19709.3,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/staff"},"durationMs":23933.2,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/rooms"},"durationMs":25390,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":24400.7,"event":"API_RESPONSE","ip":"154.159.237.238","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-13 21:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":34.73,"ip":"154.159.237.238","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"168bd3a3-a0ed-4f69-97a6-205609685a16","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-13 21:10:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:15:00","totalConnections":1}
{"durationMs":1.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3d6f6765-15c8-461d-ae5b-c9421bccb583","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:20:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"20ce3753-0413-48d2-9e18-ecbae710d6cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:25:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0749058-bbdb-4681-a8a5-78ce5bc8c87c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 21:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:30:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"869a1505-b669-4c84-975a-bdad6e032192","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:35:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"38345a87-64b6-41e3-a0cc-2a89eee28fb2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:40:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0cbd308-13d8-4e93-8d9a-46e2d2ec375a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:45:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"72e96454-758c-4381-b12a-f8b17f296efd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:50:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7c3b7e27-3604-47af-9e3b-8a2a6ab6e949","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 21:55:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c13aed6-d22d-459f-8ea5-0e17976536ff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 21:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 21:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 22:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:00:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c91e4ddb-b1f4-482c-b5eb-107b9d07ab2a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:05:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9fac8fbd-b088-442a-b7aa-1c33e7846bc3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:10:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a12a48e-a1c6-4650-9121-002c6bee8c32","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:15:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"808a5fea-2a8b-4e08-a51f-3e6d95666a41","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:20:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4e7d4b1-74a0-4aea-8587-0885c3e4e7ad","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:25:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a4c89027-538b-4065-9c94-5abffeddc9b1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 22:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:30:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4ee33f51-017e-4b6e-85ea-7f8119941d82","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:35:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7fa3fad5-fcc3-411e-942f-8b757cd5a7f5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:40:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52a7d2a8-f66c-434d-8371-720ab2b28427","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:45:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b3925ce-8838-4630-9089-446d2f703ad5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:50:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"81d4012e-12fd-4e87-92ce-0afbc1133b06","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 22:55:00","totalConnections":1}
{"durationMs":2.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fc28aace-f84d-4dad-8181-2df86a9ea461","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 22:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 22:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 23:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:00:00","totalConnections":1}
{"durationMs":2.22,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bccb7626-e4da-401b-a1a0-753e21f3c56f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:05:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c1efc91-cdfa-4bb1-a92f-bacad6c3986a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:10:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62cb7802-8d90-4e7d-b479-f010b5bebe98","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:15:00","totalConnections":1}
{"durationMs":2.2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f7fd79ce-1f64-4e99-b910-ba2655fd85f1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:20:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"120da296-50cc-4ed8-969b-1ac6442c2af2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:25:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5265f5ec-7d24-41ca-aba7-e029d9383010","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-13 23:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-13 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:30:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eadb965f-107f-4494-a3c0-b4457f806e89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:35:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01191e55-4d8d-4d71-91d7-03123d834697","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:40:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"64b32d5a-eba3-4ab9-9947-3be9990e2632","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:45:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"abc1b2bb-65f1-433c-8f43-bb563e24e9f9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:50:00","totalConnections":1}
{"durationMs":2.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab4a6ad2-0ac9-44ca-96ea-c1d4271a272c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-13 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-13 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-13 23:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-13 23:55:00","totalConnections":1}
{"durationMs":2.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0e5dda06-ab29-4314-9269-8bb58c043a74","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-13 23:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-13 23:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 00:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 00:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:00:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"03b1061a-d24b-45be-b6f2-f379ead8fd62","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:05:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"554e5d4b-cf9b-4ead-8d1a-cf24666bc9d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:10:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ebf0974b-81ab-4d35-99ee-f607fe6a9eea","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:15:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce96e7ef-3d7f-417a-acd2-ae3d736740c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:20:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b87e468-1bf3-4b26-b04d-00596cf2271f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:25:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"379c90a5-ebca-4714-a552-60c1c012918e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 00:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:30:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0039ea4c-3e98-443b-a0e2-4b2d548d15d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:35:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"86890a3b-0f10-435d-a90d-0665872f90ae","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:40:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b26d1a61-c291-448d-ab9c-12d8ec79d8c5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:45:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"edcde175-fad6-4957-a147-8ae0d256d8e2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:50:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"189923ef-d993-4510-a242-35e3e3c4f530","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 00:55:00","totalConnections":1}
{"durationMs":2.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"988e7b5d-6e15-4293-9c7b-9a8e72d6c786","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 00:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 00:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 01:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:00:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:00:01","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c80a7501-9664-48cb-9c00-035f1f737123","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:05:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0bac4a4-9201-49dd-b621-b339a0be2672","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:10:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fc99960e-c771-4711-a37c-fedc808297cd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:15:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4400d217-2b88-4abf-81dd-ff9ffd97c508","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:20:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"967c3431-b9bc-43bc-bae2-3177d9370bc8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:25:00","totalConnections":1}
{"durationMs":2.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"196cdb6e-b632-4d75-916d-91a9f73c2a69","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 01:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:30:00","totalConnections":1}
{"durationMs":2.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4dc8d6a1-1f96-42b2-919c-583468d7a509","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:35:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2ff4fbf8-ff06-4685-ab0b-1af29deee66f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:40:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"020d369e-da6b-4e5d-aca3-c4672906c793","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:45:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2482de0f-077f-4ed0-81bb-5bab9c273b86","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:50:00","totalConnections":1}
{"durationMs":2.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2866134a-bc36-41c9-9f89-0875f3e7a6f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 01:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 01:55:00","totalConnections":1}
{"durationMs":2.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"02fb8f1c-8923-43fd-bdc5-6eb1e4824c1a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 01:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 01:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 02:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:00:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a9ac6755-8831-4cae-a155-93299bfea630","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:05:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"378d66ae-1e8d-4f38-8267-e31f28bbeacf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:10:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"95eff293-a593-402f-bc8f-330ff3bb2b99","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:15:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b87724a4-7071-4840-90b5-86c2937e8362","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:20:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a62e4798-c79a-4a82-be6c-aa320afccc47","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:25:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6fb41f5d-9859-4b62-bb58-988e12c8eeb9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 02:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:30:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"340d8fce-35db-4adb-a458-b69c10e86f11","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:34:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:35:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"569e7241-d8bc-4d84-9374-7bcb2d4f907e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:40:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e4de6a6b-f756-4821-9912-dc0aa60885ee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:45:00","totalConnections":1}
{"durationMs":2.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ae6ddf85-a63c-4f18-b44f-a8c27c001ddc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:50:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"df9a5484-80ab-494e-b5e6-ac30728dc070","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 02:55:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e76cb443-2580-4774-af29-7fd1608175a0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 02:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 02:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 03:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 03:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:00:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a054eea9-e3aa-411a-a203-da1c918acda8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:05:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1d8bd23a-8c36-42f8-8637-8ce319d4bb63","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:10:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"722a45bb-702c-43ff-8cb4-85a2604a0a0f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:15:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"96012afc-d131-4807-a3f2-49126d20db7a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:20:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e84ebec2-551f-4ffc-b2bf-c5fc16d23500","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:25:00","totalConnections":1}
{"durationMs":1.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e792fb6-5f81-4471-a338-f67f4c4f5a86","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 03:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:30:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8a4f4f61-1fa9-495e-83cb-1462efb1a4eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:35:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e79ecc7-67e8-4eff-90ae-a1d2941ca96b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:40:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3339a82b-e0ef-4503-b34a-ddfa20eca318","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:45:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0e57d6ef-cea0-4340-aae3-510133488fd1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:50:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"327868b8-234a-4530-891c-64b535b8c282","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 03:55:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3be3699e-a6a5-458b-8650-bd47a9577377","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 03:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 03:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 04:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:00:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15e9869d-3b72-4b01-b152-9ee49b4acde8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:05:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"690babae-d654-48f2-a5b8-6ec3ac5eb42b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:10:00","totalConnections":1}
{"durationMs":3.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce7b5332-5bfe-4809-b235-859dbb540a4b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:15:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"566f4d6a-b310-469a-b813-db2889811188","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:20:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17a502f5-06da-425d-b8a7-577d46ad8a38","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:25:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b7d38707-617a-4516-a25c-c0a93f2b9467","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:26:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 04:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 04:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:30:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d30a2e29-f5b8-4ee1-adf3-c4836184f120","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:35:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37e039f8-dba5-4693-a090-cbf670bf36c4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:40:00","totalConnections":1}
{"durationMs":2.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"534024c6-584b-421c-bb6b-471a7f3bae82","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:45:00","totalConnections":1}
{"durationMs":2.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c92bb5d5-4cbd-4dca-a405-5f5af2231a91","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:50:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7a930fa5-ef86-4a3a-9c7f-ccf8b3333693","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 04:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 04:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 04:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 04:55:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"81eab4cd-cbdb-40e2-a2c5-548e40aa0b69","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 04:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 04:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 05:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 05:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:00:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4d8f1bdd-dda9-42d2-8fde-1cdc97c88a41","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:05:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3ed3ff0f-8eb1-4703-81d2-dd0a772751c4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:10:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7755a10c-7dbb-433d-919e-80f6a046b30d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:15:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3eff5613-f166-4145-a8f8-938b147e8393","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:20:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"587ab013-b36a-4c77-a6e0-f25bb601de3b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:25:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a5e22193-fbb8-4155-bdc0-a9cf5aec52c0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 05:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 05:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:30:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fde0ce7f-f65a-4b2a-8604-4a9c1b9ed2d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:35:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:35:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:35:01","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13c28cd1-968d-4dd4-9103-da659bd818bc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:40:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"877ab773-fc57-4e38-a613-a274acadb77c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:45:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f8ec10de-ff57-4a78-a781-c19759df68d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:50:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3366fbbb-98bf-4a86-9867-6eee8c4af9d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 05:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 05:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 05:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 05:55:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab0b77b4-a6a8-47ac-9451-86b0c2b4879c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 05:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 05:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 06:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 06:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:00:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c4c615fb-0f9f-49a0-ad16-31850535a6e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:05:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"583015c2-d856-470b-a3bb-f410786ad621","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:10:00","totalConnections":1}
{"durationMs":2.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad89fc54-b64f-4a23-85ee-6395811f1b7a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:15:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5bff917f-fc86-48d0-9757-aba6409ac83c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:20:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0f96012-269e-4914-a8f1-f3cdf0f7ec87","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:25:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"92df6fec-796d-44d3-854a-9e81279a8eff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 06:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 06:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:30:00","totalConnections":1}
{"durationMs":2.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9447739c-52ca-414d-9249-0b6df409b9d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:35:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8b2ee29c-9e98-444c-8318-e7b055da8986","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:40:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6631d5a3-595a-4465-9863-f346f14cb261","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:45:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1b5a835-5102-4a6a-8da8-77e789cfad88","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:50:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01f96328-a38f-4a4b-a885-0ff3423ef474","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 06:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 06:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 06:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 06:55:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"92f4c2a3-e374-41d2-ae91-598e02b65376","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 06:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 06:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 07:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 07:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:00:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3c8ee57d-21c0-4b42-a181-068835d32df9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:05:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6ee7acd0-86e2-42a7-b55f-2474e839318d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:10:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ac663b42-bc76-4ac9-8135-e6acc09c5463","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:15:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83b24191-94e0-4d40-b5e3-68a2e0f06fe7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:20:00","totalConnections":1}
{"durationMs":3.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c504c5c-368f-4508-843c-79d519877079","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:25:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f3e97e4d-813e-41f2-8b59-40da85686c4a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 07:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 07:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:30:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"20098cf3-2a88-4561-91f2-f0af1e95e07e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:30:04","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:35:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ccf95ed1-d615-4c62-a9bf-fa9143207e0c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:40:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ac7158e0-bc3c-414b-8e55-896a2d257a82","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:45:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:45:01","totalConnections":1}
{"durationMs":2.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce6d3fb8-e0c2-4f88-b949-fe00c9f5cfb8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:50:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"126b5441-342e-4b30-863f-e4159926887e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 07:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 07:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 07:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 07:55:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6b0f089-bd34-4a7b-a2e0-6c143fa60341","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 07:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 07:59:00"}
{"level":"info","message":"[CRON] Library overdue check started","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"error","message":"[CRON] Library overdue check failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/library-overdue.job.js:14:56)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:00:00","totalConnections":1}
{"durationMs":2.22,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"acc5c3f4-23c8-4b0f-955d-27ac7508b758","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:05:00","totalConnections":1}
{"durationMs":2.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad1aaaf4-184c-4765-83a0-a6a70a2b2cc5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:10:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5610f61b-affa-47b1-a409-f198fe191ef0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:15:00","totalConnections":1}
{"durationMs":3.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"44740b2d-a748-46ba-a0c1-b7c3aeb052f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:20:00","totalConnections":1}
{"durationMs":3.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fe9aac9c-aa9d-4e17-ae54-3fcb1ba44d55","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:25:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65262197-49a7-49e4-9f93-b5a81ece5022","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 08:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 08:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:30:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d93b8341-2363-4e75-af32-4b5700acaf2a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:35:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fc953937-d6c9-4f71-adf6-029027623659","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:40:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"22bbf8b7-3dde-457c-961a-8639023576b5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:45:00","totalConnections":1}
{"durationMs":3.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"53583cba-5b47-423f-9e36-6070848d4040","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:50:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d4234bb7-1f0c-41df-b6f3-fb69fb9e2727","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 08:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 08:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 08:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 08:55:00","totalConnections":1}
{"durationMs":2.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5ee8f82a-934f-4b7c-9cfa-c4eab93ffdf8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 08:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 08:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 09:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 09:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:00:00","totalConnections":1}
{"durationMs":3.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fbb6b1f9-9d6a-49a3-8781-46cb6d194214","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:05:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6c88a491-6140-40c1-8b01-92eeeb9edfcd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:10:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"026930c4-2200-4550-a98e-964819a74550","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:12:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:15:00","totalConnections":1}
{"durationMs":2.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7f64070-a821-4ce2-bf53-3faa6f738c0e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:20:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e8ee1d9-2113-4e42-b5fe-6c850e5ec437","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:25:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"914fd60f-ead1-427b-852c-08cf04666fe6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:29:00"}
{"level":"info","message":"[CRON] Attendance alert started","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"error","message":"[CRON] Attendance alert failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/attendance-alert.job.js:19:53)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:30:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f31cdc18-d648-48c4-8433-fbdfa64c24b0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:35:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"48d43c16-8908-4792-b2b3-9a7acefc0a25","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:40:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6378e81-c312-4d6a-a73c-6adc56c669e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:45:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"53ab7dfb-6034-4aec-927a-7d4ba02ffde9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:50:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd80b81b-bb95-446b-a294-af8e673b16cc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 09:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 09:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 09:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 09:55:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b6eb5bd5-202d-4b9b-ab27-4c26f0c6264e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 09:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 09:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 10:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 10:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:00:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a12a867f-7e97-4ca9-88f8-e40ff8443468","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:05:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e5c0257a-7958-43a3-91b3-f979043acfef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:10:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"08f4a011-8970-43e8-9231-708f39355507","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:15:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0e0ad9e9-1797-4560-8502-2a07b26fa3f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:20:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e85ea346-1480-456a-ab99-eaccd0405255","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:25:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b877bd4b-9701-49ed-a559-5b9a2363a98e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 10:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 10:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:30:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76bd130f-05bc-4358-8ea9-d5577e52ed11","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:35:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fcb90ef8-92e3-4aef-b943-a5983a840903","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:40:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"088f4ef5-17cf-41c6-a66f-8048e0249242","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:41:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:45:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"563c8f57-5ec5-499b-a8ee-33fc873baee2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:50:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8e380aa3-b617-4027-9338-acccc3a98171","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 10:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 10:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 10:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 10:55:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2f2a8986-2b4c-47ec-acc7-63387a1715fc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 10:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 10:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 11:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 11:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:00:00","totalConnections":1}
{"durationMs":1.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"63d285ac-f26b-40f6-85d8-a770a44a1a08","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:05:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1abf1bf0-ee7a-4df8-9c16-a9205d84c486","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:10:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49c09eeb-cf57-4d7a-820f-4ec5874ec542","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:15:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e69ff20c-05b3-4df1-bf45-3e57edec46db","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:20:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76f25afc-3a82-46c2-a767-11506d55e177","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:25:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"89ce4d16-00ae-4958-8a2d-7bd9e6c4d236","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 11:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 11:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:30:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"470d4d58-dd85-4e7b-a6c6-cc83daf34aa6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:35:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e6d2ade9-3f50-4a8b-a481-921d4254be00","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:40:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"924ebe38-6a43-45a7-be55-0f8aff0e573f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:45:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"12066e80-158d-4382-851e-b82697a50cad","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:50:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a0f6eafb-1b63-4360-80b9-0c1c91d8da65","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 11:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 11:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 11:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 11:55:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78526461-2792-4a0d-adfc-dc793f145b8f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 11:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 11:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 12:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 12:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:00:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fd453fb5-7b24-4f23-aaa3-b883760f799a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:05:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"da614531-9443-49df-9e36-92e9d93439e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:10:00","totalConnections":1}
{"durationMs":1.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9f0bd7d4-743f-479e-bf76-bb134e1deb34","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:15:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5274de35-2fdd-4db6-b566-d0190c096267","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:20:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d979e9ab-5985-4def-8717-ab3d4a813abc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:25:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"09fdad34-5a49-4976-9e11-b29ee71f98fe","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 12:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 12:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:30:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76af325f-5cde-4cba-8345-28541d09dddb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:35:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e3d096eb-c1ac-4179-8237-fa432650b31e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:40:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c0af703-4ec7-4006-8e66-9d5d278be586","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:45:00","totalConnections":1}
{"durationMs":3.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"de03eba3-d6dd-4a88-b9d2-f9f56062b581","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:50:00","totalConnections":1}
{"durationMs":2.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f15557de-1beb-440a-a7fc-8ffe86295972","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 12:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 12:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 12:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 12:55:00","totalConnections":1}
{"durationMs":2.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c79571a-52ad-4390-898c-6c0a7d0c1a44","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 12:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 12:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 13:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 13:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:00:00","totalConnections":1}
{"durationMs":2.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab7a625e-c305-4801-a4c8-7fdabf84151b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:05:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a11dfdd8-2da6-4ded-a8a2-223abf5bf5e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:10:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"676d8bf6-2947-465b-8281-1df75f78a469","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:15:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"231af4c0-8e24-447a-a84e-f4862bd4f4ec","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:20:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ccaa2c09-f1ff-491c-a1ef-2edaf46093ec","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:25:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f13d0170-2f54-47b6-a61e-a75c63783acd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 13:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 13:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:30:00","totalConnections":1}
{"durationMs":2.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d1b513b6-7d61-4f71-8663-835d810ebc5e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:35:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"df10cba6-93c1-4bc4-bb3c-5676be4967d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:40:00","totalConnections":1}
{"durationMs":3.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0288a52d-b458-4bb0-bf43-a3093a85cbdd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:45:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"70485907-ccbe-4f40-80d9-82cb56513cbd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:50:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2a56a01f-d803-44bc-95a2-54a763910b46","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 13:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 13:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 13:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 13:55:00","totalConnections":1}
{"durationMs":2.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"401fed28-6682-4873-bbce-540aa091a4ae","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 13:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 13:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 14:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 14:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:00:00","totalConnections":1}
{"durationMs":2.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2495a685-5426-442b-8c67-bf5f97ee8864","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:05:00","totalConnections":1}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:05:00"}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"63590f52-9aa7-41ef-8f51-3052b74e1361","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:10:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c9257cdf-339b-4fff-8a6a-7e9f25bec029","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:15:00","totalConnections":1}
{"durationMs":2.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b1b02ba1-686a-4653-8db3-7a3ebaaa7b6c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:20:00","totalConnections":1}
{"durationMs":2.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"439db006-0c90-4823-ba82-2b844592dd03","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:25:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"97619da5-4e83-44b5-b55b-0f97791b2367","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 14:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 14:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:30:00","totalConnections":1}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:30:01"}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"176853b8-2410-4d15-9463-402073892abd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:35:00","totalConnections":1}
{"durationMs":2.2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1f4b5a17-b1c1-4cb8-92f3-0e7c777af1ed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:40:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8bd5fc66-a5ee-4eb5-9df8-a64bf4be597a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:45:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23d764fc-0d6b-4c6d-beb8-a4e1471b7f63","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:50:00","totalConnections":1}
{"durationMs":2.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37433191-af00-487c-af7c-6177932a81bf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 14:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 14:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 14:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 14:55:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed0a343e-1bca-4f20-bca6-ca9c5d13712e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 14:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 14:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 15:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 15:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:00:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3ea88ba3-013f-40a4-8586-6bd49eaa9829","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:05:00","totalConnections":1}
{"durationMs":2.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1b6ad713-d18c-4a02-ba8f-6dc873aa9152","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:10:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"07177290-e7c0-4eb8-bac4-b324396c8ae8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:15:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49bc7d44-11f9-4f53-960d-d6da9a1b97cf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:20:00","totalConnections":1}
{"durationMs":3.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1c7bcf66-e360-4f41-8f42-eea9e6a70fef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:25:00","totalConnections":1}
{"durationMs":3.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d18d9b6e-10c9-4b3a-8c7e-8237d7cda343","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 15:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 15:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:30:00","totalConnections":1}
{"durationMs":4.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"50f598d3-8ec0-428a-87c8-6de1adf88dfa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:35:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"28397142-92a8-4dcd-8458-918e9bcf211c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:40:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cfaa6b64-f6ee-4ce6-85a4-c69c59acbab4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:45:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8e082c1e-5cf5-426a-bece-e46e40394cf9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:50:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e75e1ecd-dd31-497c-b6f5-e6e6326a170a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 15:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 15:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 15:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 15:55:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"12094357-8e4d-482f-9518-b98339ec64e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 15:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 15:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 16:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 16:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:00:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d72e9e41-1bc3-4745-aac0-8717a8689451","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:05:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:05:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:05:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:05:01","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c65d249-2a8e-4e77-8ec9-21ff46a0bfb8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:10:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"11ce3568-f291-4e3d-8193-b7b6b7540771","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:15:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bc4e746a-8c38-468f-883c-55c085ef3b16","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:20:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4d62fb68-52c8-45ed-9652-7d199327394c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:25:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bea9445f-f531-4038-a5b2-e8b8fd4f3fdd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 16:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 16:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:30:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:30:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:30:01","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"056037fe-8069-4234-b7b2-5b408c545344","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:35:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"561588ce-aee9-4736-bbfc-8cd5938805f3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:40:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d86a3845-4fb8-49f3-b317-b5b4e8423c58","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:45:00","totalConnections":1}
{"durationMs":2.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"af358352-82b7-4f80-bda7-f69f66964068","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:50:00","totalConnections":1}
{"durationMs":6.24,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"90df9fb5-c2e7-4cf3-89bf-590c9e3e6b5e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 16:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 16:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 16:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 16:55:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eca4852c-94df-4cbc-9669-a2979e1b8f77","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 16:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 16:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 17:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 17:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:00:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"df98cce4-ad2b-4086-9b08-86eb900493fa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:05:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52d8bbdc-d435-435c-9711-0116418979f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:10:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d574ffc9-0d2e-4042-a97c-12b936ff2d7a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:15:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd59b79c-d75b-4a79-9bda-ff342fe256aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:20:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b5b35ff-6cd4-4843-a09c-9ba8656006e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:25:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"514cd662-3c35-44bd-ae7b-0df77a247423","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 17:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 17:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:30:00","totalConnections":1}
{"durationMs":2.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c946db60-fafc-431a-b5d9-cf89bbc6c351","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:35:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5fc0aa9b-9431-41d6-b0d4-f80c7b5c21ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:40:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eb2f2528-5dea-4b8c-9378-4d61c98e68b7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:45:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"72a4b927-faee-42be-8237-c44e15a79fd6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:50:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ffb82160-5abe-47b8-9744-0198a7be7e4e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 17:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 17:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 17:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 17:55:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8101ccc7-4efc-4753-829c-556de18d2480","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 17:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 17:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 18:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 18:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:00:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"890c3abb-af52-46ef-8121-cd3daf096291","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:05:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"533e8c9a-331f-4a06-b9b2-8d5f83e4be4e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:10:00","totalConnections":1}
{"durationMs":3.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"38a0b128-9847-460a-b8e6-c4ee5734be41","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:15:00","totalConnections":1}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c73cc804-e2b1-4d8c-8806-2a687396030c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:20:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"122a133b-fc5b-4ffe-a216-8ca519e7ebc2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:25:00","totalConnections":1}
{"durationMs":2.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bfb556dd-3490-4640-8160-e3dc4089d8e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:28:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 18:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:30:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83715946-f3dc-40ef-9b8c-625d1bb4d22d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:35:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"70de3050-2017-40f2-a1c4-1c0959022c96","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:40:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"684d6b8b-164f-4bfc-858c-e2be6272b052","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:45:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"66be78a7-b8fd-4efe-82f0-5620071f444c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:50:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f005e93f-ec5a-4dc3-9155-38451d8e583b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 18:55:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d98aed06-d7b1-47c4-b684-1eff82063854","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 18:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 18:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 19:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:00:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d9d6eedc-9b9f-440e-8757-4009a2d4f525","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:05:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e2f414b9-d563-4e6c-bf75-0d0ec18e0d2d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:10:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8fa7ff20-5d74-40dd-b5ef-40ff0532b83e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:15:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"06ee7ce9-4243-4d43-8e9d-df1ffc35a8da","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:20:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"21cfaf6c-c74b-4b7f-9af6-1bdae4910920","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:25:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b83f0437-a795-4ec8-afc0-96e5884d3888","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 19:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:30:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"856e48e2-3025-42df-b929-1b40c40ea157","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:32:00"}
{"data":{"from":"/dashboard/library","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:32:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard/library","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:32:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4be70d94-410b-4ba8-8cd8-a5748141a635","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:32:48","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:33:00"}
{"data":{"id":null,"label":"Sheet Forms (Slide-in Panels)","name":null,"type":null},"durationMs":45,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:33:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5c2fa780-f7d9-49a5-836c-e7df456a2fcd","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:33:21","userId":null}
{"data":{"id":null,"label":"Sheet Forms (Slide-in Panels)","name":null,"type":null},"durationMs":51,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:33:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3b4320bf-5187-4447-886b-7db886e3d40e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:33:22","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:35:00","totalConnections":1}
{"durationMs":1.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76b47f13-e04d-41a6-9e5b-ea603d90e172","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:35:01","userId":null}
{"data":{"id":null,"label":"Sheet Forms (Slide-in Panels)","name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:35:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d5e61f1b-b01f-4e00-b4d3-6a950ba9c1ce","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:35:10","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:40:00","totalConnections":1}
{"durationMs":3.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"73449cff-4fce-4ea3-a79b-a368934a66c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:40:02","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":122,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:40:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fd4fae36-979e-4b1f-9410-76b903c9b0a0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:40:59","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:41:00"}
{"data":{"id":null,"label":"Delete Confirmation","name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b20bf832-a679-4a4e-bafa-c57102a0d01d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:04","userId":null}
{"data":{"id":null,"label":"Delete Confirmation","name":null,"type":null},"durationMs":33,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ee62bf2c-b014-40c6-af9c-a1fec3d82f4b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:07","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":111,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4683009d-d7f7-497a-a985-8de4487cddba","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:08","userId":null}
{"data":{"id":null,"label":"Academic Manager11","name":null,"type":null},"durationMs":119,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"25dd917b-bfd8-4fc5-b7e5-327e26b2e40e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:09","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":109,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7b5b0efd-2208-4826-a76c-c13051fb03d1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:12","userId":null}
{"data":{"id":null,"label":"KRA Compliance & eTIMS5","name":null,"type":null},"durationMs":124,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5e1fd4d1-0ce5-43b7-9e33-f6f82e958048","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:15","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":113,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"id":null,"label":"Integrations & Bank Gateway5","name":null,"type":null},"durationMs":104,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ea978ba3-c694-41e7-ab36-cd3cbcb629f4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:18","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":99,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ebdea5a5-db78-4d42-8083-f17e84832295","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:20","userId":null}
{"data":{"id":null,"label":"Students Manager7","name":null,"type":null},"durationMs":93,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"960fb051-1c6b-478d-8e47-2417ff037bca","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:21","userId":null}
{"data":{"id":null,"label":"Class List","name":null,"type":null},"durationMs":19,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.26,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ef20d10e-3091-4449-8e5d-17b7844b0d78","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:24","userId":null}
{"data":{"id":null,"label":"Class List","name":null,"type":null},"durationMs":25,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:41:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6873618a-5774-418c-b3d6-7690a84350c5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:41:25","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:44:00"}
{"data":{"id":null,"label":"Dashboard & Analytics6","name":null,"type":null},"durationMs":368,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:44:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.43,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fc3f3f8c-227d-49f3-bc36-5a18251dd133","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:44:23","userId":null}
{"data":{"id":null,"label":"Dashboard & Analytics6","name":null,"type":null},"durationMs":45,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:44:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.37,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f7c8d55e-77fe-44cd-918b-6b6d74e44a84","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:44:24","userId":null}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:45:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3f84bb2f-3a4a-47ee-93b1-3a5152a48ec3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:45:01","userId":null}
{"data":{"id":null,"label":"System Overview","name":null,"type":null},"durationMs":99,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:45:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42ba961e-e0ba-4782-90eb-5e5be44c96a7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:45:02","userId":null}
{"data":{"id":null,"label":"Finance Analytics","name":null,"type":null},"durationMs":114,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:45:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.55,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f80c0149-cc17-48e3-94d5-61fa6e645db4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:45:34","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:46:00"}
{"data":{"id":null,"label":"Academic Analytics","name":null,"type":null},"durationMs":156,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:46:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"47bdd3b3-aa0d-408b-928f-b2894f5b5544","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:46:27","userId":null}
{"data":{"id":null,"label":"Attendance Analytics","name":null,"type":null},"durationMs":112,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:46:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.68,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"46c2f894-e91c-48fc-a359-c37302372901","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:46:48","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:47:00"}
{"data":{"id":null,"label":"Automated Insights","name":null,"type":null},"durationMs":72,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:47:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4941610a-832a-40bf-8494-fcb7d27edc5a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:47:28","userId":null}
{"data":{"id":null,"label":"School Benchmarking","name":null,"type":null},"durationMs":93,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:47:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f166ee09-b8b1-4b6a-923a-d6dabe3b93ff","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:47:32","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:48:00"}
{"data":{"id":null,"label":"Green","name":null,"type":null},"durationMs":100,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:48:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ac8f7cff-07e6-4af9-8a99-0c7b468780d4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:48:07","userId":null}
{"data":{"id":null,"label":"Common Patterns6","name":null,"type":null},"durationMs":302,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:48:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.34,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"500d8784-ee26-44bd-af46-bd825ad9a823","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:48:22","userId":null}
{"data":{"id":null,"label":"Common Patterns6","name":null,"type":null},"durationMs":33,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:48:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.16,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"da97231d-ce90-445d-ad39-548000b3434a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:48:24","userId":null}
{"data":{"id":null,"label":"Senior Secondary & Pathways4","name":null,"type":null},"durationMs":257,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:48:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.34,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2c17ddba-a503-4cb2-9368-1090063acd5b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:48:27","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:50:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"733145d3-67ec-4704-bccb-d10eaec54097","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:51:00"}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":133,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:51:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"50b39ab7-2965-46dd-962a-9ee7e3e3710a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:51:25","userId":null}
{"data":{"id":null,"label":"Sign Up","name":null,"type":"button"},"durationMs":113,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:51:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e98814e1-55ef-4cf1-a089-1c57cff3de12","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:51:29","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:53:00"}
{"data":{"id":null,"label":"Create School Account","name":null,"type":"button"},"durationMs":51,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:53:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.33,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a62ba898-6cf5-4024-b01a-a35300601e79","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:53:33","userId":null}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/onboarding"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:53:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/login","navId":null,"to":"/onboarding"},"durationMs":null,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:53:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.34,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"07293c53-94c8-4870-8db2-24a8f4b660a2","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:53:34","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:54:00"}
{"data":{"id":null,"label":"Select your county","name":null,"type":"button"},"durationMs":650,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:54:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.69,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bbe2defb-13a6-4664-818c-dbdbca6c648f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:54:00","userId":null}
{"data":{"id":null,"label":"Select your county","name":null,"type":"button"},"durationMs":341,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:54:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b411aa98-6d8b-4f2a-8958-de59337427bb","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:54:03","userId":null}
{"data":{"id":null,"label":"Continue","name":null,"type":"submit"},"durationMs":220,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:54:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"81ddf3ef-c8b4-48ba-86ad-ba37e45d525e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:54:39","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 19:55:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ffb6a9b6-a3c6-4059-bdc4-468ff41b4bef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:55:02","userId":null}
{"data":{"id":null,"label":"Create Account","name":null,"type":"submit"},"durationMs":126,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:55:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"334f89fd-f440-4189-8c04-fb2d41a70240","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:55:56","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":38,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.27,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7f934a21-a1d3-4237-ab0a-6c3bb08e8027","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:00","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:56:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":29,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.3,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"157e8512-38d4-44ae-ab62-0fd4f4e93d0b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:27","userId":null}
{"data":{"id":null,"label":"Create Account","name":null,"type":"submit"},"durationMs":55,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e5efaf74-560b-4cba-801d-142e5a192f08","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:32","userId":null}
{"data":{"id":null,"label":"Create Account","name":null,"type":"submit"},"durationMs":66,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b61780df-6337-4644-8d44-baf303a05da7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:35","userId":null}
{"data":{"id":null,"label":"Create Account","name":null,"type":"submit"},"durationMs":92,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.19,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"988eb664-c3a1-4932-b687-bce13ce2bbd0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:40","userId":null}
{"data":{"id":null,"label":"Create Account","name":null,"type":"submit"},"durationMs":99,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/onboarding","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":0.97,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bc2b127c-7836-46fb-8cc1-10e17ad1c3a3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:56","userId":null}
{"durationMs":1243.53,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/signup","requestId":"f41be00a-9d87-4889-bf0a-937e70ddde50","schoolId":null,"service":"cbc-sms","status":201,"timestamp":"2026-08-14 19:56:56","userId":null}
{"data":{"method":"POST","status":201,"url":"/auth/signup"},"durationMs":1738,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.88,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b8bb6ea5-7edf-407e-a533-1244d68ecced","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:58","userId":null}
{"data":{"from":"/onboarding","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/onboarding","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:56:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.08,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5f654932-39bb-4828-af36-62adc294eed4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:56:59","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:57:00"}
{"durationMs":801.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"8a82f358-6656-4288-a899-1d69e5b4b1ad","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:18","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":91,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 19:57:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.49,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8209456f-b4dd-48f7-884f-1b6e999f438b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:18","userId":null}
{"durationMs":111.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"a6c94c74-b6ab-4a0e-a7ca-9a886d0f95e5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1163.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.86,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0633af3c-724f-4955-91a4-bf3e1d0f8e02","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":134.55,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"fc89dbb3-a44d-4bb4-aba1-c948a9df51cd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":43.81,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"1ea0b2da-3c87-4a97-be64-3848cd8cc00c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":45.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"8b25c280-7a11-40a8-a61f-197e39dbbf43","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":89.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"2019233b-db57-4118-a23b-6042d649f5fb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":32.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"1b3d1448-5699-4e60-8a08-0ec83afb9563","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":825.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"51472f74-f1bf-4177-81a6-dbce0c6b90f7","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:57:21"}
{"durationMs":23.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"747ba9a2-2ede-4c5d-bc85-1f2692e4c9aa","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:57:21","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":959.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":1125.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":1188,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1358.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1493.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2bf70426-dbde-4810-9597-03a728c47a1a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:21","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":64.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"af7dee0d-e314-4d32-9ca2-4eba99ca9e15","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":64.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"f45e5ce7-2944-44eb-a238-e27db9fb258f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":44.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"d6341a24-f2d3-4548-8109-6e1e37b5f187","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":38.71,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"0dffc21e-dfc3-4c0b-944a-f6f0c62ee80e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":48.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"03d5a38f-56da-470b-afa8-fa4f6765de1b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":32.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"cbde2750-b09e-4c08-a074-66e2eac29bc0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.84,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"7ed031b2-8c8e-4936-af3d-74bced3fe3c8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"0cdd83c5-f396-4824-aab0-b27108511eca","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":807.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.21,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a9cfa168-a4a2-47b8-8dc2-73590e61b94a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:57:23"}
{"durationMs":26.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7bac72b9-2db6-4149-8b55-d520206327a3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:57:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":460.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":539.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1085.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1089.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1095.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1100.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1103.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1107.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":849.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e7cf4d6d-e716-4ff3-87a4-8419184106c0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:24","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:57:25"}
{"durationMs":17.86,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"0b765aa7-5dc7-4066-900e-2198559e6b19","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:57:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":399.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"caa5c9ac-ff8f-401a-9019-d7268c08c53f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:26","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":3.25,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"f2b7cb9c-d691-4b4b-a947-3bc43ac59a71","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:57:52","userId":null}
{"data":{"href":"/dashboard/profile","navId":"1786726668036-40598","text":"Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/profile","navId":"1786726668036-40598","text":"Profile","to":"/dashboard/profile"},"durationMs":787,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726668036-40598","to":"/dashboard/profile"},"durationMs":787,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726668036-40598","to":"/dashboard/profile"},"durationMs":808,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.42,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e8ec4a86-8b83-4ff6-a033-c63e938e8004","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":505.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"78d47ed9-522a-46ed-a879-a7c3ddeacd57","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:54","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"5bde0941-172b-497d-951b-b647bffe3620","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:57:54","userId":null}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":392.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.61,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"49a8618f-002a-492b-aa23-bda1db42244c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.08,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"d37c5b7c-d593-42c9-983f-15838b1cf7ae","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 19:57:56","userId":null}
{"data":{"id":null,"label":"Settings","name":null,"type":null},"durationMs":78,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":384.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:57:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"32dcb792-db56-4af3-afb7-14d140fd5af5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:57:57","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:58:00"}
{"durationMs":93.97,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"06b33d7f-0c38-43d3-8784-b69702e78526","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":60.79,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"5afabaf5-a41c-4076-926f-eba76b58dc4c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":46.92,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"2b512f99-e33a-4793-b22b-e4b7062e998e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":51.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"db12dab5-2c31-4dea-b4e4-60e0ca71651c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":48.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"8369ad4b-fec4-414d-85d7-e6733736f6be","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":42.97,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"66182cb9-7b19-4170-957b-f71d4d6a462d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 19:58:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"f12a626d-19c0-4b33-9c2e-538f848a6b64","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 19:58:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.89,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"8e41f5c9-1cea-4a08-a181-e0b2358abe84","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 19:58:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard","navId":"1786726685298-709503","text":"Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/profile","href":"/dashboard","navId":"1786726685298-709503","text":"Dashboard","to":"/dashboard"},"durationMs":321,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/profile","navId":"1786726685298-709503","to":"/dashboard"},"durationMs":827,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.39,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9a838036-a2ca-483a-9e36-d7366632d4a0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":588.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":871.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1139.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1366.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1551.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1645,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1838,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1988.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.04,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"101a4b95-a310-484a-b6d9-90a5660664c6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings/payment-gateway","navId":"1786726691987-242796","text":"Open payment gateway"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.21,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"840137bd-63a3-448b-a97f-1f1922053c08","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:16","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"2b43aa09-1d85-4741-a3fe-080d32a4943d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 19:58:17","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/settings/payment-gateway","navId":"1786726691987-242796","text":"Open payment gateway","to":"/dashboard/settings/payment-gateway"},"durationMs":1137,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726691987-242796","to":"/dashboard/settings/payment-gateway"},"durationMs":1137,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726691987-242796","to":"/dashboard/settings/payment-gateway"},"durationMs":1263,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":534.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.71,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"927e62db-c9d0-4810-b9da-8a051011b47c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:17","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:58:26"}
{"durationMs":30.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"6bf0f1a8-c0e8-498d-a8cb-a880582a8183","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:58:26","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":460.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.45,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d5a0649f-936f-491d-ac98-08dbd5adcc0d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:58:27"}
{"durationMs":24.83,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e56cd56a-54f4-4dfc-b9d6-81d0d9dc9152","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:58:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":637.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.78,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8cba9f61-40c6-411d-8c82-0ef41e8386c7","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:29","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:58:30"}
{"durationMs":25.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"388710c1-29ea-4e01-b6c2-36f1044a70f9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:58:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":488.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.31,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aa1d25dd-3531-4264-ae99-8f5c5b176fb2","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Sandbox Config","name":null,"type":null},"durationMs":235,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:58:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.31,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4ffffb9b-3118-4745-866d-66175b2c8222","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:58:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 19:59:00"}
{"data":{"id":null,"label":"Production Config","name":null,"type":null},"durationMs":506,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fb2c972a-f3d8-45cc-8159-2528d071b18e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:16","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":260,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.65,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"12cca84f-cf2c-40ad-9de6-d31fa976ea1d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/students","navId":"1786726764770-186970","text":"Students"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.61,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"07b1c61b-9d8c-41aa-8ac3-850adee508ae","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:29","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:59:30"}
{"durationMs":27.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1548ab82-a3a2-4216-a797-0e84d1c51409","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:59:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":79.37,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?page=1&limit=10","requestId":"0d0c8648-60df-4ef0-97db-48e3c32acc49","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":153.8,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students/stats","requestId":"4a5aa811-e82f-4ba6-be78-37619b97936e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":107.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"eaf568ac-e407-4881-a101-5bf3d67d3d77","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","href":"/dashboard/students","navId":"1786726764770-186970","text":"Students","to":"/dashboard/students"},"durationMs":2194,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","navId":"1786726764770-186970","to":"/dashboard/students"},"durationMs":2194,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","navId":"1786726764770-186970","to":"/dashboard/students"},"durationMs":2706,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":674.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":649.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f9bdd0d9-3490-4adc-9ecd-d738d76e32a3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:59:32"}
{"durationMs":25.03,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9900fbd5-077a-47da-9062-ce9e6a70573e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:59:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/students/stats"},"durationMs":973,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":977.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":439.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"563cbcb5-060a-4112-b14a-c04b82d177f8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:33","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 19:59:35"}
{"durationMs":22.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"891db7e5-77b2-44a3-80b6-f0a92ca4fcf4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 19:59:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":486.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4037b6c0-7da0-4316-b6a2-8a0f94e1ee8e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"All Classes","name":null,"type":"button"},"durationMs":368,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":14.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e844b969-4451-4ee0-956e-a1c88cc7ad5d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"All Statuses","name":null,"type":"button"},"durationMs":357,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f7e7affa-e1dc-41a2-b0a2-24cc422c6bbb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":213,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.23,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0d46b2db-feaa-456d-a1c8-a3cc7859c14b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:47","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":61.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardians?page=1&limit=10&includeStudents=true","requestId":"765a2a52-ff5e-4047-8a35-158eccd8c188","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:50","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/guardians","navId":"1786726785626-41251","text":"Guardians"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","href":"/dashboard/guardians","navId":"1786726785626-41251","text":"Guardians","to":"/dashboard/guardians"},"durationMs":614,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","navId":"1786726785626-41251","to":"/dashboard/guardians"},"durationMs":614,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","navId":"1786726785626-41251","to":"/dashboard/guardians"},"durationMs":823,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":38.17,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7bc6e088-10fe-4186-aafa-2358cf2f3378","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:50","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/guardians"},"durationMs":491.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 19:59:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.53,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1c3f153e-690a-44f3-abc6-654738ed328b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 19:59:51","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 20:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:00:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:00:01","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1b17a02b-7f15-4fbc-a920-3ab9dabcc85e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:00:02","userId":null}
{"data":{"id":null,"label":"10","name":null,"type":"button"},"durationMs":197,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.13,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f8136e0e-11df-492d-89d1-c84a1bedeb1c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":51.44,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardians?page=1&limit=30&includeStudents=true","requestId":"6e481b94-0992-49f8-9361-4d38a314c077","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":310,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:00:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":0.92,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3f46c155-46ee-471a-9992-7fed54195e07","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:08","userId":null}
{"data":{"method":"GET","status":200,"url":"/guardians"},"durationMs":551,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5af81e67-efbe-4603-a71c-efb2062608e2","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":24,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.99,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5367a670-840b-4368-a99e-a1b39c09be18","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Guardian Name","name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.11,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"31095352-ce0d-477d-b429-77c664eed58a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/guardians/new","navId":"1786726816046-616155","text":"Add Guardian"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians","href":"/dashboard/guardians/new","navId":"1786726816046-616155","text":"Add Guardian","to":"/dashboard/guardians/new"},"durationMs":585,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/guardians/new","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians","navId":"1786726816046-616155","to":"/dashboard/guardians/new"},"durationMs":585,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/guardians/new","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians","navId":"1786726816046-616155","to":"/dashboard/guardians/new"},"durationMs":749,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/guardians/new","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b7d54f2-07be-400a-95ca-354d4dd5f724","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":161,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/guardians/new","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.88,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7f0c2156-5677-438d-9ad1-d6ccddd8873a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:29","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:00:35"}
{"durationMs":25.12,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9bc06261-288e-4782-9c64-e27f5ed2a341","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:00:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":634.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.73,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"23d48b4b-76ce-426e-84b9-0b7691c9a9e4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:00:37"}
{"durationMs":25.83,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"794271e9-6a22-4f73-891d-2ba0620b49f2","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:00:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":669,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.92,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1392111a-3084-462f-9a1a-cf7a8fd594bd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:38","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:00:39"}
{"durationMs":25.35,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3c171569-2dab-413d-a046-52b08e24d5f6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:00:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":519.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:00:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.1,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"347ed3f3-97d2-4987-9242-12da56b3697b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:41","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":314,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:00:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.54,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c7d00b0d-faae-40b0-8665-92571b463686","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:00:43","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:01:00"}
{"durationMs":81.36,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardians?page=1&limit=10&includeStudents=true","requestId":"6bd20157-c895-483e-a176-26507e516c51","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:01:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/guardians","navId":"1786726860944-14010","text":"Guardians"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/guardians/new","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians/new","href":"/dashboard/guardians","navId":"1786726860944-14010","text":"Guardians","to":"/dashboard/guardians"},"durationMs":213,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians/new","navId":"1786726860944-14010","to":"/dashboard/guardians"},"durationMs":319,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":30.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8e16aa80-4ca6-426b-aa0a-bac2ec3840aa","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/guardians"},"durationMs":600.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0b418afb-9a96-411e-b395-9cc4c3f9f806","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":91.54,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"e1943a50-4a03-4a69-84e1-a3e03bd6ec8e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":63.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"fbc6c2b0-55c1-479b-82d2-37f6db4374be","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":70.65,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"966b7195-0f6b-42e6-9e17-d787a59999bf","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":38.1,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"e446e632-f09d-4e65-9ade-c3208044e933","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":44.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"06bf1ff4-e159-4d83-98c3-f82228103119","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"af021f26-92a3-4685-9114-0a35c67e9443","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":43.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"a54a41de-1b5b-44fd-b3cf-043ae657e6db","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.81,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"099cc196-b1fc-4eba-a781-f2d92e35dd40","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard","navId":"1786726863485-88243","text":"Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/guardians","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians","href":"/dashboard","navId":"1786726863485-88243","text":"Dashboard","to":"/dashboard"},"durationMs":303,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/guardians","navId":"1786726863485-88243","to":"/dashboard"},"durationMs":715,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3cc44b2f-e2f5-4167-af25-a763876e5a64","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":594.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":722.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":919.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1025,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1162.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1252.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1433.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1504,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":27.61,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"95922b4b-a7bb-4cfe-821c-c7c9d1fc173c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":65,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:01:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.12,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b399d7f-a3fe-44ab-acfd-74d152e1a3ef","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:14","userId":null}
{"durationMs":670.5,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"f1af9b2d-4cb6-4568-87fa-7c2ecb7ffd88","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:20","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":208,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:01:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.42,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cfc122ac-fdfb-4c81-9c0e-3aa09ebc02c5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:20","userId":null}
{"durationMs":37.93,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"c6f42b0d-bca9-4cb6-b6b9-17b4ea7a675b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":56.42,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"c8437c09-9746-4cd1-947a-5c0e3bcc9e14","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":60.48,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"41ddd5d8-34cd-4865-9a37-189d8f800edc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":64.89,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"ea96f691-3fc2-4a6d-847a-843ede839839","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.24,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"bffabf53-3de9-4b91-b90c-afa24f1bd463","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":38.87,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"a54f8b6a-a44b-4698-a793-ba264420475c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1135.5,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":760.8,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.58,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2ca29522-df7c-45b5-b038-515f60166db0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:23"}
{"durationMs":27.08,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"099ebdb0-11dd-4217-8e2b-bf9aad9e2fe5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":806.7,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":1076.7,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":1416,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1422,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1428.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.89,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e39e4313-450e-4611-83ca-f25c64b10fec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":86.17,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"975374ad-f436-43c5-ba38-0913f68399d3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":161.49,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"a871e7d3-b105-48d2-918e-7e579ff44822","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":202.67,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"e0505712-39ab-406d-bae5-90ba82c11c3b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":77.04,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"83b6f325-a070-4e6b-8099-9b96ae5497b8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.99,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"2a043b86-57dd-43f3-b97a-c7d4f0bc1061","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":121.27,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"e0321d90-406b-40b4-92f2-555b5943952e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":153.72,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"c32a7b95-4d90-4679-93da-d97fabb167bd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.56,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"0aba9b97-da03-47ec-8791-62eed22e8e8c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1095.7,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.58,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f19d3e4c-69e9-4b12-a829-5c95f97d44d6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:25"}
{"durationMs":23.25,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"fc62f16c-96f7-4387-a1ef-14b8bfa5703c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":768.7,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":773.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":875.5,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":883.8,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":892.1,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1357.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1361.6,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1364.5,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1043.5,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.63,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e01c181f-6646-4323-919c-4c66909c6ba5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:28"}
{"durationMs":23.24,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1620e355-c593-4b11-a3f9-4bf31f7ef2b4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":515.7,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.73,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7fdd7e76-3bd0-467b-a682-8b2914d508e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:29","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":268,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.68,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f441dc65-9b51-4ce4-b3dd-f2f8aa826ee1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/students","navId":"1786726893822-192554","text":"Students"},"durationMs":null,"event":"NAV_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.03,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2163dc48-5d3b-4896-b454-57c4ec8061f0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:38","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":189,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.46,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5406d729-8340-4767-998d-d60e23d41ad0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":110.27,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?page=1&limit=10","requestId":"3fb51953-b94b-48d1-93b1-dde4d2be97e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":144.39,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students/stats","requestId":"5fffcc46-1f2d-4c6e-a987-b5532e7c9d80","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":167.37,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"ec850009-eac7-4578-afb7-17612bd37615","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:40"}
{"durationMs":20.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3b0a8c01-5dc6-4f30-ad10-e4012129f40c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:40","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/students","navId":"1786726893822-192554","text":"Students","to":"/dashboard/students"},"durationMs":2361,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786726893822-192554","to":"/dashboard/students"},"durationMs":2361,"event":"NAV_STALL","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786726893822-192554","to":"/dashboard/students"},"durationMs":2666,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.64,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7283fda4-5fba-49b9-a626-da05bb55f793","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":812.9,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students/stats"},"durationMs":820,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":1482.1,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:01:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.58,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e549adf2-b202-4e0c-aeee-bc3c564c8f48","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":615.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.8,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"388801a9-490a-453b-8cdb-a281d3a46e32","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:41","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:41"}
{"durationMs":17.08,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c8fe561e-d7af-44af-bebb-078caf831bcd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:41","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":414.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.63,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2b212fe5-305c-47bc-a57f-3d7ce04bfa79","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:01:44"}
{"durationMs":27.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a7a8e25b-a62d-44b4-9f50-3965c9b3b3ad","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:01:44","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":60,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":453.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":167,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.96,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b5b7551a-284a-4acb-91e2-13bc0fee5317","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":181.26,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/senior-secondary/kssea-reports","requestId":"5f6fab7f-7d5d-416d-98e6-ef3ff7edc6c5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":50.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/senior-secondary/kssea-reports/stats","requestId":"12d7fdb5-a39c-4568-a939-5026a5283947","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/senior/kssea-reports","navId":"1786726907206-476408","text":"KSSEA Reports"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/senior/kssea-reports","navId":"1786726907206-476408","text":"KSSEA Reports","to":"/dashboard/senior/kssea-reports"},"durationMs":641,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/senior/kssea-reports","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726907206-476408","to":"/dashboard/senior/kssea-reports"},"durationMs":641,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/senior/kssea-reports","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786726907206-476408","to":"/dashboard/senior/kssea-reports"},"durationMs":670,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/senior/kssea-reports","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.37,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"40f08bbb-6e47-45ab-838d-cb486cec0e98","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/senior-secondary/kssea-reports"},"durationMs":667.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:53","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/senior-secondary/kssea-reports/stats"},"durationMs":934.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:01:53","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.15,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"136b145c-3171-48b5-8154-a45f0c648b4d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:01:53","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":291,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.87,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"edc80189-c35d-4576-b47d-a8c099b8643b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:02:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":173,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/senior/kssea-reports","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1722922d-f363-420a-aebc-822c50965e9d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:00","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance/fee-dashboard","navId":"1786726920899-555328","text":"Fee Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/senior/kssea-reports","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"18444bc4-14a2-4274-a49d-a168627ae77e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":161.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dashboard","requestId":"707cd0c4-da91-4003-be88-9bdc1e80c9ba","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":104.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/years","requestId":"1b3aad39-32f3-44f0-abed-0318561a54c3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":42.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/debt-aging","requestId":"519478e2-a3b5-422c-98fd-b51e357a48a2","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":34.68,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/collection-velocity","requestId":"ab22dd6e-31b6-482c-8745-8ac76effeda0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":39.89,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/payment-segments","requestId":"cadf6e58-e9eb-404d-a97e-79d422e00fc4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":58.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/forecast","requestId":"04da4029-9a13-4f60-87ac-f12dc6d0f29f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/senior/kssea-reports","href":"/dashboard/finance/fee-dashboard","navId":"1786726920899-555328","text":"Fee Dashboard","to":"/dashboard/finance/fee-dashboard"},"durationMs":909,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/senior/kssea-reports","navId":"1786726920899-555328","to":"/dashboard/finance/fee-dashboard"},"durationMs":909,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/senior/kssea-reports","navId":"1786726920899-555328","to":"/dashboard/finance/fee-dashboard"},"durationMs":1002,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/dashboard"},"durationMs":680,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/years"},"durationMs":895.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.89,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e3903576-ceb2-4ec1-a2de-6169183e7c6f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/debt-aging"},"durationMs":906.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/collection-velocity"},"durationMs":979,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/payment-segments"},"durationMs":1038.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/forecast"},"durationMs":1150.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fde427d3-f6b0-4d2e-92f6-b28976e0a7aa","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":116,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.37,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4d333178-d402-4396-be67-ca541964f714","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:11","userId":null}
{"data":{"id":null,"label":"Send Reminders","name":null,"type":null},"durationMs":9,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"21ba0f9a-a7f1-40b8-94eb-459ffa4ce274","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Dashboard & Analytics6","name":null,"type":null},"durationMs":109,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.61,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fd69e40c-0a56-4a36-b04c-56b73d35126c","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:17","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":88,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.08,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0da7185a-3dfa-42d5-9c84-52529a4fac0a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:21","userId":null}
{"data":{"href":"/dashboard/uniforms","navId":"1786726940427-431245","text":"Uniforms"},"durationMs":null,"event":"NAV_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.98,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"70a82df6-5db9-43c0-b259-7a183b2588e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":223.96,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/uniforms/items?page=1&limit=8","requestId":"61f87186-f7a5-4433-9501-3dc01fa4d5ec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Staff Portals8","name":null,"type":null},"durationMs":110,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.08,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a40285af-7e3c-42c4-a419-3136c3e335ba","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:25","userId":null}
{"durationMs":188.89,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/uniforms/dashboard","requestId":"3bd1dcf7-c2fc-488a-913c-5ddd3a4472f2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"All Terms","name":null,"type":"button"},"durationMs":259,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.26,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"61fe1b81-00d3-4a72-a6a8-a5a9b60c9dd8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","href":"/dashboard/uniforms","navId":"1786726940427-431245","text":"Uniforms","to":"/dashboard/uniforms"},"durationMs":1171,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","navId":"1786726940427-431245","to":"/dashboard/uniforms"},"durationMs":1171,"event":"NAV_STALL","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","navId":"1786726940427-431245","to":"/dashboard/uniforms"},"durationMs":1220,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/uniforms/items"},"durationMs":772.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/uniforms/dashboard"},"durationMs":778.4,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.56,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4183c965-9f1a-4b80-8126-7fba3b00b457","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:28"}
{"durationMs":24.83,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ea3595ef-f14e-4767-8847-710f7ab9688c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":523.2,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.21,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ad07457d-b170-46e2-afe5-4248ff0610cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":67.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dashboard","requestId":"9d0f7527-c428-4119-aa45-89071a3e42a1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:02:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:30"}
{"durationMs":106.68,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"582ac672-1614-4f62-95e6-c541b78895cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:30","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/finance","navId":"1786726945757-429127","text":"Finance"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","href":"/dashboard/finance","navId":"1786726945757-429127","text":"Finance","to":"/dashboard/finance"},"durationMs":701,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","navId":"1786726945757-429127","to":"/dashboard/finance"},"durationMs":701,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","navId":"1786726945757-429127","to":"/dashboard/finance"},"durationMs":817,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.21,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"92bfee70-4067-410b-9895-f3cc75d9a226","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":83,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.85,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b9427dce-5c39-4031-94ec-7c13a2f0c7a8","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:31","userId":null}
{"data":{"method":"GET","status":200,"url":"/fees/dashboard"},"durationMs":501.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.53,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d7eda6ae-cb8d-445b-b197-e5102e2fed9c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":589.4,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.86,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d2a33f57-52b7-4f8b-ada9-5f154d10ac41","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:33"}
{"durationMs":19.69,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"36cbe47e-e38d-423f-8ee5-639b92042b0d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":609.7,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.84,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e3f18cd7-a5a2-47fc-954a-f67fe4382505","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:34","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.45,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/years","requestId":"277458a3-d0fa-4b50-949d-2f234f208485","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:02:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":166.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/fee-structures","requestId":"9774c0d7-ca05-4e18-b674-2639d15aae69","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance/fee-structures","navId":"1786726950745-742001","text":"Fee Structures"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","href":"/dashboard/finance/fee-structures","navId":"1786726950745-742001","text":"Fee Structures","to":"/dashboard/finance/fee-structures"},"durationMs":615,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","navId":"1786726950745-742001","to":"/dashboard/finance/fee-structures"},"durationMs":615,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","navId":"1786726950745-742001","to":"/dashboard/finance/fee-structures"},"durationMs":640,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.69,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7e2cf6db-cca0-4cab-bdd9-0301c4c988a5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":100.35,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dynamic-rules","requestId":"e056b42a-8063-4e7e-ae43-54cf0a183ae5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/years"},"durationMs":630.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/fee-structures"},"durationMs":639,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/dynamic-rules"},"durationMs":514.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"586358f8-f312-4a1c-a4da-914bd0cbf77f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":152,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.38,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"626014dc-c634-489b-9dad-a271454a872f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:45"}
{"durationMs":26.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3e041ed6-69e3-43d4-8977-e4bba31a9595","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":71.21,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dashboard","requestId":"87d6ed34-7917-4457-bb11-bf80b14d540a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:02:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance","navId":"1786726961330-768763","text":"Finance"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-structures","href":"/dashboard/finance","navId":"1786726961330-768763","text":"Finance","to":"/dashboard/finance"},"durationMs":163,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-structures","navId":"1786726961330-768763","to":"/dashboard/finance"},"durationMs":332,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":600.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.12,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"02b63431-ee52-437c-b492-38cd49859a60","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:46","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/cbc/report-cards","navId":"1786726962041-596149","text":"Report Cards"},"durationMs":null,"event":"NAV_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.59,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2cf3e2d9-6d17-4322-8343-55538a920b64","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:46","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:46"}
{"durationMs":24.85,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"290b0ee2-788d-4084-8a06-c3c0c73c2370","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:46","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/dashboard"},"durationMs":682.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.45,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"200139de-091a-4be3-b899-25ba5cfd6c4e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:46","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":47.68,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/years","requestId":"781fd566-e36b-42ed-954f-698b48c59dd4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":60.24,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"bb7f921c-b941-4067-ab1e-879112679a6a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":37.97,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"b15ba3e3-6cd3-4877-9631-0e51f662f7cf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":179.97,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/assessments","requestId":"4a7361d6-e515-4403-87bb-d9d7442018e1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":129.17,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/report-cards?page=1&limit=10","requestId":"63349323-5319-4916-acb9-a6317f1b5cfd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":477.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":170.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"21010958-1932-4ee7-877e-0fef5c62b243","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:48","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":292.49,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"dcb5f0fa-f321-44b1-92b1-c1d4f1cf96e7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","href":"/dashboard/cbc/report-cards","navId":"1786726962041-596149","text":"Report Cards","to":"/dashboard/cbc/report-cards"},"durationMs":1514,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","navId":"1786726962041-596149","to":"/dashboard/cbc/report-cards"},"durationMs":1514,"event":"NAV_STALL","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","navId":"1786726962041-596149","to":"/dashboard/cbc/report-cards"},"durationMs":1800,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/years"},"durationMs":616.4,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":633.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":795.6,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.07,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"377d87c2-3d68-47e6-9f98-7e1e75dd0b01","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":75.03,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/assessments?termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"0a68af04-931c-4b96-86a1-6708759b244e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":118.2,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/report-cards?page=1&limit=10&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"6e55852c-1141-4ea3-8789-299ec195dcad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:02:49"}
{"durationMs":18.44,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1b6df21c-8eeb-41f0-affc-1eca7569c398","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:02:49","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":427.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.37,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"37945788-384a-49d5-a0ff-2b2ef8ec0fa3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:50","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/assessments"},"durationMs":980.7,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/cbc/report-cards"},"durationMs":1119,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":1531.8,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/assessments"},"durationMs":798.6,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/cbc/report-cards"},"durationMs":805.6,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.21,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"41df710c-af13-4471-abc1-ef7b24e34e0d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Generate","name":null,"type":null},"durationMs":2738,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.13,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0b0de10e-6151-4df6-a567-1132f57bfda0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Generate Report Cards","name":null,"type":null},"durationMs":44,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:02:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.81,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3f005155-173e-49cc-99ec-2d78faed2816","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":1923.47,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/cbc/report-cards/bulk","requestId":"0ce16987-09c1-4fb3-abc7-fcbf7ee279d4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":201,"timestamp":"2026-08-14 20:02:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Staff Portals Overview","name":null,"type":null},"durationMs":27,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:02:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":0.89,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b29a1047-1d38-437c-aedb-9e10705d41e0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:59","userId":null}
{"durationMs":61.37,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/report-cards?page=1&limit=10&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"cb5a0486-6c69-4bdc-8983-95d60b8e7dc5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:02:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:03:00"}
{"data":{"method":"POST","status":201,"url":"/cbc/report-cards/bulk"},"durationMs":2363.8,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/cbc/report-cards"},"durationMs":3781.7,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.41,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"547b1fd3-d37e-4a96-944d-ebb3f2ecc5d3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:03","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":186,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"91ecae3e-e7ad-469b-bde1-becb2d098874","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:04","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":102.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff?page=1&limit=20&isTeacher=true","requestId":"f961eba1-d168-41c1-9acd-0ea47eb495a3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":90.63,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/stats","requestId":"f1a912fb-5e63-412c-bc1e-52a8817b1348","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/teachers","navId":"1786726987722-327615","text":"Teachers"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","href":"/dashboard/teachers","navId":"1786726987722-327615","text":"Teachers","to":"/dashboard/teachers"},"durationMs":709,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","navId":"1786726987722-327615","to":"/dashboard/teachers"},"durationMs":709,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance","navId":"1786726987722-327615","to":"/dashboard/teachers"},"durationMs":958,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":27.56,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"da4f112e-9658-4a6b-8fe0-8453382e8b25","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff"},"durationMs":666.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff/stats"},"durationMs":839.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b3da55a1-faa3-42b9-b135-e6a978446285","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":264.02,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/report-cards/cmp8gts8z00za8bcnvoykm2o5/cmp8gtpme00d68bcnq5m8mk8x","requestId":"a02289b3-197e-41f6-b2b4-0b90f500bc23","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:16","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Teacher Portal","name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.18,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"737f415d-c4c4-48f1-bf9a-13584ace179a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:17","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":2978,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/cbc/report-cards","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/cbc/report-cards/cmp8gts8z00za8bcnvoykm2o5/cmp8gtpme00d68bcnq5m8mk8x"},"durationMs":772.9,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.38,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d974c6e0-ece2-4e24-a942-3dd61010eedd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":155,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.9,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c5644901-ee9e-4be7-8d3c-4517c2069137","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Finance Portal","name":null,"type":null},"durationMs":23,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":0.96,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"908fe6f3-81f6-437a-a430-f36b35ca395f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:26","userId":null}
{"durationMs":78.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dashboard","requestId":"54192671-e56b-44fa-91f7-bb2a529e5a09","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":52.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/years","requestId":"6726b3e5-24e6-4bc9-b9ac-4763a18c5e16","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":41.15,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/debt-aging","requestId":"c6663821-ea31-491a-aa4e-ae3fdfd65d8c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":47.15,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/collection-velocity","requestId":"48bb7bec-0f63-4912-abfc-31d2c0662833","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":43.3,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/payment-segments","requestId":"257a8f21-ef43-4d85-817c-bc963f9077e8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":108.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/analytics/forecast","requestId":"ab0a6de4-c47c-4932-a538-43ea058a5125","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance/fee-dashboard","navId":"1786727005727-486220","text":"Fee Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","href":"/dashboard/finance/fee-dashboard","navId":"1786727005727-486220","text":"Fee Dashboard","to":"/dashboard/finance/fee-dashboard"},"durationMs":232,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","navId":"1786727005727-486220","to":"/dashboard/finance/fee-dashboard"},"durationMs":395,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/dashboard"},"durationMs":539.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2c4240de-ee58-44bc-a992-c014f389cd50","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":94,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.36,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8bc7e8b1-316a-4ff8-bc27-b7a493f8057a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:32","userId":null}
{"data":{"method":"GET","status":200,"url":"/academics/years"},"durationMs":638.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/debt-aging"},"durationMs":905.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/collection-velocity"},"durationMs":1167.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/payment-segments"},"durationMs":1321.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/analytics/forecast"},"durationMs":1520.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.46,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1c65f680-e459-4cc0-854d-43fbcfd0be75","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:33"}
{"durationMs":16.34,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5d87a69f-faa6-4314-afd8-7a8fba26034c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":508.7,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.9,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"53d01d5a-f406-49e0-a170-0c070946b038","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:35"}
{"durationMs":17.87,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1837b6ef-a1d8-4832-9e22-44971f470d55","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":509.3,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.28,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"473dfefd-0e89-4c93-9fb3-a8f73f10f154","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:37"}
{"durationMs":19.94,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2b21a713-5673-4f17-a6b5-05c9bcf31447","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:37","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":578.4,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.71,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e1933d62-ef89-4c6d-bb2a-795ec0d8379a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Senior Secondary & Pathways4","name":null,"type":null},"durationMs":94,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.51,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d8cccd10-e217-4894-94c0-36acfc1f4298","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:42","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":177,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"23323392-59d6-4dc2-9ab8-3538485c6477","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:42","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Career Guidance & Track Allocation","name":null,"type":null},"durationMs":28,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.88,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"62da9242-c9a2-48a9-bdf8-a651707a73f0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:48","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:49"}
{"durationMs":26.45,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"580630c3-6ae5-405d-bf91-21d0430154a5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:49","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":458.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.56,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fbf14902-35c8-4e3e-9fa1-448a1063900e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:50","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:51"}
{"durationMs":26.44,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"6c8c1bdd-a4a1-42f2-8b21-641f46467d6f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:51","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":54.13,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/uniforms/items?page=1&limit=8","requestId":"0ace3fcb-b5b2-45ae-96b1-0c5333f03fb2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":54.86,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/uniforms/dashboard","requestId":"29fc9136-c401-47ed-bc95-2034ce7b1b53","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:03:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":451.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1d9635a7-66a8-4ce9-9a08-6b82d44c2b97","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/cbc/report-cards","href":null,"navId":null,"text":null,"to":"/dashboard/uniforms"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/cbc/report-cards","navId":null,"to":"/dashboard/uniforms"},"durationMs":null,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/uniforms/items"},"durationMs":604.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/uniforms/dashboard"},"durationMs":709.9,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:03:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.77,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"52a8e85d-48a2-4485-af4a-ed4e1fb30ee3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:03:53"}
{"durationMs":16.11,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"db6082c9-f976-4293-984f-8d46972347f1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:03:53","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":484.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:03:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.16,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eb7c44ae-6d15-4d26-8795-6ad384bbc74d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:54","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":89,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:03:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.17,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"64dd1b90-cc70-42b6-8d01-9cceac4cc65a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:03:57","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:04:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":195,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.78,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fbceda16-eab2-42d1-bf28-b6b3fdb16bcf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:03","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":83,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:04:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":0.93,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fe8e2146-d164-4eb0-9b71-b00e2944eca8","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:06","userId":null}
{"data":{"from":"/dashboard/timetable","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:04:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.26,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"af8792e5-7184-43fc-8570-93b4a10b7ca7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:20","userId":null}
{"durationMs":53.42,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"ad234ad0-c566-4421-a798-d4b34351243a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/academics","navId":"1786727061351-632199","text":"Grades & Streams"},"durationMs":null,"event":"NAV_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/uniforms","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","href":"/dashboard/academics","navId":"1786727061351-632199","text":"Grades & Streams","to":"/dashboard/academics"},"durationMs":984,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","navId":"1786727061351-632199","to":"/dashboard/academics"},"durationMs":984,"event":"NAV_STALL","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.4,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"28819962-d755-4bb6-8760-634246ea4d6d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:26","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/uniforms","navId":"1786727061351-632199","to":"/dashboard/academics"},"durationMs":1164,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":645.2,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.89,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5b8b2a44-f634-49ae-946a-2bdfee03d364","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":115,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:04:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.5,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cc68ef1a-244c-4f36-8ad1-ba92d788be59","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:29","userId":null}
{"data":{"id":null,"label":"Settings","name":null,"type":null},"durationMs":39,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:04:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.29,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e692c5de-2ddb-42b4-8e0e-8e198c9570c5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:30","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:04:38"}
{"durationMs":48.84,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7985ed5b-f586-460d-81c8-44cd3000ad77","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:04:38","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":617,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.18,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aa7ad44d-9b6c-4d54-b25b-3578401f55e2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:04:39"}
{"durationMs":24.6,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7ffec9d6-7fa4-40cb-806a-21380ef3a25e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:04:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":534.3,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.94,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"259843be-ee55-49ce-adf2-1ebf13466a07","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:41","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:04:42"}
{"durationMs":33.08,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"bdac9bfb-e821-4e99-af02-c4e1b3158e24","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:04:42","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":655,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:04:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.09,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0e26f5e6-0ada-4b47-aef3-1d3ab3823e9a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:43","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Dark","name":null,"type":null},"durationMs":85,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:04:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.49,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"728a8096-e967-44aa-ab60-8e8cc6b33206","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:04:45","userId":null}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:05:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dca782b4-3c5c-47b9-8bb2-60c08341769e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:05:02","userId":null}
{"durationMs":83.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/fee-structures","requestId":"7c875bd6-7e67-4494-8c81-a795715307c6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:05:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance/fee-structures","navId":"1786727107657-904079","text":"Fee Structures & Rules"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/fee-dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","href":"/dashboard/finance/fee-structures","navId":"1786727107657-904079","text":"Fee Structures & Rules","to":"/dashboard/finance/fee-structures"},"durationMs":564,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","navId":"1786727107657-904079","to":"/dashboard/finance/fee-structures"},"durationMs":564,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-dashboard","navId":"1786727107657-904079","to":"/dashboard/finance/fee-structures"},"durationMs":651,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":46.13,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"72749704-099e-4d35-9959-5d9cd2aa5727","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":60.98,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/years","requestId":"359b6d58-a871-4530-83da-74aff8fe7083","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:05:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":59.55,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/dynamic-rules","requestId":"a1c99c2a-feb7-459e-9116-f018ba82b457","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:05:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/fee-structures"},"durationMs":873.5,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/years"},"durationMs":1330,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/fees/dynamic-rules"},"durationMs":1355.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.26,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8c617cf7-5cbf-4898-8cb9-6ea641dd5042","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":254,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.13,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2ee07df7-4cbb-4f19-a786-c5f2904f6294","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Staff Portals","name":null,"type":null},"durationMs":89,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.98,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"dce8ff81-70b7-42b5-b29d-1c3413750243","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:43"}
{"durationMs":46.54,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"25c5bbe6-0a0c-4201-b522-6b227334f947","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:43","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":516.1,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":34.43,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a714d392-a036-4079-92df-0d95abb6be3e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:44"}
{"durationMs":28.75,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5916b2d6-996d-4eb6-9b84-2bef473ea292","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":535.8,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.16,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7828f9bb-931c-428f-98f0-8fc0dd8505d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:46","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:47"}
{"durationMs":28.24,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5a497dad-5923-41d4-90f2-77d374259876","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":480.5,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.19,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"03078fe4-2302-4e1e-a1b8-b0f0dcaa55fa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:54"}
{"durationMs":27.2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"bd3c06b0-010c-4a65-a3e5-36c133def91e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:54","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":761.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":50.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7b686dd1-3c89-43ef-b4b9-4cd408655174","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/senior/pathways","navId":"1786727151339-398117","text":"Pathways"},"durationMs":null,"event":"NAV_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/academics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/academics","href":"/dashboard/senior/pathways","navId":"1786727151339-398117","text":"Pathways","to":"/dashboard/senior/pathways"},"durationMs":599,"event":"NAV_PATH_CHANGE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/senior/pathways","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/academics","navId":"1786727151339-398117","to":"/dashboard/senior/pathways"},"durationMs":599,"event":"NAV_STALL","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/senior/pathways","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/academics","navId":"1786727151339-398117","to":"/dashboard/senior/pathways"},"durationMs":625,"event":"NAV_RENDER","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/senior/pathways","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.3,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b6db8bd3-7e70-41da-8978-48ed5d7f7e98","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:55"}
{"durationMs":80.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d6b18cb0-770c-4ec6-a94c-5db318de1279","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":285.97,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/senior-secondary/pathways/stats","requestId":"68068bd2-73e1-4857-8ca9-00c007224819","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":344.57,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/senior-secondary/pathways","requestId":"a2f75db4-cdd6-4a4f-9fa2-a6abe057d6cf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":537.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.21,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7fb31778-aab7-4e50-8204-0520a67f3a5d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:57","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/senior-secondary/pathways/stats"},"durationMs":789.4,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/senior-secondary/pathways"},"durationMs":798.3,"event":"API_RESPONSE","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:05:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.78,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b6c3dba6-01fd-4927-9ec8-5be7cdb48c4a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:05:58"}
{"durationMs":24.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b36c45f0-ee8f-448c-b9f7-2915d32408e4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:05:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":54,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":429.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:05:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.61,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e1c67f71-7490-481a-a019-793a0519a243","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:05:59","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:06:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":414,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.27,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d9fae09a-8437-4bdb-847f-0ea30dbf1d1b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:00","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/finance/kra-compliance/etims","navId":"1786727163630-686770","text":"eTIMS & PIN Management"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/fee-structures","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.04,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"54f89f36-7bc9-4d0b-86e6-ed53a46b289f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":188.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/kra-compliance/etims","requestId":"5bf52bfb-36a0-4eeb-a807-9ed8c1dd2463","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-structures","href":"/dashboard/finance/kra-compliance/etims","navId":"1786727163630-686770","text":"eTIMS & PIN Management","to":"/dashboard/finance/kra-compliance/etims"},"durationMs":1274,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/kra-compliance/etims","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-structures","navId":"1786727163630-686770","to":"/dashboard/finance/kra-compliance/etims"},"durationMs":1274,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/kra-compliance/etims","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/fee-structures","navId":"1786727163630-686770","to":"/dashboard/finance/kra-compliance/etims"},"durationMs":1331,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/kra-compliance/etims","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/kra-compliance/etims"},"durationMs":667.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.48,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db936e49-1d99-4769-90cc-adabed88f88b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":46.7,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/kra-compliance/pin-tcc","requestId":"9c6d9927-b9a2-4786-a6a5-d3f5903efaaa","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"School PIN & TCC","name":null,"type":null},"durationMs":62,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/kra-compliance/etims","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/kra-compliance/pin-tcc"},"durationMs":490.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"299fb8a0-32fc-48a1-8148-7ad465c95376","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":160,"event":"UI_CLICK","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/senior/pathways","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:06:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.01,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"38ddfcef-be4d-4a3d-9bae-b8a6fde5de4d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":2.99,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"488c51a2-c1b3-435c-9b9a-04b5a3041be8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:06:33","userId":null}
{"data":{"href":"/dashboard/profile","navId":"1786727188611-88293","text":"Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/kra-compliance/etims","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/kra-compliance/etims","href":"/dashboard/profile","navId":"1786727188611-88293","text":"Profile","to":"/dashboard/profile"},"durationMs":885,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/kra-compliance/etims","navId":"1786727188611-88293","to":"/dashboard/profile"},"durationMs":885,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9fb57aef-3432-417f-9757-c0728da00ee1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:33","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/finance/kra-compliance/etims","navId":"1786727188611-88293","to":"/dashboard/profile"},"durationMs":1149,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":651.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.67,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"526266cc-d631-4671-b69e-4ae56c9e0dbd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:34","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.67,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"df9db3c0-85c4-4d15-a12f-0a9c1210f3b1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:06:35","userId":null}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":558.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a6e8e4ff-18da-47be-8874-87eb1c821972","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.63,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/me","requestId":"0c916e7d-c71f-421d-b123-a59a51deb1bf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:06:37","userId":null}
{"data":{"method":"GET","status":404,"url":"/auth/me"},"durationMs":544.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1ba0720a-2086-4b0d-8d82-254c2348099f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":"radix-:rfc:-trigger-security","label":"Security","name":null,"type":"button"},"durationMs":12,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"17b164d8-ca91-4c9d-aba9-3068c33955a9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:06:47"}
{"durationMs":32.82,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b5d20de5-10d3-435f-b5b0-847025d18895","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:06:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":552.6,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:06:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.94,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"84903d72-24a7-48ee-b7e9-221a2988cd82","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:06:49"}
{"durationMs":23.71,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a34a86cf-97da-481f-a621-94eda9a9c646","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:06:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":565.6,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:06:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.33,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c8bd9f0d-3220-4b87-82ab-5328623669cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/settings","navId":"1786727207065-802000","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/profile","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/profile","href":"/dashboard/settings","navId":"1786727207065-802000","text":"Settings","to":"/dashboard/settings"},"durationMs":701,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/profile","navId":"1786727207065-802000","to":"/dashboard/settings"},"durationMs":701,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/profile","navId":"1786727207065-802000","to":"/dashboard/settings"},"durationMs":762,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:06:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.97,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e1447f25-8ac2-48f4-a2e0-9441e88ab795","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:51","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:06:51"}
{"durationMs":18.19,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"82469af8-9f2a-4ffb-a1e5-cc9044204694","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:06:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":665.3,"event":"API_ERROR","ip":"105.160.63.109","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 20:06:53","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":28.81,"ip":"105.160.63.109","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2db8cf33-7c01-4559-a91a-07ac81ced9b7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:06:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:06:58"}
{"durationMs":34.81,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"861ef890-2c18-42f0-a1f1-30fc664b12aa","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:06:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:07:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:01"}
{"durationMs":32.98,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ed9ce9ec-ec17-44fc-8ea4-902c116d7118","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:01","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":47.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"99655cac-0325-48ef-b50f-f3d2c306020e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:02","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":51.47,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs?page=1&limit=30","requestId":"0004d764-f808-44c9-bcb6-a2151c58c5ec","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:02","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":780.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs/stats"},"durationMs":1010.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs"},"durationMs":1239.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.92,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7d1e0827-c6fd-4ebe-8b0e-03c2153c790f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:03","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:03"}
{"durationMs":18.2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"8dbd7789-be86-4828-9034-41d93b589382","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:03","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":714.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.33,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c08a81bc-4d2b-4735-a39f-e0346dd05f85","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:06"}
{"durationMs":30.12,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9b6d748d-719c-44d9-abb5-beeb928153ae","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":491.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.81,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a83ae834-99a2-4fd8-8030-db088813f9cb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:32"}
{"durationMs":38.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9175caff-ec62-47e3-8186-0bbcd6ee5546","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":550.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.44,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d3388e1e-9f32-4405-8292-cdc046625ab6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:34","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:34"}
{"durationMs":29.48,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d7a20c0f-df60-402d-b1f9-456ad10fbc8c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:34","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":494.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings/school","navId":"1786727251501-562132","text":"School"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5b17c246-1a68-4956-8c7b-b80b3ee7c406","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":46,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"c5caee13-cc0a-4a41-b0ca-ecd4d3ca23f0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:07:36"}
{"durationMs":25.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b2ac43f9-3dc5-4187-b38b-c68887cef7b8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:07:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","href":"/dashboard/settings/school","navId":"1786727251501-562132","text":"School","to":"/dashboard/settings/school"},"durationMs":961,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","navId":"1786727251501-562132","to":"/dashboard/settings/school"},"durationMs":961,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","navId":"1786727251501-562132","to":"/dashboard/settings/school"},"durationMs":1027,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":520.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":475.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.98,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d8aa884d-92d8-4d83-a80b-e19e3a40c4bd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:07:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:08:00"}
{"data":{"id":null,"label":"Settings","name":null,"type":null},"durationMs":75,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":35.99,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c1be75d8-8417-42de-9a73-c52dc8c27f4e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings","navId":"1786727305900-774523","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/school","href":"/dashboard/settings","navId":"1786727305900-774523","text":"Settings","to":"/dashboard/settings"},"durationMs":347,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/school","navId":"1786727305900-774523","to":"/dashboard/settings"},"durationMs":522,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":42.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9c325ad8-a3da-44ad-b678-4a40d7bc32da","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:08:37"}
{"durationMs":31.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d7b5c04d-b8ad-4c13-b855-cb0ec14a506f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":524.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.17,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7dd471a9-a547-48d5-a32a-239a81e5e2c3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:38","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:08:38"}
{"durationMs":18.76,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d4af59d6-5bab-43e4-be08-eeea91b1396d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:38","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":554.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"87032cca-6e17-4fd7-9626-0f3f22f0a594","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:40","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:08:41"}
{"durationMs":22.09,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"744a9b72-c3cc-49ee-af7a-86fe0b1854fd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:41","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":509.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.31,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"faa0fb5a-6539-4727-b56c-e89accd14fba","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:42","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:08:45"}
{"durationMs":25.18,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"8309acaa-d2a8-4dab-9baa-586edac13b85","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":66.96,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"09d785ec-8be0-4c21-8755-cb1f3abe8ca3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:08:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.69,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"f9d90b78-3e40-4281-8b5d-d006d5dd5c98","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:08:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"211d59f0-4e2d-41dd-a45a-9a5b8a750150","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:08:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/communication/notifications","navId":"1786727320428-975662","text":null},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","href":"/dashboard/communication/notifications","navId":"1786727320428-975662","text":null,"to":"/dashboard/communication/notifications"},"durationMs":775,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","navId":"1786727320428-975662","to":"/dashboard/communication/notifications"},"durationMs":775,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.49,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3319c217-98e6-4e48-bd8e-6009da2e5416","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:08:46"}
{"durationMs":26.34,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"e20aac34-eac2-42a0-8c4d-2f96e3277dff","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:46","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings","navId":"1786727320428-975662","to":"/dashboard/communication/notifications"},"durationMs":965,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":540.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":776.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":909.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1044.4,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.68,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"87af0084-5777-4c2c-b9d2-ccd5a851672a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:47","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":461.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.28,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"06f28a98-caf6-4d48-ae78-37fec05db2e3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:48","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:08:49"}
{"durationMs":21.35,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"fad023cf-ee21-45ec-b57d-fdf29b4411ac","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:08:49","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":492.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:08:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"33c44260-863f-4101-9da2-318e3d5d3b67","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:08:50","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:09:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:09"}
{"durationMs":27.26,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"329b77aa-e3c7-457e-8fe0-977dd42a1194","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:09:09"}
{"durationMs":31.26,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"f33bc7fe-c67f-4c42-a40a-5ae3f0700980","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":67.04,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"1b769e85-69fd-4ca6-946c-48f618422eee","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:09:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"33c9857e-9252-40e8-9262-1d7635a7c664","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:09:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.73,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"6c186e4f-b5f6-4c93-8b89-210efcca6ce4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:09:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":515.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":610.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":758.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":829.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":909.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1b61712f-ce44-4c87-b22f-84ba578aecc3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:11"}
{"durationMs":24.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7ac8bae8-5ef2-4cda-9ab3-a5785f5962b1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:09:11"}
{"durationMs":20.88,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"d7ecc98e-674f-4eab-8b1e-431da23a3c61","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":115,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:09:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.08,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f7655d69-f5a6-4b7b-808f-cf89ec30c531","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:11","userId":null}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":442.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":425.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings/payment-gateway","navId":"1786727348135-553400","text":"Fix M-Pesa"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.16,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1f984679-e68f-425e-bc7d-424362232096","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":42.72,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"e29bdc30-33c0-487f-9b4e-60db487cd17b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:09:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","href":"/dashboard/settings/payment-gateway","navId":"1786727348135-553400","text":"Fix M-Pesa","to":"/dashboard/settings/payment-gateway"},"durationMs":502,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","navId":"1786727348135-553400","to":"/dashboard/settings/payment-gateway"},"durationMs":502,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","navId":"1786727348135-553400","to":"/dashboard/settings/payment-gateway"},"durationMs":586,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":446.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":31.81,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"933e3823-0717-49b4-833c-090a4077fd16","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:13"}
{"durationMs":110.88,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9210ec80-cd23-46ce-b9d8-20362493fb30","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":508,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0d808f6d-233e-4522-bcaa-a13dca5b1207","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Switch to Production","name":null,"type":null},"durationMs":27,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.14,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f1a4f8fc-86b0-4311-b1c9-82ae0805b853","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":"Integrations & Bank Gateway5","name":null,"type":null},"durationMs":95,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:09:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.03,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"201430e8-6709-4d11-b386-44de5a9dbaa0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:26","userId":null}
{"data":{"href":"/dashboard/settings","navId":"1786727378580-408813","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/payment-gateway","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","href":"/dashboard/settings","navId":"1786727378580-408813","text":"Settings","to":"/dashboard/settings"},"durationMs":564,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","navId":"1786727378580-408813","to":"/dashboard/settings"},"durationMs":564,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/payment-gateway","navId":"1786727378580-408813","to":"/dashboard/settings"},"durationMs":608,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":44.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a327a343-cf6d-4a03-bdc9-0cdaff7803f8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:52"}
{"durationMs":32.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"13e29d19-5a58-455a-823f-dec294626a2d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":48.04,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"b50dc411-aef2-46a0-ba48-cbf5635c345c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:52","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":498.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":623,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.52,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"acd3b7ae-b051-42af-9635-1990381140ee","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:54","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:54"}
{"durationMs":28.2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e0a784f7-618b-424d-92b2-e20e5c9c9245","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:54","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":465.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.31,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e059de28-9083-4358-b22b-be838223ea32","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:09:56"}
{"durationMs":16.71,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"516357ce-cf04-4740-b678-0c22456a086b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:09:56","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":465.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:09:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.36,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2e5d12ef-fe90-44ca-8b00-6705678de1c4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:09:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":"radix-:r6:-trigger-settings","label":"Settings","name":null,"type":"button"},"durationMs":46,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7084b519-e3cb-4045-a291-b62720063c4f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:00","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:10:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e925eec9-ffb4-4812-9ef1-8f32645b9ffd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:10:02","userId":null}
{"data":{"id":"radix-:r6:-trigger-branding","label":"Branding","name":null,"type":"button"},"durationMs":60,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.27,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fba92ce3-d47a-4801-b4c5-f153e4bcae5c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":"radix-:r6:-trigger-contact","label":"Contact","name":null,"type":"button"},"durationMs":16,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.18,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1120a0bb-3db8-41a0-902d-b0cee32ff831","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:21","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":"radix-:r6:-trigger-basic","label":"Basic Info","name":null,"type":"button"},"durationMs":26,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.64,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fe18a110-93b2-4264-9f13-fa875a7226bf","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":"radix-:r6:-trigger-basic","label":"Basic Info","name":null,"type":"button"},"durationMs":12,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.9,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c76a97d1-5a64-4975-96c3-880ee28d5e53","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:24","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":205,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.83,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"03d0c4a6-6842-4e99-925b-cc1b833562d3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/clocking","navId":"1786727438552-400052","text":"Clocking"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/school","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.24,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"667ccd10-2901-4734-82d4-aeb7f43a4e15","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":188.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/staff-log?page=1&limit=20&date=2026-08-14","requestId":"69fc47db-191c-42f3-98ea-d5fce0915fac","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":216.2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/daily-stats?date=2026-08-14","requestId":"89ee262d-259b-4782-8fa5-9671c4150ff4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:44","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/school","href":"/dashboard/clocking","navId":"1786727438552-400052","text":"Clocking","to":"/dashboard/clocking"},"durationMs":1079,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/clocking","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/school","navId":"1786727438552-400052","to":"/dashboard/clocking"},"durationMs":1079,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/clocking","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/school","navId":"1786727438552-400052","to":"/dashboard/clocking"},"durationMs":1329,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/clocking","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":25.98,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6ed8400c-2ce0-492e-a0d2-72357f33d8ef","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:44","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/clocking/staff-log"},"durationMs":776.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/clocking/daily-stats"},"durationMs":1037.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.15,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f39ceb2f-3c9e-4b94-8120-5d6b84fc035f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:45","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:10:57"}
{"durationMs":45.97,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ab3e30ca-6357-4ab8-a5ae-a9b34916ebbf","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:10:57","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":588.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:10:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.35,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"38a2c7ba-4e5a-48bc-b877-45b2711d2312","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:10:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:10:58"}
{"durationMs":32.17,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"0a756080-3c03-45c0-885e-816878cac6c3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:10:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":613.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"679e473c-b074-412c-ad86-712eb091695c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:00","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:11:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:11:01"}
{"durationMs":23.24,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"257d82e1-5be1-4932-a9d0-ef847e927531","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:11:01","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":525.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.96,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db4e2a58-12ee-4ec0-ac1a-a31dcb67aace","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:02","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":228,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.16,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"64c8ef9e-d90a-4282-99c7-29b3082c1298","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard","navId":"1786727465507-89862","text":"Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/clocking","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/clocking","href":"/dashboard","navId":"1786727465507-89862","text":"Dashboard","to":"/dashboard"},"durationMs":392,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/clocking","navId":"1786727465507-89862","to":"/dashboard"},"durationMs":469,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.79,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4aedfa85-c992-4782-a310-04b26bd77317","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":147.42,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"41e0979a-6ec8-4958-a7e4-15d056377d6d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":214.55,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"8349f6b9-307f-49ad-802d-9177c44814ba","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":207.44,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"aa3c3a96-7332-4d61-9063-7be2c85f057f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":40.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"ce3ca510-222d-48c5-b59d-b208afcaecb0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":58.39,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"b99ab29e-5a51-450e-b350-a64c8590e48e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":38.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"c7ccab06-f8d2-438f-a74d-2157cebd5db8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":27.39,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"cc352666-8c71-4900-8d7c-83fde0092d74","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.31,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"f8a5a535-8d47-4df4-97ee-59cbce5d76b1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":816.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":1039.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1634,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1641.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1645.9,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1650.8,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1658.3,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1661.7,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"feb800da-3a45-427c-8e9b-078051142ffb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.77,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"5f35bb46-9991-48d0-98ba-e13577da6112","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:11:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.1,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs?page=1&limit=30","requestId":"110b208e-a037-4e0b-ba1c-7affd82170f4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:11:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings/audit","navId":"1786727473521-566496","text":"View All"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/settings/audit","navId":"1786727473521-566496","text":"View All","to":"/dashboard/settings/audit"},"durationMs":492,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/audit","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786727473521-566496","to":"/dashboard/settings/audit"},"durationMs":814,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/audit","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.85,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d5401bbe-de2b-4237-9d54-141f83c07ef5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs/stats"},"durationMs":593.6,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs"},"durationMs":599,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:11:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.73,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f11d4e78-4c76-423a-908a-756f512f65f6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:11:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:12:00"}
{"durationMs":2.35,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"e695e943-7803-42a3-81de-0e96ccc2aa59","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:12:54","userId":null}
{"durationMs":1.94,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"4e1c6779-8a86-403d-866b-b9c18c62f1be","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:12:54","userId":null}
{"durationMs":2.14,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"2a83df4a-ac17-49c2-b206-1d19b72576d2","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:12:54","userId":null}
{"durationMs":3.42,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"12845f28-f05a-4c38-81c3-861e9886d0e4","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:12:54","userId":null}
{"data":{"href":"/dashboard/communication/notifications","navId":"1786727559406-519263","text":null},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/audit","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:12:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"43ed2acc-d767-4816-9e3f-4745e5e2b49e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:54","userId":null}
{"durationMs":55.07,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"ad7ebea2-feda-45ef-ac93-4021e685068c","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:54","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:12:55"}
{"durationMs":118.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"d66c6b84-9cf0-499a-87fb-8e0defb75da3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:12:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":127.36,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"61683ec3-5f80-4b75-aa08-13391a4ab2a2","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:12:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":117.33,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"3938f625-83db-403b-84d8-ff19e9a75c61","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:12:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":129.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"c838073b-e53b-4c27-9103-4859ee2fca28","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:12:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/audit","href":"/dashboard/communication/notifications","navId":"1786727559406-519263","text":null,"to":"/dashboard/communication/notifications"},"durationMs":947,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/audit","navId":"1786727559406-519263","to":"/dashboard/communication/notifications"},"durationMs":947,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/audit","navId":"1786727559406-519263","to":"/dashboard/communication/notifications"},"durationMs":1128,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/communications/whatsapp/status"},"durationMs":10595.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/communications/sms/settings"},"durationMs":10610.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/school/mpesa-config"},"durationMs":10995.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications"},"durationMs":11000.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.11,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ec48667a-ea9d-471a-b1d3-5c1be4be35ef","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:55","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":479.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":532,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":535.2,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":540.1,"event":"API_RESPONSE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"96b06170-8240-44e3-85b0-ee99e1e12851","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:56","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async Promise.all (index 0)\n    at async Object.listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.service.js:444:34)\n    at async listNotifications (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:72:18)","service":"cbc-sms","timestamp":"2026-08-14 20:12:56"}
{"durationMs":24.5,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications?limit=200","requestId":"177fe6b5-4b5c-4180-9e20-57e596d1cc90","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:12:56","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications"},"durationMs":346.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings","navId":"1786727573979-242880","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/communication/notifications","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":27.02,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e3967dc6-2fba-4242-9488-58d4ef586840","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:58","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","href":"/dashboard/settings","navId":"1786727573979-242880","text":"Settings","to":"/dashboard/settings"},"durationMs":609,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","navId":"1786727573979-242880","to":"/dashboard/settings"},"durationMs":609,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/communication/notifications","navId":"1786727573979-242880","to":"/dashboard/settings"},"durationMs":692,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:12:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.06,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"13071c6d-02c1-4b5f-b096-7131d4611b48","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:12:59","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:13:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:01"}
{"durationMs":23.62,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5a5a58d1-e1b0-4212-ad23-6f0bca7139d9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:01","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":354.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"183ae455-b974-422e-b808-65f807520f87","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:03","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:03"}
{"durationMs":24.43,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e75f8eaf-75dc-4d24-9f6e-3efa093ab488","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:03","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":346.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.29,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6bec9391-5071-42db-82be-049333fb3ede","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:04","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:05"}
{"durationMs":23.46,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"01e13076-a22f-42b1-bad1-4acdd726736c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":333.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"59102f7f-b620-410d-9fd5-8a23754e3d50","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:06","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:10"}
{"durationMs":38.74,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"19a12068-1dde-4a78-95ff-9babf773094f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Object.listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.service.js:83:25)\n    at async listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.controller.js:6:43)","service":"cbc-sms","timestamp":"2026-08-14 20:13:10"}
{"durationMs":65.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/users?page=1&limit=20","requestId":"3c17ee7c-64de-40ac-9d8f-cba44d2b6502","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:10","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":416,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/users"},"durationMs":444.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":27.6,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04979c0d-2f7d-4bc9-b7ec-76b4b4da3ef9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:11"}
{"durationMs":31.3,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2e452dad-c7a2-497b-8805-bf4fc5b64299","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Object.listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.service.js:83:25)\n    at async listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.controller.js:6:43)","service":"cbc-sms","timestamp":"2026-08-14 20:13:11"}
{"durationMs":41.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/users?page=1&limit=20","requestId":"ff04aa18-b926-4a83-98ae-e0dd75b670de","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":391.2,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/users"},"durationMs":382.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.12,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f451c1bf-acd8-401b-bac7-e5e2ffc61614","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:13:13"}
{"durationMs":37.34,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b9cb9d34-0b82-4839-b2d1-869e7736d5ce","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Object.listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.service.js:83:25)\n    at async listUsers (/home/aereuxky/cbcsms-backend/src/modules/users/users.controller.js:6:43)","service":"cbc-sms","timestamp":"2026-08-14 20:13:13"}
{"durationMs":32.03,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/users?page=1&limit=20","requestId":"81a28236-2cb6-4d8b-b29f-888434d068db","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:13:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":367.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/users"},"durationMs":381.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.47,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"99814cda-0ff7-4b5b-b931-00ed0ca7b26b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:15","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":243,"event":"UI_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/settings/users","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.78,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3a119bc4-f421-4ef5-9ff8-13b004ddc7c5","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:20","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/quickstart","requestId":"76aa7585-8c74-46f2-988b-73aa09a50ee4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:23","userId":null}
{"durationMs":2.25,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/categories","requestId":"7c515c84-dd01-4ba5-b2f6-c8a814bc2c1c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:23","userId":null}
{"data":{"href":"/dashboard/help","navId":"1786727599088-458829","text":"Help Center"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/settings/users","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/users","href":"/dashboard/help","navId":"1786727599088-458829","text":"Help Center","to":"/dashboard/help"},"durationMs":730,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/help","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/users","navId":"1786727599088-458829","to":"/dashboard/help"},"durationMs":730,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/help","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/settings/users","navId":"1786727599088-458829","to":"/dashboard/help"},"durationMs":775,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/help","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.6,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"59b3bbb4-8582-4347-ac5a-9fea091f4cd1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/quickstart"},"durationMs":315.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/categories"},"durationMs":335,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":14.58,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c99b55b1-e86a-42ba-b7f8-08c0713ba40e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:24","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/quickstart","requestId":"9c3a9e55-b487-4168-a4a2-e7f92ff180e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:24","userId":null}
{"durationMs":1.86,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/categories","requestId":"3c47d2dc-5b07-45bf-a9dd-155be9932236","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:24","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/quickstart"},"durationMs":338.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/categories"},"durationMs":335.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b121f575-5e28-45f1-b16c-b1445045a6e0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:26","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.51,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/quickstart","requestId":"c280e754-7b42-4ccd-81b7-9006032a612c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:27","userId":null}
{"durationMs":1.83,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/categories","requestId":"5957738e-f962-497e-b5d6-a9d82c960384","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:27","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/quickstart"},"durationMs":338,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/categories"},"durationMs":341.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.62,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ced8d57e-ce91-4d42-a8a8-688a0a15e68d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:28","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":3.37,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+che","requestId":"14bd1d3d-d965-47b5-b19c-3378e74d17d7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:34","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":335.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.11,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d2d6b55a-41a6-4ca4-9e1c-2032b911b2f0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.27,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+chen","requestId":"ba2ebfd8-9b91-40bf-8e14-8c2956bea9f1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:36","userId":null}
{"durationMs":2.38,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+chenge","requestId":"b842a513-f3b6-401a-9407-a8255de50ca1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:36","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":340.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":314,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":13.78,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d0677018-8200-410c-99c2-0782983df915","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":3.2,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+","requestId":"dabcb4ed-0420-476d-b683-2efe9c3aff5f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:37","userId":null}
{"durationMs":2.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+","requestId":"7acdf93b-e754-4f3d-97da-ff548019dd15","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:38","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":321.4,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.12,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"abe74004-6600-4547-add1-6e82c1a3a642","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:38","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":3.14,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+s","requestId":"981fdfa1-eea0-487c-9bc9-875a9e5c70fa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:38","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":315.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":313.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.32,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6f936696-0a8f-42b5-8047-03e23b8a4db9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.45,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+s","requestId":"76121688-717c-4b25-9155-e3783cb52cbf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:40","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":319,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.28,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"020e6910-1916-4ad5-a80d-667f81bccebc","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:41","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.42,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name","requestId":"6701d458-e801-40bf-a4dc-ac18634379ac","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:41","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":16,"event":"UI_CLICK","ip":"154.159.237.67","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:13:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.2,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8f387925-0b09-4ea4-84ed-39c0f637a93d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:42","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":320.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":98.22,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6d494fae-0f6b-4d5b-8a96-d2c58ba485cf","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:42","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name","requestId":"e84e5e2a-7939-40eb-a1ad-3db139af5d70","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:42","userId":null}
{"durationMs":734,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"f8d47d76-99ac-449c-a90d-288fc0cfb039","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:42","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":336.1,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.66,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"922c14b0-f42c-4b19-9068-b57c1793c9a4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:44","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.16,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name","requestId":"3a0a9c70-2518-44e1-afc6-08ed6fddd83b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:13:45","userId":null}
{"durationMs":36.93,"ip":"154.159.237.67","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"e124b6bf-8ce9-4729-af21-80380a41ea0e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:45","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":320.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:13:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.93,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6cb6ab2f-77dd-4a81-84df-64943a23564b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:13:46","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:14:00"}
{"durationMs":1.22,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name.....","requestId":"d1255112-b5e7-4837-9a0e-e399bf17b387","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:04","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":354,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.95,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"102a3a5f-367e-4cd6-ab6a-4bf000d5d71c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:05","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.55,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name.....","requestId":"a19d177f-22f5-4f57-a6d5-2c553e79d0e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:06","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":316.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.69,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"040d90a3-ed64-44c3-a9ac-54a1f6e856f8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/help/faq","navId":"1786727643421-461372","text":"FAQs"},"durationMs":null,"event":"NAV_CLICK","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/help","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.48,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"03cd96c8-70da-4bf0-ae2a-3a1192915ac9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":5.13,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/search?q=How+can+I+change+the+school+name.....","requestId":"5805a853-12ac-458e-82de-daddbfd2b53a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:08","userId":null}
{"durationMs":2.59,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/faq","requestId":"276d1a3c-593c-430e-8abb-d8c6368d07bd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:08","userId":null}
{"data":{"from":"/dashboard/help","href":"/dashboard/help/faq","navId":"1786727643421-461372","text":"FAQs","to":"/dashboard/help/faq"},"durationMs":1270,"event":"NAV_PATH_CHANGE","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/help/faq","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/help","navId":"1786727643421-461372","to":"/dashboard/help/faq"},"durationMs":1270,"event":"NAV_STALL","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/help/faq","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/help","navId":"1786727643421-461372","to":"/dashboard/help/faq"},"durationMs":1308,"event":"NAV_RENDER","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/help/faq","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/search"},"durationMs":351.3,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":404,"url":"/help/faq"},"durationMs":323.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.69,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ae87bf71-a484-4ce0-ae08-5fac0083f4cc","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":2.75,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/faq","requestId":"bbd39d72-b792-4f1a-8ce1-eb450da1a404","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:09","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/faq"},"durationMs":333.5,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.89,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6cef3e6e-3f8a-439d-bca8-45f2dbe81026","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":1.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/help/faq","requestId":"a9a51fb3-90b9-4512-9d5b-09332153d954","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:14:12","userId":null}
{"data":{"method":"GET","status":404,"url":"/help/faq"},"durationMs":334.9,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":21.91,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"341c385d-1f58-457d-bdfa-8a09d768ca14","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:14:14"}
{"durationMs":24.4,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c06fc3a4-dff4-418a-8343-169d0d04e4e8","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:14:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":349.7,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.63,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7154e521-0db6-4065-9ad3-f8db33508134","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:15","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:14:15"}
{"durationMs":14.87,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"cad1c327-dc6a-448d-819d-019579955142","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:14:15","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":336.6,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.82,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7abc47c6-f578-42cd-a8be-44c8863354d6","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:16","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:14:18"}
{"durationMs":23.05,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a8d36fbe-23ca-47bd-a99e-c7b1fdae54a3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:14:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":452.8,"event":"API_ERROR","ip":"196.201.218.137","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:14:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.8,"ip":"196.201.218.137","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"132dcd96-24f8-4d9f-9eb6-f43b135f8df1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:14:19","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:15:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bba456d1-72fd-4af6-80e8-aca6499e026c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:18:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:20:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f26cdbb1-fcde-42b7-a0af-2291ea8661a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:23:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":15,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":11,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"77a05bbb-fec0-49a1-83da-a8c0a5dce198","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:26","userId":null}
{"durationMs":644.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/platform/auth/login","requestId":"72d80c25-6dc7-4079-adbb-84ab2a992aee","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:26","userId":null}
{"durationMs":211.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=100","requestId":"c7cd48ad-c5e3-4051-8cdf-3665ff528c21","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:29","userId":null}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/platform/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/login","navId":null,"to":"/platform/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d1597358-e1c7-48d3-bbec-c0d243334b89","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:30","userId":null}
{"durationMs":22.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=200","requestId":"5bf4683c-87b2-4603-b00d-c8b2c3a26aad","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:39","userId":null}
{"data":{"href":"/platform/school-portals","navId":"1786728215760-246974","text":"School Portals"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/dashboard","href":"/platform/school-portals","navId":"1786728215760-246974","text":"School Portals","to":"/platform/school-portals"},"durationMs":431,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/dashboard","navId":"1786728215760-246974","to":"/platform/school-portals"},"durationMs":486,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e2960bff-97a2-4a1b-b6fe-3dc488eedc82","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:39","userId":null}
{"data":{"id":null,"label":"All for Jesus education center Kakamega • No planAdmin","name":null,"type":"button"},"durationMs":4,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"33d45693-ba6d-4e10-b324-a7e7a6605b5b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:45","userId":null}
{"data":{"id":null,"label":"BungomaBungoma • No planAdmin","name":null,"type":"button"},"durationMs":3,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":null,"label":"All for Jesus education center Kakamega • No planAdmin","name":null,"type":"button"},"durationMs":3,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"49905d8b-91c7-4e80-b183-f8422d9caef1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:47","userId":null}
{"durationMs":32.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"99834675-5c68-426e-a601-0b420626d17b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:51","userId":null}
{"data":{"href":"/platform/schools","navId":"1786728228037-750321","text":"Schools (Tenants)"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/school-portals","href":"/platform/schools","navId":"1786728228037-750321","text":"Schools (Tenants)","to":"/platform/schools"},"durationMs":392,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/school-portals","navId":"1786728228037-750321","to":"/platform/schools"},"durationMs":452,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:23:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4b162fca-7eaf-476f-a56a-26685bdf7e0e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:23:51","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:24:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":2,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:24:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","href":null,"navId":null,"text":null,"to":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:24:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","navId":null,"to":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:24:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5faa23f4-fc18-4227-8645-3af0c71216c7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:24:52","userId":null}
{"durationMs":41.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18","requestId":"fc565900-b2a2-48d4-9ab6-11cc632bff02","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:24:52","userId":null}
{"durationMs":61.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/features","requestId":"349b0d27-6b27-49f0-8838-07afec50aa59","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:24:52","userId":null}
{"durationMs":99.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/usage","requestId":"8290f2d9-ca15-4d8b-b2ba-4b856c9f420f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:24:52","userId":null}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:25:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aebf4ba3-49ec-443e-b450-00d8b7b1b703","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:25:01","userId":null}
{"data":{"id":"radix-:rn:-trigger-profile","label":"Profile","name":null,"type":"button"},"durationMs":13,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fb57bdc8-72ce-4ee2-9e88-1e9b2ffa7873","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:19","userId":null}
{"data":{"id":"radix-:rn:-trigger-usage","label":"Usage","name":null,"type":"button"},"durationMs":17,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:21","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"80bed6ba-95c3-44a6-b991-d8ab8f71174c","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:21","userId":null}
{"data":{"id":"radix-:rn:-trigger-billing","label":"Billing","name":null,"type":"button"},"durationMs":3,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":"radix-:rn:-trigger-modules","label":"Modules","name":null,"type":"button"},"durationMs":24,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"801d8318-e805-4819-83f5-b5eb6bd925f4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:22","userId":null}
{"data":{"id":"radix-:rn:-trigger-support","label":"Support","name":null,"type":"button"},"durationMs":6,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":0.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"53bc7355-8e35-4b2a-90ef-48fa79b862c1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:24","userId":null}
{"data":{"id":"radix-:rn:-trigger-modules","label":"Modules","name":null,"type":"button"},"durationMs":18,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7142175a-b37d-4286-8d45-250003e6ecb6","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:25","userId":null}
{"durationMs":77.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/modules","requestId":"6559c06d-578f-4a1f-9794-a234ff01e4b1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:28","userId":null}
{"durationMs":30.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/features","requestId":"5af94d19-ca5c-497d-9b3d-c045880d5fdb","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:29","userId":null}
{"durationMs":36.26,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18","requestId":"90c94c3e-afd3-4ede-93f9-2afc5961eaa3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:29","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":10,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3e4e7bde-270a-496d-b00c-66ca339d63c2","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:29","userId":null}
{"data":{"href":"/platform/modules","navId":"1786728333419-11174","text":"Module Access"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.32,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"12d6bb5d-a5d5-46b3-b286-d6408233a225","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:37","userId":null}
{"durationMs":26.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/modules","requestId":"9dd6594a-2658-4997-b62f-16ea030b4b85","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:37","userId":null}
{"durationMs":25.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=100","requestId":"4965d1aa-6dd4-4c55-9957-ced76c91893f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:37","userId":null}
{"data":{"from":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","href":"/platform/modules","navId":"1786728333419-11174","text":"Module Access","to":"/platform/modules"},"durationMs":1563,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","navId":"1786728333419-11174","to":"/platform/modules"},"durationMs":1563,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","navId":"1786728333419-11174","to":"/platform/modules"},"durationMs":1581,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.76,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42e650ac-2563-468a-b3d6-001e19df4488","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:38","userId":null}
{"durationMs":17.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/features","requestId":"afec84af-7222-4ceb-869c-b97c846348d9","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:25:40","userId":null}
{"durationMs":38.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"8b4b1ac0-014c-4de3-851b-b77bbc97795b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:58","userId":null}
{"data":{"href":"/platform/schools","navId":"1786728355384-321246","text":"Schools (Tenants)"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:59","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","href":"/platform/schools","navId":"1786728355384-321246","text":"Schools (Tenants)","to":"/platform/schools"},"durationMs":34,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:59","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","navId":"1786728355384-321246","to":"/platform/schools"},"durationMs":78,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:25:59","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.67,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4f0ef337-1c98-4051-9f13-006a3d7ab357","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:25:59","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:26:00"}
{"durationMs":201.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=200","requestId":"472e8196-e539-40e7-939b-ddccb8051351","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:03","userId":null}
{"data":{"href":"/platform/school-portals","navId":"1786728360182-345472","text":"School Portals"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:03","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","href":"/platform/school-portals","navId":"1786728360182-345472","text":"School Portals","to":"/platform/school-portals"},"durationMs":13,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:03","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","navId":"1786728360182-345472","to":"/platform/school-portals"},"durationMs":67,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:03","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aefd2db8-b82d-4f5b-b1ff-8a579993f64d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:03","userId":null}
{"data":{"id":null,"label":"All for Jesus education center Kakamega • No planAdmin","name":null,"type":"button"},"durationMs":8,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"072accc8-23f7-4cc7-be00-4a4e013d55c1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:07","userId":null}
{"data":{"id":null,"label":"All for Jesus education center Kakamega • No planAdmin","name":null,"type":"button"},"durationMs":1,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6a59ce2a-7f97-4300-9848-5f7a602f6c02","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:09","userId":null}
{"durationMs":668.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/impersonate","requestId":"a95428a1-7fe5-4793-9137-b8e71777e6f5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:11","userId":null}
{"data":{"id":null,"label":"Open Dashboard","name":null,"type":null},"durationMs":2,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:26:11","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"253c9f00-13a4-4daf-9f9a-8b83d86a97de","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:11","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:26:13"}
{"durationMs":67.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c47ccca0-91c4-4d42-9e36-52e8ee742c4f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:26:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":504.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"9798b70d-fe29-4fe3-ac3e-528fc65bddac","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":570.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"69958d53-d3c3-42c5-8bf2-b8591406f4dc","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":128.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"43364ba8-9ec0-4249-9ce4-1991b9be2c74","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":141.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"a67f664f-cebf-4e86-bc07-1a85be1624ff","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":69.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"03526aea-172f-419d-a283-6078ad3ecaaf","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":629.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"eb7ea607-4ac8-424e-971a-ea9221f9a61c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":590.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"5f4cce85-54aa-44a0-a743-f627aeeb3415","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":152.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"024464ab-dad8-4529-83b9-78bbf3e483af","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":479.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:14","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7d02bcd3-c2bd-43f6-b110-3dbc41a0cc76","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:26:14"}
{"durationMs":25.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c75cf11e-5c94-4f8f-a73f-df5ac1391541","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:26:14","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":996.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":1008.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1083.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1088.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":1104.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1110.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1110.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1110.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":482,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3a407e48-bd3f-406d-a949-add35bff8a13","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:15","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":6,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:17","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":14.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6781e51c-9bf1-436f-bb37-77be46844273","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:17","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:26:17"}
{"durationMs":23.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"96edf122-e51d-45b5-8fcc-c572961d434c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:26:17","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":505.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:18","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"70c0a67f-0850-4b64-adf8-041867149d55","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:18","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/students","navId":"1786728378316-76356","text":"Students"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:21","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":14.67,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6e17d798-588e-449e-ba58-22ceaefdc57c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:21","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":73.76,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students/stats","requestId":"f14c05c4-c64e-463f-aab0-2ce58661e25d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":63.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?page=1&limit=10","requestId":"13c0bb8b-53db-4f46-9c9b-f20313abdf7f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":73.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"13a8c3e4-935e-407c-a496-e724065ef2b1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:22","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":"/dashboard/students","navId":"1786728378316-76356","text":"Students","to":"/dashboard/students"},"durationMs":1669,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786728378316-76356","to":"/dashboard/students"},"durationMs":1669,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","navId":"1786728378316-76356","to":"/dashboard/students"},"durationMs":1757,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/academics","navId":"1786728380408-794048","text":"Grades & Streams"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/students","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/students/stats"},"durationMs":497.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":540.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":541,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c3aacec3-4ad4-4a6f-9d6e-d70113982ad4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"3d6e6740-b7ea-4a2c-9937-e85b31eb02cd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:23","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","href":"/dashboard/academics","navId":"1786728380408-794048","text":"Grades & Streams","to":"/dashboard/academics"},"durationMs":474,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/academics","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/students","navId":"1786728380408-794048","to":"/dashboard/academics"},"durationMs":509,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/academics","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":493.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":18.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fb76dadd-d127-4384-a1a0-5ae1b2b3cd84","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:24","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":35.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"b4d72863-1d0b-43d5-a2af-b6f8f5ac6a20","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":72.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/departments/list?type=academic","requestId":"5bd43cfa-c532-4965-8d8e-93a5e71b3655","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":35.69,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/subjects","requestId":"825da07c-943a-4862-b105-a44b3178b4b9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":55.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/teacher-assignments","requestId":"beb62f88-e70f-4c7a-bacf-7b6626d4a59f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:25","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/academics/subjects","navId":"1786728382324-458013","text":"Subjects"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/academics","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics","href":"/dashboard/academics/subjects","navId":"1786728382324-458013","text":"Subjects","to":"/dashboard/academics/subjects"},"durationMs":441,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/academics/subjects","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics","navId":"1786728382324-458013","to":"/dashboard/academics/subjects"},"durationMs":483,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/academics/subjects","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":19.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"614bef64-081d-4cd4-aa26-55132c622712","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:26","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":422.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff/departments/list"},"durationMs":442.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/subjects"},"durationMs":443,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/teacher-assignments"},"durationMs":498.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":14.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d5e3c46c-3661-48a5-b958-3cba47b73221","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:26","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":199.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/events?startDate=2026-07-24T21:00:00.000Z&endDate=2026-09-07T20:59:59.999Z","requestId":"1d887e1a-d429-479c-a2e9-be6123c11d49","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":205.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/summary","requestId":"2bb62276-d951-43dd-8be7-115ddd21b7cb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":227.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/holidays?year=2026","requestId":"c76811d3-c856-4d43-a464-1cabf223ee29","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/academic/calendar","navId":"1786728384238-850185","text":"Calendar"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/academics/subjects","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics/subjects","href":"/dashboard/academic/calendar","navId":"1786728384238-850185","text":"Calendar","to":"/dashboard/academic/calendar"},"durationMs":425,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/academic/calendar","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics/subjects","navId":"1786728384238-850185","to":"/dashboard/academic/calendar"},"durationMs":444,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/academic/calendar","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"efd4522c-2e47-41e6-a102-9432407bf8ea","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:27","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/calendar/events"},"durationMs":692.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/calendar/summary"},"durationMs":718,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/calendar/holidays"},"durationMs":750,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6373007f-01ec-4964-8cf5-e939ca00f28a","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:29","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":34.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"e2bd118f-0e7e-447e-af29-4447f919ad70","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"1603317f-1fd8-4779-8599-48dfe2db8968","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/attendance","navId":"1786728386748-58278","text":"Attendance"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/academic/calendar","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academic/calendar","href":"/dashboard/attendance","navId":"1786728386748-58278","text":"Attendance","to":"/dashboard/attendance"},"durationMs":411,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/attendance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academic/calendar","navId":"1786728386748-58278","to":"/dashboard/attendance"},"durationMs":441,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/attendance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cf3875e8-4942-425d-aef2-37d3e21cd418","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:30","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":535.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":535.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":16.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"32c10c3f-8e3c-47ae-b7e3-9c9e1f016bb3","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:31","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/academics/cbc-grades","navId":"1786728389001-754641","text":"CBC Grades & Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/attendance","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"30b9a85c-73f2-459b-af88-f6258032fe7b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":30.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"e607d396-f91e-4261-b13d-0d9d89c1a74c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"9289713a-40a9-4126-99b6-5c27b8f073c1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":65.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms","requestId":"224e6ffd-ee0f-4350-997a-66608c5b6513","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":76.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"836c1daf-338a-45d4-80bd-2e02c4e23685","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":400,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":45.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"090f6316-9697-41b6-b97b-4a87cdd9e856","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":72.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students","requestId":"b9474b07-2e9f-4479-806a-39b33a361241","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:32","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/attendance","href":"/dashboard/academics/cbc-grades","navId":"1786728389001-754641","text":"CBC Grades & Results","to":"/dashboard/academics/cbc-grades"},"durationMs":826,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/academics/cbc-grades","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/attendance","navId":"1786728389001-754641","to":"/dashboard/academics/cbc-grades"},"durationMs":826,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/academics/cbc-grades","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/attendance","navId":"1786728389001-754641","to":"/dashboard/academics/cbc-grades"},"durationMs":852,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/academics/cbc-grades","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":483.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":497.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/academic/terms"},"durationMs":522,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":400,"url":"/teacher/my-streams"},"durationMs":549.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":562.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":577.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ea2c4220-4af2-440a-93e3-0005a8cb560d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:33","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"575b110e-3f6b-454a-b750-9f5f177a6a99","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":400,"timestamp":"2026-08-14 20:26:34","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":61.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/stats","requestId":"80bb68c0-0747-47bc-8cab-df9bd7ad3960","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":72.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff?page=1&limit=20&isTeacher=true","requestId":"63cf7f0a-3c52-4101-a13d-2603ba5b655f","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":400,"url":"/teacher/my-streams"},"durationMs":455.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/teachers","navId":"1786728392054-511678","text":"Teachers"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/academics/cbc-grades","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics/cbc-grades","href":"/dashboard/teachers","navId":"1786728392054-511678","text":"Teachers","to":"/dashboard/teachers"},"durationMs":420,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/academics/cbc-grades","navId":"1786728392054-511678","to":"/dashboard/teachers"},"durationMs":490,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":15.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7436c2ca-d1df-4852-b284-fb3260835261","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:35","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":54.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff?page=1&limit=20","requestId":"650231d4-650d-4d14-ad55-b7725149c9d9","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":65.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/stats","requestId":"22d987e0-f1b3-4714-946b-e3035e5471ba","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff/stats"},"durationMs":475.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff"},"durationMs":485.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/staff","navId":"1786728393158-611691","text":"Staff"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","href":"/dashboard/staff","navId":"1786728393158-611691","text":"Staff","to":"/dashboard/staff"},"durationMs":440,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/staff","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","navId":"1786728393158-611691","to":"/dashboard/staff"},"durationMs":497,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/staff","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"32f1dfb5-5fdd-469e-b57e-735a913a46cb","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff"},"durationMs":487.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff/stats"},"durationMs":504.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0ee76696-57c0-4539-ad5b-817e34ede619","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:37","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":59.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff?page=1&limit=20&isTeacher=true","requestId":"b6047328-b307-4737-968f-661d803dc97e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":50.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/stats","requestId":"c83acef2-8874-4c43-928b-16459c327b56","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:39","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/teachers","navId":"1786728396976-629045","text":"Teachers"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/staff","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/staff","href":"/dashboard/teachers","navId":"1786728396976-629045","text":"Teachers","to":"/dashboard/teachers"},"durationMs":21,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/staff","navId":"1786728396976-629045","to":"/dashboard/teachers"},"durationMs":61,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff"},"durationMs":498.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/staff/stats"},"durationMs":499.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":24.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ca495dc4-d13f-49f0-b121-739747f2ef4e","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:40","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":29.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"e2296900-fdb1-448c-b0c4-75ac622754c0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":26.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs?page=1&limit=30","requestId":"194ca15f-304d-47f6-9f25-680e7cead9cc","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"href":"/dashboard/settings/audit","navId":"1786728399902-87212","text":"Audit Logs"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teachers","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","href":"/dashboard/settings/audit","navId":"1786728399902-87212","text":"Audit Logs","to":"/dashboard/settings/audit"},"durationMs":416,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/audit","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard/teachers","navId":"1786728399902-87212","to":"/dashboard/settings/audit"},"durationMs":496,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/audit","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7ffdfd24-1d0e-43d6-a37b-b3dfdfcf61dd","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:43","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs/stats"},"durationMs":477.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:44","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs"},"durationMs":477.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:26:44","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":22.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b8f49480-87d5-4d85-9da9-44903399e582","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:26:44","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 20:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:30:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e9849a93-529f-4d57-a640-6a62b0e70ede","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:30:02","userId":null}
{"durationMs":52.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"557efd14-c957-4191-8e56-3bc65e42d60d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:30:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/audit-logs/stats"},"durationMs":4808.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:30:16","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":20.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"281d6723-2bdb-4a4d-be65-aadd1768c927","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:30:16","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:35:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e99d11c-ac1d-47ae-82da-3ca2a722beb6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:35:01","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:35:02"}
{"durationMs":52.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"1ff82d48-abd8-4565-ab70-bff886738234","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:35:02","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":3077.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:35:13","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":23.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a2d01e62-6f50-4ea3-84dc-a554ea3aa2da","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:35:13","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:40:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b1fa8d6f-3de1-4192-8df7-7129f11f8d0e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:41:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:45:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6049a43f-94bb-4b77-a123-90f2da767c31","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:49:00"}
{"durationMs":4.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"960a7c9b-2777-4877-8be7-186f871eb09f","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":1.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"351a9382-9bb4-4e57-90a6-b5a9428354cf","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":1.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"0b886969-4846-4ff1-af15-2e17fd5f8b19","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":3.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"e1b0df32-c2ba-40b6-8e8a-a6fb18d97ec6","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":2.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"faf57673-e8b7-4048-b3d2-6877511b6868","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":1.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"6cc5682e-e3e4-4d8f-9fed-c40f14feb48d","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"fe9fb529-6cda-4cae-85ca-f652f688e3dc","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:05","userId":null}
{"durationMs":1.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"1d726e92-f709-4663-88ee-fea4f64fec1c","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:06","userId":null}
{"durationMs":3.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"b4dbaec1-2fc3-486f-992d-d2695c41ce4f","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:49:06","userId":null}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":476.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"method":"GET","status":401,"url":"/dashboard/stats"},"durationMs":445.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"67e3438b-f0fa-4ae7-bbe1-de553ceb2fa8","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:06","userId":null}
{"durationMs":78.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"93850200-8c88-4d85-babd-6a2e5c63d4c3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:06","userId":null}
{"durationMs":481.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"e0f7541a-95bd-4701-a2ba-8f553e9aca52","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/dashboard/revenue-trend"},"durationMs":647.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/dashboard/attendance-trend"},"durationMs":682.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/dashboard/grade-distribution"},"durationMs":689.8,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/dashboard/recent-activities"},"durationMs":823.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/school/mpesa-config"},"durationMs":868.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/communications/sms/settings"},"durationMs":1056.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":401,"url":"/communications/whatsapp/status"},"durationMs":1073.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":102.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1a1637fa-8cff-4329-aad3-c3f0609bb74b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:49:07"}
{"durationMs":404.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9687572b-bcc0-4d66-9285-6443fd2a4641","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":307.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"6afae761-6007-45fa-a27d-103c6b1c2ca4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":225.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"a545034e-7eb4-4485-8fac-08d2e7324850","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":304,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":517.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"7f6ebc6e-6bc4-4b94-a724-3d41b726bb18","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":602.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"ae4836f5-f40d-4896-b9ef-cb7d64706db4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":644.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"11d3a757-19b0-4262-80d8-dc6b503a457d","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":634.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"fd18f0c5-0903-4447-ab7b-8e80f32bb36c","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":601.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"64b90792-b9e2-4caf-b9bc-ed2b747428d0","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:07","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":936,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":973.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":975.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":998.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1059.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1064.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":1078.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":1094.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":1095.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":28.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ba611220-89dc-4bd3-9661-c204586eeaf1","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:49:08"}
{"durationMs":25.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"372b37dc-895c-4ac1-ad68-51c78119dd90","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:49:08","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":472.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":17.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"58f924a8-1cc3-42c6-bba9-e70d12e15486","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:09","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 20:49:11"}
{"durationMs":19.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e3af54a9-613e-4649-8b07-95113bbe003b","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":500,"timestamp":"2026-08-14 20:49:11","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":4,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:12","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":539.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","timestamp":"2026-08-14 20:49:12","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"durationMs":12.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d7c9fbbf-9863-423d-bee1-105cb88fa9b4","schoolId":"f1e09e7d-58af-456e-b72d-1f32e7cedd18","service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:12","userId":"6fa69b83-14f4-4533-8535-daf2634e600d"}
{"data":{"from":"/dashboard","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:13","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/dashboard","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:49:13","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eee53195-fe80-412b-bce8-b413adca3aa5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:49:13","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:50:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"174473d4-3692-43dc-8415-d1a5fdf3e600","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 20:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 20:55:00","totalConnections":1}
{"durationMs":3.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2dbe7b5a-730c-4c92-b37d-6a10a9ddf80d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 20:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 20:59:00"}
{"durationMs":4.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f200ec76-13f8-4977-9870-bc02c91e3c88","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:42","userId":null}
{"durationMs":2.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"f232eb05-baa5-43a2-8efb-1d4ebded1d5e","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:43","userId":null}
{"level":"error","message":"Error: Refresh token expired or revoked\n    at Object.refreshAccessToken (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.service.js:415:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async refreshToken (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.controller.js:43:20)","service":"cbc-sms","timestamp":"2026-08-14 20:59:43"}
{"durationMs":8.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"0b7e440d-0f0a-4f89-8426-746fbed4a6c9","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:43","userId":null}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1777.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:44","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"method":"GET","status":401,"url":"/audit-logs/stats"},"durationMs":2191.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:44","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7d54037d-2674-4cfa-a4f0-b1b9b57d542f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:59:44","userId":null}
{"durationMs":5.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/invoices?limit=50","requestId":"53c7edb6-5e9b-4990-9d38-4f3e4b6784e9","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:52","userId":null}
{"durationMs":2.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?search=&page=1&limit=20","requestId":"4fc4ea79-2cc7-4fb9-9aeb-d5794aafe657","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:52","userId":null}
{"data":{"href":"/platform/plans","navId":"1786730388490-924882","text":"Plans & Billing"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/school-portals","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/school-portals","href":"/platform/plans","navId":"1786730388490-924882","text":"Plans & Billing","to":"/platform/plans"},"durationMs":700,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/school-portals","navId":"1786730388490-924882","to":"/platform/plans"},"durationMs":700,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/school-portals","navId":"1786730388490-924882","to":"/platform/plans"},"durationMs":749,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1ce40ca3-1206-454a-8ded-0774f993a0d4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:59:52","userId":null}
{"durationMs":1.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/invoices?limit=50","requestId":"87292d30-5de4-4cec-8888-0adcce0776bb","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:53","userId":null}
{"data":{"id":"radix-:r3p:-trigger-invoices","label":"Invoices","name":null,"type":"button"},"durationMs":5,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:54","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6930dfeb-b7ec-4278-a97d-a052130aac70","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:59:54","userId":null}
{"data":{"id":"radix-:r3p:-trigger-plans","label":"Plans","name":null,"type":"button"},"durationMs":17,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 20:59:56","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8663e076-d461-4a4d-b812-31a6e6f7f9a0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 20:59:56","userId":null}
{"durationMs":3.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=100","requestId":"679deaa4-6aae-449d-be48-a5dfb9bf86d2","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:57","userId":null}
{"durationMs":2.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/modules","requestId":"41168e00-9e89-45dc-b1ed-16a134d42f31","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:57","userId":null}
{"durationMs":6.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"66356205-6dc0-4784-b639-82ea2234ee69","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 20:59:58","userId":null}
{"data":{"href":"/platform/modules","navId":"1786730394003-426289","text":"Module Access"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/plans","href":"/platform/modules","navId":"1786730394003-426289","text":"Module Access","to":"/platform/modules"},"durationMs":23,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/plans","navId":"1786730394003-426289","to":"/platform/modules"},"durationMs":58,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"href":"/platform/schools","navId":"1786730395132-439948","text":"Schools (Tenants)"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","href":"/platform/schools","navId":"1786730395132-439948","text":"Schools (Tenants)","to":"/platform/schools"},"durationMs":16,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","navId":"1786730395132-439948","to":"/platform/schools"},"durationMs":58,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":3.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"47e2c335-c316-4e1a-a144-29bd948603bc","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:00","userId":null}
{"durationMs":4.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"bc0b666a-f382-4074-8349-ed06427af9e9","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 21:00:00","userId":null}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 21:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:00:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a0a042b7-b79d-4dcb-bd4a-29244ec0a450","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:00:02","userId":null}
{"durationMs":3.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"caab0f3e-7f6a-471a-b4cf-b3b809d2542b","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 21:00:03","userId":null}
{"data":{"from":"/platform/schools","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"09fa7242-c6c4-4c2d-bf5c-9d4d2c3019f1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:09","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":24,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04be4027-8116-41a6-85c4-d2a71b7b7a59","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:22","userId":null}
{"level":"error","message":"Error: User not found\n    at Object.login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.service.js:294:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.controller.js:34:20)","service":"cbc-sms","timestamp":"2026-08-14 21:00:22"}
{"durationMs":26.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"dd4739d7-8373-4c27-a7a4-e484a24bb8b0","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 21:00:22","userId":null}
{"data":{"method":"POST","status":401,"url":"/auth/login"},"durationMs":3760.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ea391992-16d7-4550-ab24-818fa0e3d0d9","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:23","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":6,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"488f90c2-32da-4d8d-884f-ae1f7ae1dff9","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:26","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":3,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e9635a93-6332-4d9f-af9e-bcc4b6a2ed59","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:28","userId":null}
{"level":"error","message":"Error: User not found\n    at Object.login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.service.js:294:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.controller.js:34:20)","service":"cbc-sms","timestamp":"2026-08-14 21:00:29"}
{"durationMs":12.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"82aaf56b-6871-4e49-89cd-fba1b1857396","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 21:00:29","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":9,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"method":"POST","status":401,"url":"/auth/login"},"durationMs":471.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"be176363-aec1-4061-82fc-3d105f117d1d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:30","userId":null}
{"level":"error","message":"Error: User not found\n    at Object.login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.service.js:294:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.controller.js:34:20)","service":"cbc-sms","timestamp":"2026-08-14 21:00:39"}
{"durationMs":9.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"481f80a8-32e0-43a3-b298-0570662e4e7e","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 21:00:39","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":25,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"method":"POST","status":401,"url":"/auth/login"},"durationMs":589.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"79b46ae0-1db8-4637-86e2-3e0d79a04098","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:39","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":3,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:00:42","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.69,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"943bfbf6-a5de-415d-8c8b-35381d3ac5ca","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:00:42","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":5,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":13,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"25a71c6c-df76-4619-8929-f0c5b3a8d791","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:00","userId":null}
{"durationMs":572.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/platform/auth/login","requestId":"86e0a0d5-ae6f-485e-9ef3-e1e37af72949","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:00","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:01:00"}
{"durationMs":51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=100","requestId":"a4403517-9759-4e6b-8e33-52d6b4e3d621","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:01","userId":null}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/platform/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:02","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/login","navId":null,"to":"/platform/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:02","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04b8438f-69db-4ddf-99ba-d920338ac687","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:02","userId":null}
{"durationMs":23.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?search=&page=1&limit=20","requestId":"daf0ff87-d497-422c-b38c-b9f1618cdb8a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:06","userId":null}
{"data":{"href":"/platform/plans","navId":"1786730463144-562743","text":"Plans & Billing"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/dashboard","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/dashboard","href":"/platform/plans","navId":"1786730463144-562743","text":"Plans & Billing","to":"/platform/plans"},"durationMs":56,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/dashboard","navId":"1786730463144-562743","to":"/platform/plans"},"durationMs":94,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0e478f95-903e-42b9-b6e5-3848e6ebf084","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:06","userId":null}
{"durationMs":882.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/invoices?limit=50","requestId":"202dd3e9-c2d6-4c49-9b9a-6dfac569e89f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:06","userId":null}
{"data":{"id":"radix-:r4:-trigger-invoices","label":"Invoices","name":null,"type":"button"},"durationMs":9,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:10","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d98c7b05-5707-4ff4-8a52-4fb52e20b4c6","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:10","userId":null}
{"data":{"id":"radix-:r4:-trigger-plans","label":"Plans","name":null,"type":"button"},"durationMs":8,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:10","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42e96686-d8f8-4706-8642-0f535e8adda1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:10","userId":null}
{"data":{"id":null,"label":"Add Plan","name":null,"type":null},"durationMs":58,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:12","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"914f63e0-608a-4bc8-9106-f1fadc4711d4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:12","userId":null}
{"data":{"id":null,"label":"Close","name":null,"type":"button"},"durationMs":7,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:14","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8be3cce8-f68b-48d7-9dc9-11eb95303f50","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:14","userId":null}
{"durationMs":24.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/users?search=&role=","requestId":"8d50680b-9add-48de-a1c9-092f78a54283","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:15","userId":null}
{"data":{"href":"/platform/users","navId":"1786730472234-765784","text":"Platform Users"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/plans","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/plans","href":"/platform/users","navId":"1786730472234-765784","text":"Platform Users","to":"/platform/users"},"durationMs":453,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/users","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/plans","navId":"1786730472234-765784","to":"/platform/users"},"durationMs":499,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/users","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db213bfb-03b0-4362-9ec8-70459b2dc2d1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:15","userId":null}
{"durationMs":23.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/modules","requestId":"ec398ce5-76b7-4588-b764-60f2c0f7282f","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:22","userId":null}
{"durationMs":38.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?limit=100","requestId":"5720a508-d9fa-480e-9200-4e0ee1cdcc4c","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:22","userId":null}
{"data":{"href":"/platform/modules","navId":"1786730478900-632413","text":"Module Access"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/users","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/users","href":"/platform/modules","navId":"1786730478900-632413","text":"Module Access","to":"/platform/modules"},"durationMs":87,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/users","navId":"1786730478900-632413","to":"/platform/modules"},"durationMs":137,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eabd96c5-bdd1-4a22-b528-c2cb8e3ee0f4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:22","userId":null}
{"durationMs":20.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants?page=1&limit=20","requestId":"0ad4d50a-a199-4424-adce-18c2d78f26de","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:24","userId":null}
{"data":{"href":"/platform/schools","navId":"1786730481474-158974","text":"Schools (Tenants)"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/platform/modules","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","href":"/platform/schools","navId":"1786730481474-158974","text":"Schools (Tenants)","to":"/platform/schools"},"durationMs":42,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/modules","navId":"1786730481474-158974","to":"/platform/schools"},"durationMs":86,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ade76442-efac-4c98-baec-89d78131d8ee","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:25","userId":null}
{"durationMs":25.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18","requestId":"26c5df07-5f0f-40b9-ad4b-631cff8aa745","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:28","userId":null}
{"durationMs":12.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/features","requestId":"6d95f308-4312-4120-9097-4e58dfdc294d","schoolId":null,"service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:01:28","userId":null}
{"durationMs":9.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/platform/tenants/f1e09e7d-58af-456e-b72d-1f32e7cedd18/usage","requestId":"547b03a6-e039-4825-88bc-dac5929e9201","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:28","userId":null}
{"data":{"from":"/platform/schools","href":null,"navId":null,"text":null,"to":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/platform/schools","navId":null,"to":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/platform/schools/f1e09e7d-58af-456e-b72d-1f32e7cedd18","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:01:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":2.32,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2b91be38-598e-4a5e-b47c-59eb08af8afe","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:01:29","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:05:00","totalConnections":1}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:05:01"}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9ad3097c-6cde-4255-9fa9-b65aafda0555","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:10:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"66d47235-4d6f-4d96-86e7-2f0a9bb736cd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:15:00","totalConnections":1}
{"durationMs":3.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fee7ea0d-792c-445b-aae0-ab81a93fbacc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:20:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eff71c28-3fa4-4aa1-bca6-91b89ab5a966","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:25:00","totalConnections":1}
{"durationMs":2.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c0b9907a-c1db-4862-bc52-28511636c730","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:26:00"}
{"data":{"id":null,"label":"Tables: Search, Sort, Paginate, Export","name":null,"type":null},"durationMs":49,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:26:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.89,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1d3ea563-44b5-4a6c-8625-c67a7031c7b5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:26:40","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":113,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:26:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.53,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a27b3cab-e544-42b1-8104-9c6209b60a50","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:26:49","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:27:00"}
{"data":{"id":null,"label":"Senior Secondary & Pathways4","name":null,"type":null},"durationMs":118,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:27:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.21,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a89539fb-b45e-4d31-b527-65dbe75415fc","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:02","userId":null}
{"data":{"id":null,"label":"Senior Pathways","name":null,"type":null},"durationMs":18,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:27:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.15,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b917722e-abc2-4807-a825-279478169d63","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:06","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":33,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:27:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.37,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ee670a0e-3e6e-4372-8822-5bd6c5406cc5","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:34","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":43,"event":"UI_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 21:27:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.66,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6ea76ae5-ed63-4065-b2f7-14d53fa81d9d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:46","userId":null}
{"durationMs":895.42,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"9f45a358-33df-4881-ae9a-17dbc20878da","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:46","userId":null}
{"durationMs":62.1,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"f893d4cf-4e89-40f9-bb4c-02c207d47ce1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:46","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":102.76,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"530e65ee-53d0-4f60-942f-e6c900d1d28a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":99.89,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"2d4d486c-e842-4ec9-b1bc-56fa8afc5af1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:47","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.17,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"e953efbd-09fd-4042-a50c-0c60909a7ea9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1257.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":419.5,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":52.1,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ecdb47bf-d8dc-4b87-987b-ae10ef4c88eb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":80.6,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"f94ccdfb-5bfc-4273-9a3c-32b747abc663","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":76.25,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"103116ab-cdfd-442f-9fcf-2596008005bd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:27:48"}
{"durationMs":25.39,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"17ef15f1-c06f-4546-be4a-d03919e8df62","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:27:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":460,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":467,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":1456.8,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":2077.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":2079.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.72,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"862c6226-87b3-48fc-a6f6-09943a944236","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":86.48,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"20fb82bb-a68e-49b3-8638-7fef5169aa35","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":76.61,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"8c8c92fe-823e-41c3-88ba-ceac9ed6fe38","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":47.88,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"811c74f9-4181-4c77-b547-ab6ddce32e84","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":51.19,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"45a641d6-31f3-4fa6-87d0-f6eda573f858","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":69.15,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"65a9c35c-50a2-4cc6-8e0f-1b49ab860d75","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":5029.7,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":440.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":458.1,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":34.8,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"917e31ce-53bd-4ca1-b198-d21394333a32","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.19,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"566bba38-3cc5-4206-97d6-0d49b5dfbab1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:27:55"}
{"durationMs":28.33,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f754d845-e176-4cef-949b-87cd51ad5055","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":106.34,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"9195acfd-d54a-4ff1-b9b1-75ebd2e59b3c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":129.13,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"aa1df3bb-c1b2-4b35-a66d-f6b2a806fbbf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":744.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1455.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1503.8,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1505.5,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":686.7,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1557.9,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":1562.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.89,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0b749fe0-dddb-4651-9264-ee25e2870555","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:27:57"}
{"durationMs":15.9,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7506d6ab-1954-4dbf-b483-ce903c99c94b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:27:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":346.7,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:27:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.85,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"270aa5aa-9415-492f-9b0f-a10cdca3725a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:27:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:28:00"}
{"data":{"href":"/dashboard/students","navId":"1786732091799-704608","text":"Students"},"durationMs":null,"event":"NAV_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":34.94,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"016d15d3-3477-4476-b83b-daeaac497228","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:17","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":100.2,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?page=1&limit=10","requestId":"f683af99-49c6-420b-ad69-a675510622d6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":90.16,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students/stats","requestId":"5a84ad4e-9404-4519-9381-d6f4efd32257","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":39.17,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"03e8ad72-707e-42f5-ac1f-bc54ee40b829","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/students","navId":"1786732091799-704608","text":"Students","to":"/dashboard/students"},"durationMs":5253,"event":"NAV_PATH_CHANGE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786732091799-704608","to":"/dashboard/students"},"durationMs":5253,"event":"NAV_STALL","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786732091799-704608","to":"/dashboard/students"},"durationMs":5467,"event":"NAV_RENDER","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":458.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students/stats"},"durationMs":548.5,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":727.7,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.16,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce5d6ca2-0032-4f91-93cc-af14f123e313","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":93.6,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"892b9ac6-dfce-4020-9851-37584d0494fd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":95.36,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"2f330500-ecfa-4fc5-bd3c-1d1a16f10f05","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:27","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":105.26,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"850fa2be-edd2-401b-b82f-c045e8dff91a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":123.88,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"3d8eb0c1-1c64-4374-9e0e-3bd22241e4a1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":116.79,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"d08cef48-9235-4b2f-b07b-303a1fb59828","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.79,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"fecbb248-0cf5-4ddc-9794-117bcd085ad1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":40.88,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"04b6b421-03e6-49bc-af27-1c61aa479641","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":55.49,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"e4db4427-4b54-4d0e-94fa-5cd6dfacee2f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":437.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":440.9,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":767.3,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":785,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":795.9,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.38,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"182f2b37-ada8-4ad0-b917-96fcfb52e435","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:28","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1018.7,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1025.8,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":1027.8,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:28:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.76,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fc050456-e966-4650-beea-2cfccff31c68","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:28:29","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 21:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:30:00","totalConnections":1}
{"durationMs":2.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e24ba8c5-2f39-4c14-97c8-876cafb5e215","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:32:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:32:49"}
{"durationMs":42.36,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"158b4ce6-84c4-492c-8f1f-fcb0f5687d6f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":125.48,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"bd11bb43-f94a-46cf-a1dd-184c62950018","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1434.5,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":1639.9,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.33,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c94d6597-839f-4c96-b91d-45cce8da4b0c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:32:51"}
{"durationMs":24.11,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"6301a8ce-05f6-45fa-a004-2286a5d9fa83","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":389,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.34,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e0a289d0-4f36-4b04-9fea-c83cd3ac8cc8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 21:32:53"}
{"durationMs":22.91,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b23081e9-a2c0-422f-af19-ae5cc7bf282d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 21:32:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":349.2,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/finance/payments","navId":"1786732370030-627398","text":"Payments"},"durationMs":null,"event":"NAV_CLICK","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.94,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d952c923-6a00-4899-aed1-67ec1f88dbec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":74.59,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/banking/banks","requestId":"835b4f82-84a1-4eb7-a97e-44844919dd2a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:55","userId":null}
{"durationMs":70.01,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"ca564a0a-540c-4088-a8dd-87bb745b158d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":430.55,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/invoices?studentId=","requestId":"ce603123-2080-467c-8e17-fbe29cc89106","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/finance/payments","navId":"1786732370030-627398","text":"Payments","to":"/dashboard/finance/payments"},"durationMs":782,"event":"NAV_PATH_CHANGE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786732370030-627398","to":"/dashboard/finance/payments"},"durationMs":782,"event":"NAV_STALL","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786732370030-627398","to":"/dashboard/finance/payments"},"durationMs":869,"event":"NAV_RENDER","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/banking/banks"},"durationMs":434.5,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":439,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.25,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8ea248d7-e4c2-4f96-bb00-5e6bc4f058f5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/fees/invoices"},"durationMs":803.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:32:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.3,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"483b44e4-a2e1-4166-bf41-7d1945ae5d74","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:32:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:33:00"}
{"durationMs":129.64,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"ea321b99-2d78-412d-bcd4-a39e9c0ddb09","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":131.97,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"a73e8344-3cca-46bd-87ec-1359c332ce74","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":89.55,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"28ddf714-8d90-42b7-8705-9bb2450119c1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":114.91,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"5ea3ee0d-4d60-433c-aab0-64b0eb856051","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":129.2,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"c102077e-c186-48f1-9fde-db18a88a2eee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":117.78,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"4e732440-cbb1-4db2-8812-b95f58a29896","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":56.16,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"30fc1bf5-889d-4b38-9f0f-5f2f52e02ddd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:33:02","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":52.96,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"7dac5bf0-bc71-4b3a-bece-369677f422cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 21:33:02","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":445.9,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":453.3,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":743.1,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":761.1,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":790.4,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":797.3,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":14.54,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3b0ea9f4-da5c-4c43-a025-16ab4ddedcdb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:02","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":1003.3,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":1005.2,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 21:33:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.88,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6f335ac8-3810-4bc3-960a-4e5c4460d6da","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 21:33:03","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:35:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fba789b2-d548-46c8-9476-c7d898ff651d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:40:00","totalConnections":1}
{"durationMs":1.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a68cac2-9af7-47f1-93ff-baaad0592b33","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:45:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"550b7b55-ab7b-4a1a-8f1e-cf591ebaa0d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:50:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa9a9018-e485-43ae-bab9-fae32455dd76","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 21:55:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e774c21d-4051-4e83-8b1a-49b50f935794","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 21:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 21:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 22:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:00:00","totalConnections":1}
{"durationMs":2.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4981169a-38f8-4325-8b2e-5a51d77f8076","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:05:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"54af520b-0f4c-4659-93b4-fe681215d172","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:10:00","totalConnections":1}
{"durationMs":2.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dba24865-2c7e-4999-8ef9-d216c8e2a3da","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:15:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c0d37859-9e70-44d0-b843-19c7ff9f2cdf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:20:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17bfa012-ede7-407c-8815-604d07420951","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:25:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1dede79c-da42-4e91-8316-6d0a7620aa71","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 22:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:30:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d174e404-f3b2-4052-86ec-52d692ce0645","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:35:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1fcb058d-3a0a-40c7-b878-ee16c34c843e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:40:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fb23a012-984d-4688-b66e-e616fffe7fb4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:45:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"54a0c34a-bfbb-40f8-9d3e-f35530f607fb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:50:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bfcabdfe-4681-424f-b361-231ec6af301a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 22:55:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa2cf1c1-62d9-4553-a4d1-938de9483f28","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 22:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 22:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 23:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:00:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2a44cc0f-0fa6-4b67-8a0b-306c390bfb6f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:05:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8071f071-f1a0-4a33-8b76-bac093ad280e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:10:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b0494a06-2005-4925-b7c3-a6cda3d03025","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:15:00","totalConnections":1}
{"durationMs":4.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2c4cd2c7-3c64-4cf9-8410-272042c34e47","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:20:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"59312b32-5c87-4533-99cb-7102ca410fe4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:23:00"}
{"durationMs":2.11,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"acfd4d34-7cc6-4084-ad9a-c0039db0ee92","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 23:23:38","userId":null}
{"durationMs":3.62,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"dc73bc3d-3fb8-4c0f-a040-76aa69c7956a","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 23:23:38","userId":null}
{"durationMs":3.32,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"fb932883-5d27-4c6e-a808-6eeb0e697992","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-14 23:23:38","userId":null}
{"durationMs":34.22,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"1b7470f4-c487-4022-a8ce-91e7e6309e5d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:23:38","userId":null}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:23:39"}
{"durationMs":73.65,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a3196ff6-12c0-4fe3-b313-a49e108657c7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:23:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":171.69,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"e966cc23-f441-44be-bf00-98cfca822bc6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:23:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":257.34,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"3c1492ee-63af-41e6-a47f-1079c613a177","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:23:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1213.3,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":401,"url":"/dashboard/stats"},"durationMs":912.6,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":401,"url":"/dashboard/recent-activities"},"durationMs":1494.5,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":479.8,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":639,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":676,"event":"API_RESPONSE","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:23:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.49,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0dacf7bf-0c11-4c43-b32c-38fb7636bb10","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:23:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:25:00","totalConnections":1}
{"durationMs":4.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d667bea2-d3bf-40a0-a406-f6ac3ec8a026","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-14 23:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-14 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:30:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"10c7efc4-372e-44bb-8ded-a12e6a0f7a20","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:32:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":11,"event":"UI_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 23:32:44","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":null}
{"durationMs":2.3,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"31d01123-9819-4254-a21c-e1d76b5c77cb","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:44","userId":null}
{"durationMs":751.19,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"f2bd36e9-b48c-4d3b-8f2c-aa4398d3b8c0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:47","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":44,"event":"UI_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-14 23:32:48","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":null}
{"durationMs":1.13,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5adbb3fc-dcb0-4246-9fc6-67c7128f04f7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:48","userId":null}
{"durationMs":55.33,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"3b84a899-f836-4b56-9cec-4a8e9a9ff6bf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":231.54,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"9c6db347-8ad8-4552-bfcf-0ca43b40ba68","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":284.44,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"52599ecc-78c4-41a8-b5d4-133ebcc6ceb8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":418.32,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"50a71682-0a32-4472-879c-e283a2ae5bbd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":128.3,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"1088f2fe-473c-4471-80cc-61ec6655b3ba","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1066,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":407,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":27.1,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ac76683e-749c-4bdf-bfcd-85df32b88715","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":122.16,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"04a07a67-51b6-4b99-b89c-c0806ac387f8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:32:49"}
{"durationMs":27.02,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"6caca184-0c8c-4ea8-9d9d-c571222441eb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":555,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":627,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":741,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":763,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":870,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:49","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.16,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9a1e1bd4-b5c6-479e-968f-1090949a5165","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:49","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":125.85,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"44f6e3f5-46f1-4667-b45b-7f223e4854bd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":216.68,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"2f49c369-e3b1-4443-9d3c-a7d810784bb3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":212.11,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"b9317293-57ff-41bb-b613-321a049b472d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":288.95,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"5f5587ff-acf7-417e-9794-816a542dd49b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":258.65,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"88d4cba9-9e86-4e07-bb1a-9bebae305f0f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":307.25,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"d73e1438-35e3-4c4e-ac0d-ecf712a0a760","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":33.8,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"e8433ec2-083f-452c-afc0-78b79f636811","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":30.05,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"07f45e9d-4527-408a-8c11-774aa9b592bf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1306,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":432,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":531,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":582,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":599,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":609,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":614,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":723,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":724,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:51","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.34,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b2efdc62-a501-4d14-b37c-84b1eb83dcdf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:32:51"}
{"durationMs":21.4,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"02fb3ba6-cb59-4f4b-b37f-6394d1c94424","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:32:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":322,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:52","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.47,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"053ff11d-3fd9-49dd-ac49-ba10b2143319","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:32:53"}
{"durationMs":22.08,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"dceb4ad8-29bc-4759-957e-f4175b384c0d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:32:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":401,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:32:55","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.73,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"43f32f90-befd-4f27-be66-f06f09467e3f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:32:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:33:00"}
{"data":{"href":"/dashboard/settings/audit","navId":"1786739619075-776016","text":"View All"},"durationMs":null,"event":"NAV_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:42","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":46.16,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"addde674-f5b1-4a94-8f20-78086e60281a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:42","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":66.74,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs/stats?days=7","requestId":"a061ede4-c0e5-46ed-a498-e7b19d2c4a9f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":66.61,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/audit-logs?page=1&limit=30","requestId":"ddecb283-49fa-4e16-bb24-24cdd742b9e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:44","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/settings/audit","navId":"1786739619075-776016","text":"View All","to":"/dashboard/settings/audit"},"durationMs":2295,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/settings/audit","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:46","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739619075-776016","to":"/dashboard/settings/audit"},"durationMs":2295,"event":"NAV_STALL","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/settings/audit","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:46","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739619075-776016","to":"/dashboard/settings/audit"},"durationMs":2480,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/settings/audit","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:46","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/audit-logs/stats"},"durationMs":396,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:46","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/audit-logs"},"durationMs":396,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:46","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.99,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42bb8142-8ce2-4c1e-b298-0473b1a46513","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:46","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:33:54"}
{"durationMs":20.26,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"e88a53c5-0e93-4ed8-8f6a-312f638f155e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:33:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":715,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:55","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.85,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"50111bf1-5995-4d40-bee2-2fc367674ac7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:33:56"}
{"durationMs":28.39,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7d0d6206-3779-4026-81c4-74d15fc18469","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:33:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":536,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:57","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.48,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8b166ad9-b4fb-4f62-99a6-15043eb935d7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:33:58"}
{"durationMs":28.63,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b78062e7-4d53-42d3-be70-2fdd3856c154","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:33:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":346,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:33:59","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.44,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b727d1f5-5e45-48cb-8958-d655a6e052fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:33:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:34:00"}
{"durationMs":241.78,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"0d59a6d8-74b8-42b4-b27e-6c3b6f2919f5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:34:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":289.76,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"b9839673-3f3c-4449-81c3-fec804914b88","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":300.91,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"a392413d-af62-45e6-9acb-17e8ab6b3c23","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":291.01,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"c802db00-7f1f-4531-958e-86e0b7bc4f9e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":256.02,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"2cd40959-d874-4ebe-b071-3139a12754fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":291.52,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"1853f367-65c3-479c-89dd-d679103a38c6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":28.9,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"067eac44-4c56-4082-9be7-2262ee826e9c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.96,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"f3e21cca-6ade-4cfe-82f7-c88d9dde3ebb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/settings/audit","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/settings/audit","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":586,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":587,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":593,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":604,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":604,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":613,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":744,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":745,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:34:01","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.02,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db0b9c0a-debb-4ca8-8e1f-15bbaa195295","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:34:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:34:59"}
{"durationMs":34.06,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"68e197de-26ff-4efb-a7f9-52c629ffff3a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:34:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:35:00","totalConnections":1}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":747,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:00","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.31,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5d705786-e677-4ebe-9466-f2c502d2d70a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:35:00"}
{"durationMs":32.56,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"4154e2c9-ec9b-4b81-8a0b-43ca6a327a8c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:35:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":58.46,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"ef84a95e-658f-4a0e-b27b-f572542a5a2f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0a2ddfa8-05f3-4e0f-8037-8588a23c52ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:35:02","userId":null}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1303,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:02","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":710,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:02","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":38.76,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"de1a82e4-aeae-4159-9be2-9840c3f156ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:02","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/finance/payments","navId":"1786739700332-595917","text":"Payments"},"durationMs":null,"event":"NAV_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:04","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":42.65,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ad039134-f479-438f-a3f4-e54c86835c40","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:04","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:35:04"}
{"durationMs":55.68,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f1fccd4c-d184-45f3-a5dd-d6f5526d191b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:35:04","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":33.59,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/banking/banks","requestId":"8a71aab9-737b-45d1-be14-40e6386d7599","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:05","userId":null}
{"durationMs":66.64,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"bef31388-d98b-4193-9fe0-16c068512a57","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:05","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":353.39,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/invoices?studentId=","requestId":"a941acfe-b29e-408e-86a6-de49cbf2cc58","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:05","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/finance/payments","navId":"1786739700332-595917","text":"Payments","to":"/dashboard/finance/payments"},"durationMs":1056,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739700332-595917","to":"/dashboard/finance/payments"},"durationMs":1056,"event":"NAV_STALL","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739700332-595917","to":"/dashboard/finance/payments"},"durationMs":1155,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1099,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/banking/banks"},"durationMs":1100,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":1147,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:06","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.57,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"26192677-b64f-401d-9b9b-042c6489e943","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/fees/invoices"},"durationMs":2034,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.31,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"117efc60-88cd-43d8-b18a-56d85a34c1b2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":129.28,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"9d396eec-99c1-4e71-a42b-b9ee7f62f5d9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":189.19,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"c30f6597-2681-423e-8395-c9c290fd4a84","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":279.18,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"038bc08f-ade7-4b77-8fed-6fe67a86b2dd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":354.35,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"7294b517-b09a-4438-8d51-af7b80a3bad6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":347.03,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"37778a2d-2863-4d7d-8216-b4f4d529faf7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":370.31,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"8752358d-9a1f-4570-bc49-d85b1107e9ad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":39.54,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"3f7f3104-d4d3-4263-9bad-2cb060c36e5c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:35:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:19","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:19","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.33,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0f9d4e6c-d9e3-4231-b68c-e69545905053","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":39.74,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"0b3aafcc-d832-4aa1-a0b6-b3ab59e95526","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:35:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":2486,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":2487,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":2488,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":3030,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":3030,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":3031,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":3409,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":3411,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:35:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.15,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"73ff2af2-2113-456a-a9b1-e7668a945660","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:35:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:36:00"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:36:15"}
{"durationMs":27.05,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b41a9b4a-d6e4-4d4c-b72d-cfd714c26e65","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:36:15","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:36:20"}
{"durationMs":29.12,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"8d37449d-3839-4200-9888-43a5c2fd1ef6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:36:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":15369,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:36:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.42,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cdc68c09-57dc-48c7-b411-5ec4ead0311b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:36:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:36:52"}
{"durationMs":42.93,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"52ff206e-dca5-4696-88a0-f9774af5303f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:36:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":2187,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:36:53","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.08,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c82f6fbe-6a39-4284-9702-89c58b16c177","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:36:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:36:54"}
{"durationMs":28.39,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"99ac34c4-c2cf-489b-b60e-8daf078f2fca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:36:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":389,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:36:55","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.28,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d1a439c3-ea04-4c19-b8d0-1ae6ce82d362","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:36:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:37:00"}
{"durationMs":94.49,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"f26d00fe-9761-4769-a555-6c39fd0ef7b0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":421,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:32","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.3,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce1c67b0-c1d2-41c6-adfb-147cbf49ba93","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:32","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/students","navId":"1786739852407-130080","text":"Students"},"durationMs":null,"event":"NAV_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:36","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.33,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9fe2bf9a-ee5f-4d1a-badb-148ba1c5a849","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/students","navId":"1786739852407-130080","text":"Students","to":"/dashboard/students"},"durationMs":2548,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:39","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739852407-130080","to":"/dashboard/students"},"durationMs":2548,"event":"NAV_STALL","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:39","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786739852407-130080","to":"/dashboard/students"},"durationMs":2667,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:39","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":74.65,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"538fe0c6-37ef-4605-986e-822e74158438","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":337.54,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"d0e1b70c-c823-4df9-b09e-7c956359f888","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":366.79,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students?page=1&limit=10","requestId":"3e602a0a-03da-417c-8808-510b20fa4c93","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":343.92,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/students/stats","requestId":"719d6fa5-f25c-4638-bef8-d8a57e027324","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":1871,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:40","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students"},"durationMs":1873,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:40","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/students/stats"},"durationMs":1874,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:40","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":22.93,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c009e193-91e5-4576-b8a4-4374d08a27af","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:37:55"}
{"durationMs":29.82,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"65968adc-3469-4258-b714-2b6c9ba40900","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:37:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":469,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:56","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.64,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"dfae2fb7-9def-4c5d-adf5-1b711201d74d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:37:56"}
{"durationMs":25,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9a697eb9-fc47-4753-be55-58d4285c1cd5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:37:56","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":619,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:37:58","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.41,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bb975a49-46f4-464f-b18c-f94ba83ae6e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:37:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-14 23:37:59"}
{"durationMs":31.47,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2d829a41-59e7-4fda-88d4-ab34f3b1706a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-14 23:37:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":371,"event":"API_ERROR","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:00","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.64,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a95d01b7-162a-40d8-afed-d9e6b5273b56","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:00","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:38:00"}
{"durationMs":246.24,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"0dec29f9-186d-4774-9502-c842d940cc3a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":302.49,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"f2077693-a6a5-4bbf-a5e4-e015214645af","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":343.22,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"bd0c30d8-336e-479a-be0e-8e1fcddd29d4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":54.28,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"562441d8-52ef-402b-838f-70dd311038a9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:38:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":144.46,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"da9fc2a6-0730-40b5-b9b4-d3140ddb89f4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:38:06","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":114.02,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"4c9e328e-40c2-4475-b0e4-50b35f52720c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-14 23:38:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":223.45,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"95f62186-76bf-4c66-888a-54e06367ef87","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":199.53,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"3d5c8d10-494b-4a85-a5ab-60ef30084bac","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/students","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":581,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":695,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":696,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:07","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":13.2,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04b68c3c-6b33-486b-91a3-b0a6cb69e971","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:07","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":806,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:08","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":897,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:08","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":897,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:08","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":984,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:08","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":996,"event":"API_RESPONSE","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:08","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.13,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"36b21dd2-9335-407f-8f4e-22c711ed171f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:08","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":33,"event":"UI_CLICK","ip":"102.210.28.84","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-14 23:38:21","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.71,"ip":"102.210.28.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1b2631fc-7f41-4ce8-aecc-87cc415f79f1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-14 23:38:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:40:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"27734190-eb89-4176-a88b-25684bffd715","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:45:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6221569-436a-41f2-b48c-8421f5d701f2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:50:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62b6d289-0ff9-4a5d-baee-c31408f80041","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-14 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-14 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-14 23:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-14 23:55:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b8212f11-5461-4fb5-af20-0fbd339302ba","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-14 23:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-14 23:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 00:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:00:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ae44848e-20ad-47cc-9d32-c9f2b82a4e62","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:05:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b36a67db-57b1-4b66-b1f2-5a41b5919012","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:10:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bcbc4ebd-38ec-4b3f-8166-44824102476e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:15:00","totalConnections":1}
{"durationMs":3.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ed7a5b5-5545-4127-8132-287d843abe2f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:20:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"43abdb43-eb23-444e-9166-ea662521105a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:25:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23052254-ae00-4249-9279-890cf8c0578e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:28:00"}
{"durationMs":4.26,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"98cf229a-2914-48cc-8534-476169b0b2cc","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-15 00:28:12","userId":null}
{"durationMs":2.09,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"54771c0d-8d18-4e32-8d46-f67c90e5f835","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-15 00:28:12","userId":null}
{"durationMs":49.19,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"91f05f9d-1a48-4e4a-94e4-096e99d1547a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-15 00:28:12","userId":null}
{"durationMs":213.93,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"3cc8023b-31cb-414b-bd6a-a4e6a2663e99","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-15 00:28:13","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":282.47,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"bb311f46-3b4a-4db4-b684-ef5f20257473","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-15 00:28:13","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 00:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:30:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8af5e432-2a28-4091-8f05-251618476ac8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:31:00"}
{"data":{"method":"GET","status":null,"url":"/dashboard/stats"},"durationMs":170626.5,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-15 00:31:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":null,"url":"/dashboard/recent-activities"},"durationMs":170632.3,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-15 00:31:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":48.83,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c40fec4e-9a21-48aa-a2ca-cf64abe77233","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-15 00:31:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-15 00:31:18"}
{"durationMs":64.06,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"4e9420b0-4ae0-41e4-a5bb-d7c76ec400a7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-15 00:31:18","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":500,"url":"/communication/notifications/inbox-count"},"durationMs":1643.6,"event":"API_ERROR","ip":"105.165.215.1","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-15 00:31:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":25.33,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4ec2d9a0-dab5-4500-bb57-9d98ab32acac","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-15 00:31:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.rawSelect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:434:18)\n    at async Notification.aggregate (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1277:19)\n    at async Notification.count (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1306:20)\n    at async inboxCount (/home/aereuxky/cbcsms-backend/src/modules/communication/communication.controller.js:86:17)","service":"cbc-sms","timestamp":"2026-08-15 00:31:21"}
{"durationMs":25.56,"ip":"105.165.215.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a2f5a4f2-3e89-4763-b1e2-c43ac3a65c02","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-15 00:31:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:35:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e7335db3-a177-4ef8-a6e5-fd6028fdb369","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:40:00","totalConnections":1}
{"durationMs":2.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2f8c5cac-7106-40c2-b9d4-15bc02b576df","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:45:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"700fc7b9-6945-4ff9-89de-f2425dc08e11","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:50:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3102213f-3a48-4dda-bb9d-4e5f979dd755","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 00:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 00:55:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0198845-ed36-4dc6-a9f5-90ff745cf577","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 00:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 00:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 01:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:00:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"543925cd-daef-47d3-9833-d319b3851a1e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:05:00","totalConnections":1}
{"durationMs":2.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1b421937-6924-4989-8a6b-3944f5c18382","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:10:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4475f31f-6991-4f12-ae91-60ba4a8b39eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:15:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"110fe02e-c3e1-47e0-8740-9c15b6270346","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:20:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"532586c1-2492-4c93-b04f-bc5f34ec5c1f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:25:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"690be670-d1ba-423b-ac75-1c1e200fbae4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 01:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:30:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0e12fb8-fbe8-44dd-9b21-4e6aba07e8d9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:35:00","totalConnections":1}
{"durationMs":2.2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"59b7dc8a-f932-4bd3-9ef9-6ba579e0947c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:40:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b2918540-a0a5-4e93-95eb-bfdf33daf2ed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:45:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a0551e3c-6bf6-409e-9627-45ee7a0defa0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:50:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6a1a55d5-605e-44d0-9505-ff1d69dd76f9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 01:55:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"88f08169-9cce-4371-9895-6614e6dd0a7d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 01:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 01:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 02:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:00:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"14e8ecc8-7034-4ee2-97a6-90460661f9de","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:05:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0ac7a9fa-7729-481e-ac17-db82d30124b4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:10:00","totalConnections":1}
{"durationMs":4.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"458ff734-cddb-4adc-80b1-9242dd45478c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:15:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62f675e9-1b0c-4464-b27d-0a6f0acf76a9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:20:00","totalConnections":1}
{"durationMs":3.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4e92e57b-4653-4053-add8-df594bc4d68f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:25:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1f72c56e-ecdd-42d7-8470-fa7b8ec9be42","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 02:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:30:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"edbf8cb4-b038-4bd9-827d-4f6560d4b58d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:35:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c69c8ce4-db20-4dfa-a9ed-926dac58b2d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:40:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e768b218-b90c-41a6-8b3d-5b1e43b63e75","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:45:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8ecc0a5f-2080-4e3e-8258-776e3b6446b9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:50:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"81f68656-2785-47c8-b2a2-07c3b812d3b2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 02:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 02:55:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"598758a9-712b-4bbc-9005-2c8ab1f9d4cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 02:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 02:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 03:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 03:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:00:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1bbe24b9-0e73-46dc-97e7-9449fde7c984","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:05:00","totalConnections":1}
{"durationMs":2.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7b5297cf-172e-419c-a467-be0d46f5b500","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:10:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37e9de87-4db1-450b-a987-bdad9022b571","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:15:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"79d4dd9c-93e5-48da-9827-148cfe79eb45","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:20:00","totalConnections":1}
{"durationMs":1.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f92c2bfb-574f-4ec2-9d65-e455befec15d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:25:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b84dfe1d-d748-4dd0-bf3b-19f9d1305536","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 03:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:30:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"97bcc709-6de9-4d58-aa3a-ea01fe4faaf1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:35:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f1930e5b-044f-46e1-bfd5-68ddbf360603","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:40:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd168e6f-b523-4f58-8b8a-2bd78adf1475","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:45:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6c19109c-33cf-4f4a-8f3c-f39ea3f0802d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:50:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3aeb97fc-2e43-489c-84eb-168f5ba3fffd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 03:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 03:55:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3bb70152-f8a4-477a-9c63-3a667a3cb672","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 03:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 03:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 04:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:00:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"089f69b7-194d-4bdd-bf95-5321c8eae0f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:05:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"715fa684-17d1-440a-914f-abc7685d71b8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:10:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dec9eb72-17f3-403c-8a89-ab0b080aadc9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:15:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"35efffbe-6d4c-4c01-9e0c-929141388818","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:20:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e66911b3-1819-4a4b-a195-18b0b4b84a9a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:25:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bcccc852-dbc1-4b2c-9173-58c45750cadb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 04:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 04:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:30:00","totalConnections":1}
{"durationMs":2.22,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ee0cebfa-023e-4ca7-99c1-b73a1b15a4e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:35:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15f8d9dc-b14e-4c45-9be1-79b55461b6a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:40:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52c93dc2-3fe0-4a46-8d9d-1635851a569e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:45:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dac7cbd1-6c58-4c50-886b-85092151b0eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:50:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f8055ce-9dd4-4fe2-8198-34b0e0503688","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 04:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 04:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 04:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 04:55:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"381e43b7-d3dc-4be1-aef6-6edb8614535f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 04:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 04:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 05:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 05:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:00:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"51fc4483-cee2-4244-a5a9-3ab3027aef48","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:05:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"96b0d72a-c2a9-46ed-96cf-822aeb43b2f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:10:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab520ea7-0d78-4b62-a9d0-ffed0f33daf9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:15:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7fa17ec0-df09-40e1-b9f2-a6bae0ffb21b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:20:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"313058a2-410e-4edc-8909-9d42ddf48d4b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:25:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"21420d37-969a-44b1-bf3b-edfbbcf5cd9d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 05:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 05:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:30:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"85ee5aad-6235-44f2-8937-bf91c22625e2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:35:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa2ce602-9778-4e69-b426-ad740095a7c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:40:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b235aafe-05e9-4b24-89ff-344ae438f0dd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:45:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bc9b113a-fd64-456a-a558-c30559578476","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:50:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"96c00de5-669e-4213-bc54-0e29df0f0aba","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 05:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 05:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 05:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 05:55:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"168b403c-436d-447a-b111-450c14ee6ad6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 05:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 05:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 06:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 06:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:00:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e8ea93ab-a9d0-4591-9204-7a0952b4148d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:05:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e7deb362-f5a0-497d-a481-0bd380016ef4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:10:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b1f6632-8a55-44bc-be37-a7ddb4fa6739","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:15:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c744ed59-2a10-4f3d-8cdc-7e86cfea7670","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:20:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2a050f82-f526-44ba-8dba-8258c092bfd8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:25:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"31fc3103-ce96-493d-9b8a-3fe56b3fd6c7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 06:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 06:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:30:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"34d0940f-4e95-4fbd-8b1e-a79c2f4043c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:35:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9391c4e7-f930-46ac-92f8-2d7ecf638438","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:40:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"14fab942-361a-4b3d-a655-e32bbb02f68b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:45:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"74c808c3-7803-4297-be76-aed2848beca1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:50:00","totalConnections":1}
{"durationMs":2.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cac485e1-68f0-41c5-98b7-beb19d0db99c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 06:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 06:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 06:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 06:55:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca12e7af-11d4-4d85-9968-d95316a66ec8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 06:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 06:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 07:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 07:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:00:00","totalConnections":1}
{"durationMs":2.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62319b5e-b940-4776-be4a-dcd295361f20","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:05:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3db54cad-ddb1-4fe1-b5e3-b5bd2528f1dc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:10:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"42596fcd-0941-4464-b47c-3bd0f006289e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:15:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"681d5c6b-f143-493b-beac-8ad0905b6dbb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:20:00","totalConnections":1}
{"durationMs":5.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f8c00a68-c564-4ddb-9968-73b41e803422","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:25:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ffdc740e-6e84-4f96-be5f-33a5f7edb644","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 07:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 07:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:30:00","totalConnections":1}
{"durationMs":2.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"87b1bf09-454e-4732-b300-a07bb4b68685","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:35:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"87d95982-060b-499b-b9be-9be2a2714e2d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:40:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e0de04fc-e579-4ee8-bb56-4ba87d730688","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:45:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f81ce149-60e5-47e2-94b5-9b86295a07f1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:50:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4b599258-07eb-4396-b479-2d875e112e29","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 07:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 07:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 07:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 07:55:00","totalConnections":1}
{"durationMs":2.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ed24a82-ef91-4149-9c96-aeaa8c8ce473","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 07:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 07:59:00"}
{"level":"info","message":"[CRON] Library overdue check started","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"error","message":"[CRON] Library overdue check failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/library-overdue.job.js:14:56)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:00:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"590e9799-a03b-410a-822f-49d6336d4e72","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:05:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d053fc45-ff68-4cf6-b2db-ac5645e0caa0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:10:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dc953071-100e-4f87-b73e-5e641377d460","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:15:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3338b218-1d60-4612-9a13-0dfbcc6c6554","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:20:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2f5b52d0-165f-4ff5-be23-45e003ab4c84","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:25:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c68f07d4-30f9-44fc-89bc-5dc05c0553ab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 08:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 08:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:30:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa95419d-33bc-4bd5-8d1a-3521111b61e5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:35:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"950cab1a-1b63-4da0-bda2-722cd2cf4453","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:40:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"55334e13-0f85-4670-8daa-3d15295b9d4a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:43:00"}
{"data":{"from":"/dashboard","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"41.90.64.34","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-15 08:43:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"41.90.64.34","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-15 08:43:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.97,"ip":"41.90.64.34","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"031266ca-cf69-43a4-9f43-01bd7e4f0a92","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-15 08:43:42","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:45:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5481d490-f798-4f39-aba6-92f17f881390","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:50:00","totalConnections":1}
{"durationMs":2.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"77f05881-e35c-4087-9783-150903ffa5a2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 08:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 08:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 08:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 08:55:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d9348bdf-1b9b-4954-a077-242918cf0a4e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 08:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 08:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 09:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 09:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:00:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49057353-e1db-44fb-9d06-2f993a975718","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:05:00","totalConnections":1}
{"durationMs":1.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"969bc9de-05c3-4431-9c29-6f049df5d2ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:10:00","totalConnections":1}
{"durationMs":2.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7333ea3-1bae-476d-9d47-f2b423e6ab56","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:15:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c6c03cd-32e7-42e4-8092-37b1573c9491","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:20:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0463a00e-aeea-4360-8a4e-d4fcfc880fa8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:25:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cc71d5b3-48f9-4e04-9e78-7bb723fa0476","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 09:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 09:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:30:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e56b834a-2a60-44d3-9fea-abaa913a19a7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:31:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:35:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea65fa09-96c2-4527-ad3d-a7cf8795a5e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:40:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0db77a56-ca54-432e-afd6-5e0a38da4353","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:45:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"372ec72f-1c1d-41c1-8ea6-b6d28a6f4ce8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:50:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4e5f361-362c-4f98-aab5-42bd290f27e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:52:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 09:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 09:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 09:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 09:55:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d7f11e13-7560-43b5-bf58-1d922c2ed968","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 09:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 09:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 10:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 10:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:00:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce9b9ab0-83b7-424b-ae82-fd64851ea32a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:05:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4cc06b7a-86bc-4db6-92f0-3ed22434087e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:10:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce478b69-762d-4388-b074-bc255e05d42f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:14:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:15:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17b64220-bccf-43dc-9039-0078224b5523","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:20:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"207d9187-ea0b-4f01-927d-0decc820e169","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:25:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"916cc663-520b-4c55-a4b1-046dfb342733","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 10:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 10:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:30:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"05566671-2030-4cc7-8f67-cc94abe5fb9e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:35:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:35:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:35:01","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e36dc671-f5aa-4e5f-9da3-64fb8dbe0184","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:40:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fd081dcf-9870-4beb-8346-c7481ce00d40","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:45:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"85eb0e0c-3e2a-42d2-b782-d95ce2b43dcf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:50:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ef1e9462-010b-44a5-8cfb-e697f69180d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 10:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 10:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 10:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 10:55:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b61e5735-6fd5-4bf1-bc08-6e1ddca4da9a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 10:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 10:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 11:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 11:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:00:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0bbcc876-c760-4152-9561-41843f393b23","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:05:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"625be1ac-be8f-4dbf-bf8b-d32c8cc0a0e7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:10:00","totalConnections":1}
{"durationMs":1.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dbeae570-1f0a-4ad8-aa19-fc12470788e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:15:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0dfeef16-8d4a-4d21-8863-1dc966980689","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:20:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65b7edaf-2328-4ff9-8375-0b911bca7629","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:25:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7623bda5-e512-4071-bc54-e71bfb268ee3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 11:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 11:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:30:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"437a01d9-afb1-4f75-a151-60593d5776d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:35:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e5c97e2f-2396-409a-8a6c-d110ffcc8f3c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:40:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:40:01","totalConnections":1}
{"durationMs":2.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c8b6756a-7ad4-45da-9682-6c0239d38017","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:45:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9ff6a19-e5a6-4a7b-a0b0-3ff401964e8e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:50:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7c3d38a2-01db-495b-b4cd-d636c7704e33","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 11:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 11:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 11:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 11:55:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4aba9c43-71f8-43e6-9aa4-d71124bf7217","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 11:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 11:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 12:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 12:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:00:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"93a84616-c057-4e87-82f9-e4a20d4a29bd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:05:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d564092-8dee-460f-b9bc-15fda9eac6c7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:10:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ec4d05c8-8f1c-4d3e-847b-f2795f904756","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:15:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6a05f788-3b06-427f-b4b3-2217adfe33ba","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:20:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cd7b1d58-bd89-4095-ba9e-31672aec4080","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:25:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:25:01","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9140c174-bf5e-466c-baae-4033fb883b88","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 12:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 12:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:30:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"57b67bff-9ac5-49fc-8ada-22c28ccb98ba","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:35:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"16d2e05b-75b2-4af6-985e-0ff65cb727fc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:40:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6f1b8501-a362-4924-ae4a-f117ff6111d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:45:00","totalConnections":1}
{"durationMs":4.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8aa6633a-6995-4eb1-b2fe-b69442eba891","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:50:00","totalConnections":1}
{"durationMs":3.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a249adee-87bf-4a7e-b6ef-358ca3f0acf5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 12:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 12:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 12:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 12:55:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ecb4a7b6-0bde-46ce-8703-f6e2fd3a1f42","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 12:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 12:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 13:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 13:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:00:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2caad855-18e7-42e5-8279-d3cdaff86110","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:05:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dc39d7a4-ffa2-45b9-90d9-1fc6723746d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:10:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:10:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:10:01","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c8db182-578a-4d09-9549-8b16726d98bd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:15:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f7e1cefe-4491-452f-b138-c931c216c8d2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:20:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6f1aa548-c2cf-45fb-90db-8caa318b0d62","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:25:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e063b09b-7c94-492a-9d25-80e1c6563499","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 13:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 13:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:30:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a9f4eb77-8981-4d41-9783-1b5a13030398","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:35:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dabf7f92-c713-4e74-9efc-a073cdeba2dd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:40:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a87ceb94-388a-4e54-a78d-9afb827f48ab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:45:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e0e88f7d-6189-414b-8015-e7afcb1d85e8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:50:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e93d9b05-0770-4968-b82d-ae79f48dbd03","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 13:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 13:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 13:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 13:55:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"24c6eb55-07a0-42e4-b091-1fd45a62af6e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 13:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 13:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 14:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 14:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:00:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d256cfc8-8842-4c9b-92c6-2e1506a64745","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:05:00","totalConnections":1}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ac904fee-292d-4113-9238-f43ee11f68d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:10:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3e619ef6-f19f-4ebd-a048-0d1e5077e9a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:15:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"329bac69-b30a-4441-8f12-acb0b9b9728c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:20:00","totalConnections":1}
{"durationMs":2.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"16a97976-c9ae-4779-8ea5-1cfdcceab145","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:25:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f2d2eec7-c884-4f80-be2c-0c4eacb95818","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 14:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 14:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:30:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01cb57c2-8fd8-44a5-9003-2c29f9c599a0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:35:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"26e3106d-97f0-4cec-bf01-1bf79463269b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:40:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"34fa666b-d9f3-46a7-a9f7-e7a3d0e1a261","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:45:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83c46aa7-846d-47d2-838b-3d28de7592da","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:50:00","totalConnections":1}
{"durationMs":2.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"54bcc271-4566-4be8-8e1d-35e414f6a3bf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 14:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 14:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 14:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 14:55:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"611891c7-42fb-456f-915f-c16f5a575114","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 14:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 14:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 15:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 15:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:00:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bf37e62e-0b7f-4af1-9097-e3c506766331","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:05:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c561631f-4692-4dd8-858e-f81e7e0f86ee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:10:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"42486f67-d573-4af3-8b10-5e2426708b30","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:15:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cd2e7f80-eae4-46af-a914-ed7c87269ba2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:20:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eb31fa4d-fcae-4322-80bc-9a02f0917ed3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:25:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab70662b-0fc0-4ed7-90e9-cb06e7d3f477","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 15:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 15:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:30:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"34679d03-d790-4823-827d-62422d1a7259","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:35:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9261ef0c-1299-428a-a435-d99cd80fcb9c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:40:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"18777059-dbab-472a-bd9f-231412be13af","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:45:00","totalConnections":1}
{"durationMs":1.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3dbd06a2-6a62-493a-a782-249380eec7ed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:50:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"97b81e4f-b39e-4eba-96c2-1f02cba93549","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 15:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 15:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 15:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 15:55:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed39f6bf-fd7c-439d-9ce6-5d201638915f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 15:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:57:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 15:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 16:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 16:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:00:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"616a0fd9-060f-4958-99f1-33bbba1e45e8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:05:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"710b105f-2588-440f-a7e5-d62cd4cb2084","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:10:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"be6750f2-faab-4199-a054-65aef6c0f516","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:15:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"05a66d65-251b-4984-9740-ee069c5f6668","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:20:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1529b19d-699f-4377-9921-37540e26ed77","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:25:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a208c47a-0553-47b6-945d-014738cd88d6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 16:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 16:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:30:00","totalConnections":1}
{"durationMs":2.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1de08e5-d09e-472c-9d29-878e62af13fb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:35:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9c1e0fb-e265-42e4-9942-cac570ccb72b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:40:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"701b13b7-1e29-4885-8a52-ac756128781c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:41:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:45:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f3c815f7-9ada-4a72-80ef-7954b9ea4368","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:50:00","totalConnections":1}
{"durationMs":4.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c552acac-9849-4722-9420-7248581d99d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 16:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 16:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 16:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 16:55:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fcdc620e-0b12-434d-aaa7-8cf4f9b45415","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 16:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 16:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 17:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 17:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:00:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"785c76e5-c8ff-41ae-9e47-5783bddd63f3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:05:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d9aa1d58-63c0-474d-8cda-16b7f120f4d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:10:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9ab3a6d-8e64-486c-b4a0-3b1b2e1fd434","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:15:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9e49d962-6a53-4473-bb0e-fbded14cf5ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:20:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"265701a0-0934-4675-a536-33ca82143b1e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:25:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6ee7bb9f-6f81-4e05-afbb-76374fc605aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 17:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 17:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:30:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2e94254e-aaa3-44a8-9f95-caf6cfaf60f1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:35:00","totalConnections":1}
{"durationMs":2.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4cac03b-3008-4210-88f4-bc288a36c3a5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:40:00","totalConnections":1}
{"durationMs":2.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"79e9aaa0-b4c7-4832-8805-a02729f52c29","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:45:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"91e9cb27-cb56-4137-a623-656a15e3cd3a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:50:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd13b11f-7038-40fa-b4a2-01c0badd06b5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 17:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 17:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 17:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 17:55:00","totalConnections":1}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"544a1a3c-a6b9-4e4b-b32a-12d185b62c53","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 17:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 17:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 18:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 18:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:00:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b2f025dc-0b0b-4da0-9997-0c48b514cf89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:05:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8a34fa70-e2c6-403d-aaf1-1a4ed7bcfff1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:10:00","totalConnections":1}
{"durationMs":3.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f4485bb8-a0c1-4d29-b251-12c537b03fb3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:15:00","totalConnections":1}
{"durationMs":2.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78c9bea0-02f1-4abe-80c2-ef0a1316d34b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:20:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f36a0273-7bb5-4536-a96d-98a77a125fab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:25:00","totalConnections":1}
{"durationMs":2.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d35130b8-bb35-487e-8056-f09d38c22425","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 18:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:30:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b4f982e-35cb-4467-96c8-191f6506eb9e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:35:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b198ca11-ca52-4653-9779-8679e1448af4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:40:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"08d1ef14-ced4-4f1f-a9cc-dfdb7d675960","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:45:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e614e8b0-7d3a-4c9c-9922-989f33a5aafa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:50:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"61cbbace-fc62-488e-aa9d-2e47a95937ee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 18:55:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"737785a3-d918-4580-8214-ebf72eebcd77","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 18:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:58:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 18:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 19:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:00:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6403404-2e5b-4cde-a94a-1b38dd46a006","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:05:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"98dab8d9-e808-436b-bf5b-ff9a38de621d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:10:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3b88aa06-0e39-48c5-972d-9f2a8b5bac2d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:15:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b32bf910-c8ec-4d2c-bbbd-ba042e9a5092","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:20:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c4d4554f-63d9-45c3-9712-9830665f4bb9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:25:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13affe2d-f69d-4dd1-8acd-de3e4742ea5a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 19:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:30:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1587264-b73b-4255-b554-cea2772c6bdb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:35:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d5c88b21-3863-4e52-a85e-d567a4691e56","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:40:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"70dc98f2-b8d7-4519-87e8-41272704c88e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:45:00","totalConnections":1}
{"durationMs":3.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3ce0bcf6-0445-4727-b79e-dfab97431004","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:50:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c6fcb81-0456-4bc8-ae9a-7120e12576f3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 19:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 19:55:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b21f4853-5253-4339-b4cd-c80ca651f66f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 19:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 19:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 20:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:00:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"54cdaef4-13bb-4fe4-b645-34a6c68c0ee7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:05:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ebe4da02-4399-4544-8c4f-ab55f7daec54","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:10:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c113d62-7474-4764-8bbb-a4b38222436b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:15:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3e6c1b70-36b3-49c3-a834-bc931e072063","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:20:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65573f4c-c03b-431d-8c95-5c0ad3cf4cda","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:25:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"019ed67b-2b11-4819-b6dd-b42543e82787","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 20:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:30:00","totalConnections":1}
{"durationMs":2.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"354b8874-eb07-40e7-86b1-b6145215bd92","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:35:00","totalConnections":1}
{"durationMs":3.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1b7a542-a6fe-40fa-bd16-49a095924a40","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:40:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c578331c-a3a4-4fda-bc62-4f7743e264d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:45:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0f0cb268-a6b7-4320-a6af-3f8684a10914","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:50:00","totalConnections":1}
{"durationMs":2.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"61481f2f-f94f-4b42-a14f-8d52db9940ee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 20:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 20:55:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cade833e-88e8-4ac2-98ae-52a6e6829371","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 20:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 20:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 21:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:00:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fcb54778-f14e-46fd-aab4-70c88461ef51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:05:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"acc6df73-3843-450e-bc68-8af6a1cfaae4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:10:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ce2fa10-34dc-45c5-b291-82a7e959e4a0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:15:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78569e95-9fc1-4c8b-9af6-2981442201f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:20:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"637997c0-b518-4efc-acec-c122805a75d3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:25:00","totalConnections":1}
{"durationMs":3.2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c9fae45-51ef-46b4-a233-aa11d086b1bf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 21:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:30:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9979c10d-8dd5-4e85-ba7d-e01df2318d05","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:33:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:35:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0276ee06-164c-44d2-82e2-0d42db6324b2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:40:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"069c2cd7-d428-4ada-8ab0-1a80580dfa61","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:45:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c42f7dfe-5f55-4b7d-8802-d872d7976309","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:50:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f73a7ad4-8239-49a2-9ee9-bd791fcfe833","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 21:55:00","totalConnections":1}
{"durationMs":2.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5fa02167-dbab-43a2-8ad0-ef33bb3f37b1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 21:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 21:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 22:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:00:00","totalConnections":1}
{"durationMs":2.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ea26525-0208-4acb-bf50-c7a505e7fe43","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:05:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d73cb3ed-db47-4ed1-b855-265338b3b2cd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:10:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"774b778e-e2e4-4500-9c9c-3f3a8de081cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:15:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6b01ae95-4c98-4715-a173-5c89f05848f2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:20:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8f9a36e4-5b85-42d4-a6bc-cec39b0bba1b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:25:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37ce965b-be80-4ea8-baca-fcaecec26736","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 22:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 22:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:30:00","totalConnections":1}
{"durationMs":2.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2816ee63-da58-484f-b402-525ed751c844","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:35:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"729a7092-50c9-4679-9df3-1f44f3573a7f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:40:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"da05ab25-45de-47a2-b253-41ab4fdb2dc6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:45:00","totalConnections":1}
{"durationMs":2.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"06ddfa97-d243-4424-b01d-37bf9643bd49","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:50:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"16f22e4b-a373-4e6b-8381-8fc288749044","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 22:55:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f5e755d-c63f-4e8b-bb42-cdce02c21ab6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 22:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 22:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 23:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:00:00","totalConnections":1}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"84e08a41-9092-49cb-8975-ac6538e5db12","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:05:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5ae186e1-b6d0-4449-b7b9-823933310693","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:10:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c81d9a43-e24f-4c9d-bc07-92397e212392","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:15:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"faaf7d4a-a7e7-4a02-b9ec-544f077e13a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:20:00","totalConnections":1}
{"durationMs":3.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d15d012f-4a74-4dec-b6f0-af3504a7f605","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:25:00","totalConnections":1}
{"durationMs":3.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8a10b69b-ba57-4f3d-b34a-7a188472d5d3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-15 23:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-15 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:30:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aec65018-7f43-45bc-8993-d4f2daca7b5d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:35:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5a676284-e860-4239-a8bf-93a602de7413","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:40:00","totalConnections":1}
{"durationMs":2.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5a54ca1c-b0df-4a40-94c0-fc37e3dfcd63","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:45:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"80e9140c-d542-419c-9cd7-41979d52bf57","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:50:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8390226e-e6e7-49aa-be4c-70a94e221eb9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-15 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-15 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-15 23:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-15 23:55:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e000908e-72d5-4f94-a077-6681aa4fd834","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-15 23:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-15 23:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 00:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:00:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c4b200eb-7a8b-4fc8-9574-5d4134ac8c78","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:05:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f9be2e11-aadb-435f-810b-0eabb2903aba","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:10:00","totalConnections":1}
{"durationMs":2.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"849104c6-7755-4634-a6c5-e88a51ed69ef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:11:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:15:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9e05895d-f368-4244-8e02-4a4980065b25","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:20:00","totalConnections":1}
{"durationMs":2.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9f5c99e2-cb63-4c5c-9f1d-9639c7b68dcc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:25:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"14be552d-bf10-40f1-b06d-4ad3915c1ee7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 00:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:30:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f842bc09-8737-48c4-b3e4-4e6d9b74f4dd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:35:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"be5352b3-f4b7-4efa-95de-af7c1f291fe6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:40:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa069e1b-e3f6-4bff-a901-705cb53f9d29","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:45:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13979e39-a196-4b38-977e-3eda2cecbf3a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:50:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff67f28f-8578-4eaa-9f12-b549b11a70b9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 00:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 00:55:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bf330842-e348-4476-99de-6a7f9e98e734","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 00:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 00:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 01:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:00:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"25443c07-6957-4a67-b109-190af48dfb07","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:05:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bff59ea8-c500-4115-8e2b-a737fa7ffc52","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:10:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"472f694b-8ead-41dd-a0ed-3550d2c94f2a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:15:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17953cde-f31b-45c8-a0d6-f6f222160583","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:20:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4b71b794-7da5-48e1-b00f-e4d2b2904127","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:25:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"390f0507-4ae8-459d-9957-ffd81a26be28","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 01:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:30:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca8e63ec-0bbf-4f43-8027-91244c4a8a62","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:35:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c2c5ca9c-4d78-4f50-b633-79c7c4e46edd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:40:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8074dfd5-2a03-476e-b465-70c5f027cb16","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:45:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"19104476-f7e1-448a-8a26-9cacc5b2b0a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:50:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76b83a77-fcaf-493b-adda-56e7bcf584f3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 01:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 01:55:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"46980e84-4c65-4aa4-b40c-4ae315b3d1b2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 01:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 01:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 02:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:00:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd11ef8c-48cb-4856-8861-a278fac23f68","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:05:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d55b55bc-b06a-49d2-94af-11107dfbe818","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:10:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b5a6e46f-48da-4c69-a83f-95dbb2838f97","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:15:00","totalConnections":1}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"203d27e0-ba6c-4701-aca6-6bfaa3e4d193","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:20:00","totalConnections":1}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e8943a6f-b297-4504-a4b3-7b314a9ec9c9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:25:00","totalConnections":1}
{"durationMs":2.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"327ea8e0-e8c7-48b7-8469-ce3cfd24806c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 02:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:30:00","totalConnections":1}
{"durationMs":2.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1e8e99f0-65f8-4e9b-b51b-e1c61cdee4a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:35:00","totalConnections":1}
{"durationMs":2.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"04fc2c07-7798-4ce7-9fc9-2805df5e46c9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:40:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8a61a825-7a6b-4f8e-b4f7-cff830f3d9e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:42:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:45:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8bace419-7d30-442a-94d3-7651dc3eec92","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:50:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"897c66e7-6227-4285-abf9-dc50ce50da89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 02:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 02:55:00","totalConnections":1}
{"durationMs":3.24,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7df58340-f847-4655-b848-1b3191742ae7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 02:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 02:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 03:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 03:00:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:00:01"}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"10abaf33-e176-42a9-b852-e7e2dd833c3d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:05:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca1d0756-43a5-498c-ab5c-e4fac79df348","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:10:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"40aeb364-b08c-439c-a90c-80d2aa5da429","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:15:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c5dc5f6-f276-4554-b26f-18c6cfe15358","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:20:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca372e6f-c4cf-437a-8e1d-6b1ccfa82b34","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:25:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6af09e4b-b180-4e32-a35f-66161b281c25","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 03:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:30:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"43081edc-d06f-4eba-a260-07e836ee4001","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:35:00","totalConnections":1}
{"durationMs":3.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7a1be073-7920-4f3e-b42d-82d282e9cd84","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:38:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:40:00","totalConnections":1}
{"durationMs":2.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0e41ee48-9e89-4f27-a10d-0fe618bba537","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:45:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"97e590c2-3819-45ca-8c10-6f2211613a7e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:50:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1011d561-807e-4eef-9a51-7d4614f3aa19","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 03:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 03:55:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"891543d7-ae77-46e3-9dd8-61015e5aa202","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 03:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 03:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 04:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:00:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7dec5a57-340c-47a7-ab3c-aa03f492aa8f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:05:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"39a482f6-4cd9-44ae-9044-260ca3340acd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:10:00","totalConnections":1}
{"durationMs":3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c42b2b58-6bff-4141-8259-f471c98803de","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:15:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"faed2c88-4def-48db-ace9-92707e5db301","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:20:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"81fab366-50f5-4f68-9dc9-d36b992db9b7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:25:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9157bb0b-48de-4fea-9f7c-265cd96a9f61","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 04:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 04:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:30:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"be5036ac-9daf-40e0-9d9f-027786e0cbc9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:35:00","totalConnections":1}
{"durationMs":2.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8244135f-40af-4395-8d6e-4f2777bf97b0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:40:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5fc09aa2-13a2-4199-affd-ac2fdec11879","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:45:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c2198699-64b1-4cf0-9351-31b73c9426d2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:50:00","totalConnections":1}
{"durationMs":1.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea2cc82d-a22a-4e04-84a8-e1c60ca0daf6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 04:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 04:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 04:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 04:55:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6a74ac9b-7096-4e7f-adcf-2e353f04db8b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 04:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 04:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 05:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 05:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:00:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"53095207-d19f-4d0b-9d4b-61a5b84b3305","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:05:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea8a0e11-ae9f-4010-a68a-d450b3c1beab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:10:00","totalConnections":1}
{"durationMs":2.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ccb68ac-1d2c-44fa-a99b-d752b31cf724","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:15:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c49d8ec-bfcd-47f2-a635-2405efbb5122","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:20:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76f099e0-6fea-46c1-ae69-cef645227a98","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:25:00","totalConnections":1}
{"durationMs":2.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5e047b22-6a60-4727-af5d-9295f3d44635","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 05:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 05:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:30:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3cce75c7-d809-4a40-aa87-1b7cc0bb6313","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:35:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dbc42714-7ace-4076-a81a-47716f8d04fb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:40:00","totalConnections":1}
{"durationMs":2.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6f6d077a-16d6-4487-ab77-10a1845d9135","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:45:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"74b5d570-6376-4850-acc8-bb00fd9e9536","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:47:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:50:00","totalConnections":1}
{"durationMs":2.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6eeb8907-4db4-414f-938b-b6bba4171389","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 05:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 05:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 05:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 05:55:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed09342e-c3cd-49cd-a16d-c77472e3a83a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 05:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 05:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 06:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 06:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:00:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"82d34ab2-7b38-4669-8652-dc627caae005","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:05:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:05:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:05:01","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c6679357-2be8-41ac-8738-06e7e403c899","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:10:00","totalConnections":1}
{"durationMs":3.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d2437c91-aedb-4053-b9c3-482fb3b30171","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:15:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6860c0b9-6a45-4b9a-b16b-83a2434ff5f5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:20:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15a2d589-63cc-4352-a4d6-21f47ae13685","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:25:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"69680884-d7fd-4d79-b9bf-69ceddd5da73","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 06:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 06:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:30:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b1c1e545-6f28-467c-9612-37d960adf58b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:35:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"319c72c9-e0e4-4bce-9b4b-466bc20a5a7a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:40:00","totalConnections":1}
{"durationMs":3.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76f84b74-479e-485d-bdfb-14de4215dc33","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:42:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:45:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c65c4fa0-6ad9-4e27-af7f-350654dd3c0a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:50:00","totalConnections":1}
{"durationMs":2.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7d57c519-60ab-48b4-addf-29d2d43e8a9d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 06:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 06:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 06:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 06:55:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3844ddc7-1cdf-4390-9a24-6562c6af2c61","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 06:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 06:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 07:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 07:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:00:00","totalConnections":1}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f5355101-833b-4fe0-a3b3-3dccf6394dc1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:01:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:05:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0726d252-4b59-4c85-9dcf-f3c8820ee5aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:10:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0965160a-5986-4841-8153-d5a880c20a89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:15:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f5709d60-b72a-44c9-826a-822910093541","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:20:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"95bb772b-aed9-4685-b771-c2e0d42e1d6e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:25:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5aaed3c0-c8f5-4215-a103-4717bc4a6a6d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 07:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 07:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:30:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"482d1e8a-43e4-4f14-8633-4d6397b33ac0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:35:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"08888622-fb81-4f63-b216-e0fc45604693","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:40:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e983aed9-faed-4e67-84d0-41e5ce060abf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:45:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"899e0f4d-f116-414e-8fa6-7a7f0fb35e79","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:50:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f1dd5143-70f8-4fff-afe0-14117f15cb42","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 07:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 07:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 07:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 07:55:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a1baff9d-d531-4f9f-9d5f-6f191edd9b04","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 07:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 07:59:00"}
{"level":"info","message":"[CRON] Library overdue check started","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"error","message":"[CRON] Library overdue check failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/library-overdue.job.js:14:56)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:00:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6186b612-44be-44ad-bb39-58776a5039ae","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:05:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"75be4c35-b562-4e97-b5a8-a2004b4c3f1c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:10:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49037998-1c6f-4c82-b913-5a450678dc14","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:15:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"432fb37c-d6e7-4da0-9db0-7babade045c4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:20:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6d93562c-3cda-45d4-9f0e-069e882622a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:25:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed42fbe4-e537-4678-a8af-f3d1bb910056","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 08:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 08:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:30:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fc8b1790-d301-45c1-9c60-3793b8f84bf8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:35:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"632ede5c-851f-4ade-be77-5c244a602724","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:40:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c431b2e2-3a3b-4d5d-bd34-f7746d2068c6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:45:00","totalConnections":1}
{"durationMs":2.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ff781b3-46e3-4f35-9b27-c2721718595e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:50:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6f1e78d7-3c71-4540-8ca6-574de51c9ab9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 08:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 08:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 08:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 08:55:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"69adb32a-ac90-4cb4-a941-4358c94f36af","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 08:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 08:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 09:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 09:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:00:00","totalConnections":1}
{"durationMs":2.24,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"de345ef9-f0c8-4931-b2c4-81e529326886","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:05:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"54625db9-f480-41bb-898b-67cf7e8e61ff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:10:00","totalConnections":1}
{"durationMs":2.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3c0a0883-e077-47f0-ba24-4a360d93c0e7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:15:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b2e97c6a-1849-45b7-b924-ad38cdb5f5eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:20:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6133c26e-fb65-4a7b-bcd6-7d19610b752a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:25:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9df695ae-2600-46e2-aff1-4e568a35ba1e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 09:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 09:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:30:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"89a14c5c-8ad1-460d-a1ea-81582604be5b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:35:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c50d77e-1b14-4682-9ce2-c29455887df1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:40:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8f31a35f-a9b6-43b5-8b63-e97ccf77028d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:45:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"95cb1522-c61e-4290-b6eb-c260b2af7902","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:50:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6d273bcc-1ed6-4fa8-9a45-8a6660558c15","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 09:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 09:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 09:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 09:55:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d847c837-358c-4a35-be65-186affeee88a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 09:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 09:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 10:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 10:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:00:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3f62c1d7-1276-49fc-ad3f-4431ab638251","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:05:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5dcb34fa-7713-45f6-a546-3e18a68f6e70","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:07:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:10:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"387fdfc7-dbbd-49a1-99c4-3d1cdb20baee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:15:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"175b7814-bfaa-43ad-a7c1-49a3d2b3950e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:20:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ec3e7bce-40d2-4da6-b5e8-51149f9dd9f6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:25:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f617f2f2-86bf-42d4-bd61-085d70a817b3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 10:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 10:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:30:00","totalConnections":1}
{"durationMs":2.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aef2eb98-dd0f-4f3d-9be5-63b924be1dbf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:35:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d5834525-55e9-44c5-a44a-4523b1c1b9ab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:40:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a6d4fdf3-7a73-4982-ad31-ce08e1baf1d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:45:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e230d819-45a6-4c6c-9a42-396223d83ac7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:50:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a93a1b8e-6723-45be-9752-cc27bb7b51e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 10:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 10:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 10:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 10:55:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0a38482-358a-4d08-ac26-1a1a949cd177","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 10:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 10:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 11:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 11:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:00:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"abaec2ed-c38e-40f2-8626-20d47ca8d75a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:05:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0f9aa6c2-cac6-4fcd-9acf-322e4b705de1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:10:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"96d15531-155f-4cf1-ba3b-7fd7cf725a33","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:15:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c2d30829-8b49-4b6b-9c64-45dd6d301136","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:20:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83916e18-d56c-4f17-9844-4c28a2948873","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:25:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0ec5f1bb-928f-4ede-b7d1-5d5c428ac93f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 11:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 11:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:30:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d42150f5-05c1-4ab2-9577-1419b18bf6a1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:35:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c927c739-da4b-4a29-936b-f640defc7703","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:40:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d19be27d-3b1c-4e7c-a148-635ba3136fbc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:45:00","totalConnections":1}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5655b231-9729-442a-9a26-b07e02917fda","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:50:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e9562994-309a-4e38-9e1c-66d53d379f06","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 11:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 11:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 11:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 11:55:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d3dfd4d2-71bf-4894-83a3-4c7ecf150129","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 11:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 11:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 12:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 12:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:00:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"86778e2e-cf04-4802-9c29-76068f321971","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:05:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"91ed4200-ec69-4f50-b26c-0180182e5884","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:10:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c26bef3-f1e4-4cbe-abc9-51aa1d506855","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:15:00","totalConnections":1}
{"durationMs":1.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7abc6cf0-676d-4ffa-8616-21c6150fa578","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:20:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c79ba56b-e1be-4279-b4dc-0ec7f9de91d7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:25:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"56f43e23-130e-4378-85d1-390a44afafcd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 12:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 12:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:30:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6c1b2060-56eb-4c51-9c78-74a814eb9649","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:35:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2af95468-4585-4eee-ba23-d069c0ca9a1f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:40:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"43168376-d8cd-484d-aa3a-73d6dff0b7d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:45:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2aaf21ec-4439-4e39-9c55-cd5d86e6dc78","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:50:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"252c3993-2136-40b6-ba07-c189f45e0ba7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:52:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 12:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 12:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 12:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 12:55:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7a0e775a-fc6b-41b0-b5e7-6f72f0af4c84","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 12:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 12:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 13:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 13:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:00:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65ea4693-f7c3-42ba-9327-133d36e3ef88","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:05:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6da2d0a6-d7c8-45ac-a9b6-aee495618acb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:10:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62518582-dd6b-4569-88c1-068a947b253b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:15:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5947d093-a293-4205-82b6-0c4c41b208ac","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:20:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad0c229b-6e1d-45ca-a87a-20aaf5c46342","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:25:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7cfdf4ff-bd39-4700-954e-a012e41e7147","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:30:01"}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f072c8d7-803a-4067-b11c-4d46ac6755d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:35:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4f847322-e2de-4ea9-b887-5c15dd3724f0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:40:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ba2fc63-8bf6-4403-97aa-3e5e68774184","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:45:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4e08012b-f178-4bea-aa31-6b6a59d0e310","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:50:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c37c8d65-3ff8-49e5-9219-8fef3585159b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 13:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 13:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 13:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 13:55:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0075a444-6ca0-4a9d-834d-b630bc38779b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 13:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 13:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 14:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 14:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:00:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78ea0fb8-c3f5-449c-a1f3-5bb750e4d5cf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:05:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"456dac8f-e348-4f4f-b10b-4f0368b0cd98","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:10:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"246858fc-2a3e-4d98-8c01-757fb0d0ee01","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:15:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1910c04b-0760-40f1-ae90-61b52bd42d17","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:20:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"274eeb40-09ce-4c98-99bd-772d746fe813","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:25:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"421da7f4-9824-41ba-9252-7fea36a3c285","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 14:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 14:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:30:00","totalConnections":1}
{"durationMs":2.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9aa9cc4-b68f-4ecc-979a-f024502fe72e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:35:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"630a959b-0aaf-4002-b96a-d116b884d49c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:40:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e11a663b-e1fa-45c3-b3b3-cad467cb389f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:45:00","totalConnections":1}
{"durationMs":1.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aebfcfe5-2545-4342-a5be-cc8d5494d0f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:50:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c06d862-3017-4732-97b0-bc449c72412b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 14:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 14:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 14:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 14:55:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0d5e3eed-bb64-4fe0-a133-3e1345643f07","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 14:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 14:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 15:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 15:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:00:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dcc7f4ba-33bd-4f78-bcd3-511a00e79b66","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:05:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13943a38-9986-4697-8a95-a0e47142bf67","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:06:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:10:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65b5e3c4-4bca-4f7a-8875-d8de8ecd6d60","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:15:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0259445b-4941-4b6f-998e-bbc2bbb3d648","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:20:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ed4ada9f-f886-4d70-9be2-7a162509d8ea","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:25:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fa01e281-971b-48fa-9c4b-d80c7fb7dd43","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 15:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 15:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:30:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3eabcc09-c47b-4a65-a7e2-cf4208b43d63","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:35:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"672de59a-7503-4a61-bb5a-23c0dbea1d0e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:40:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2de620c9-c1a0-492f-a37f-ddeda7b2040d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:45:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:45:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:45:01","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cc35eec3-5c2e-4191-bdc5-8507b5e91bf2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:50:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a44d022d-c450-41fc-80a6-7e8012a5d53b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 15:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 15:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 15:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 15:55:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52fb9441-2aba-4c0b-9cf6-8b1a96bed181","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 15:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 15:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 16:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 16:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:00:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"514c1ea5-71b0-4150-808b-2ccfb26a9a89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:05:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"081a6e48-b37e-49d2-ae66-0947129845de","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:10:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2bf71a37-5338-4b4f-8edf-28df9bccc94c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:15:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"00fde5f9-b2a9-436b-9247-a5e21a77d9b8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:20:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"66a03cde-ca8a-406d-bed4-a19a3df5a05f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:25:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f7b98195-cc7e-4651-b450-909ef260c975","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 16:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 16:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:30:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e285965d-8b9f-4e10-a725-7c923a7a61f6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:35:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"91bc6ad7-cf5c-4ac3-99df-fb672cae1778","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:40:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f01019cc-cb29-4078-ab79-d852cd6fd573","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:45:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"76ffd1f0-5e40-43e9-ae16-fa5d9ade1534","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:50:00","totalConnections":1}
{"durationMs":1.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"51a7881c-fe9f-4894-830a-fcb1916e07a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 16:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 16:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 16:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 16:55:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a34e9307-20c4-4ccc-9ff4-3c3c57ce34c5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 16:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 16:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 17:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 17:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:00:00","totalConnections":1}
{"durationMs":1.76,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f9e37f5e-36f3-4d3e-9b18-10acf7d61fc8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:05:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"14cca416-4292-4ea0-9343-f4f35c3a0e55","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:10:00","totalConnections":1}
{"durationMs":2.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"26f1eab8-a181-4ecc-be21-f371b6f2a43d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:15:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0d12fa33-6ebf-4a37-acee-599c8fbbed54","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:20:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d59ea787-9302-4fa1-a8ae-6730d26b7572","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:25:00","totalConnections":1}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6c22802f-feaa-4387-9720-9b2a8209724f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 17:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 17:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:30:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"919ba955-9e3a-412b-8f15-2e6f86e86874","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:35:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a2c49f1a-165f-4c87-b430-3c0c387ec7be","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:40:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"809e1a5e-4448-436b-b4b2-27594d1a73ca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:45:00","totalConnections":1}
{"durationMs":2.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"41737da1-4334-4cd8-a1ac-d91ae85a3927","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:50:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b25e1430-85c6-442e-9dc4-f0c730cb38ca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 17:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 17:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 17:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 17:55:00","totalConnections":1}
{"durationMs":2.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"88c78e3f-2a41-4e1d-b8e2-9df3ab7ee919","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 17:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 17:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 18:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 18:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:00:00","totalConnections":1}
{"durationMs":2.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"28fd8210-f4fd-42d7-984d-7d2ed1d724c5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:05:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9bf23dcb-353f-47bd-b32e-6f19a0a5e21c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:10:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23a01b14-acf9-4cfc-b6fd-db8f7b270ae4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:15:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"91d441f3-60b7-4a6e-bb4a-bb724f2b1c52","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:20:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7d70780d-7306-4218-8c0c-98bd436f6310","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:25:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab4afaab-bb89-4754-b962-a66c3561b91f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 18:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:30:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9914a4d6-9156-4f2a-8c18-48b699b3234f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:35:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bf8d451f-8227-4f69-b369-9fe6b5ad892d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:40:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff3a71c9-659d-4dc4-8388-d192e7f3f085","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:45:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6073efa9-72eb-46b8-b178-f7db65464e42","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:50:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b077ba0e-f935-404f-bfd0-4159fc63f00a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 18:55:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4eedde3b-0d1e-4c33-8020-31d6a1cede77","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 18:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 18:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 19:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:00:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c72bf285-da3e-4689-8655-a5f4ebf6e2f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:05:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9ff31034-3727-4e48-9ef3-707c63205444","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:10:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9f684a1d-86ac-4ed7-9cd7-8f31947bb232","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:15:00","totalConnections":1}
{"durationMs":2.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b451af24-32a1-4079-a65c-e509b467daf6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:20:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f3fd848e-ccd6-4f91-9046-5d46991df7af","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:25:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"430f7c95-dab4-4a5c-89b5-bb9b71eef22b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 19:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:30:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a47d8aef-df12-4184-9419-809c27260eb1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:35:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d11903b4-e567-415a-b78f-fe9e137b5d45","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:40:00","totalConnections":1}
{"durationMs":3.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"57f5a056-4774-4e2c-b93c-698ffaa33fbb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:45:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"828b70a7-2b92-466b-8920-63e117838238","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:50:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0fa20a4c-9ba5-4fe9-a21b-a10fbb594eae","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 19:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 19:55:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a95e1a05-18ee-426a-b456-41851d8ac822","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 19:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 19:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 20:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:00:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3d14e11f-838b-42c7-b801-56499ff66a93","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:05:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f842ab8-3a71-4cfa-8131-e38617836e56","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:10:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f2c71350-f2c0-4c22-9bf9-1f62eb01cd40","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:15:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fe110bd7-97c2-4a10-b5c7-973b44761097","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:20:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"edfa2e75-1e97-419c-8f40-4ba0316eb4aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:25:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0d216d2b-c852-49cc-bf79-849543bbd44b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 20:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:30:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"93ff7874-55c8-41f1-872d-4d37e41882e1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:35:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01ea1f20-bd0c-46fb-85a1-3666c80479cc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:40:00","totalConnections":1}
{"durationMs":1.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"29057416-ea91-4f9d-be87-fd2d5e8e9342","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:45:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b0401539-0261-4e9a-87bf-9502c310ad66","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:50:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4417c6ae-f0a1-4cc6-927a-7f21e64bbfe8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 20:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 20:55:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c28e573-7cb8-423e-9971-1a74fdc2940c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 20:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 20:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 21:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:00:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4988887f-10a3-4e47-8cb3-582054758b36","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:05:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c94c6ee1-33ac-41ef-932a-db188f425e5c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:10:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"039c5ec7-5485-4047-aaab-831e692571b7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:15:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9e4247c7-0d1b-4ba5-b170-500bbbc1e917","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:20:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a63050c6-7789-4276-bafa-68015afdd2b2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:25:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bddc315b-dae6-45ed-9a11-28e8fbda6105","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 21:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:30:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a56cc25-3818-4fde-8311-f99e9d72f83a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:35:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a04ac3d2-4cf6-429f-86c4-b1552525f419","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:40:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4394965d-4509-4d8d-9516-dd6135fbc034","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:45:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4adbabf2-9331-4456-bdb4-da634656dfcb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:50:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"79bd2628-71df-4a13-bf16-33a40a9fb5e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 21:55:00","totalConnections":1}
{"durationMs":3.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4f7cf2b6-bf71-4197-9911-a81bb1a87ec5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 21:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 21:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 22:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:00:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e9b2e01d-c016-400f-9c64-0a75069c1ba5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:04:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:05:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ef145d9c-6676-41de-b303-35a2f7146381","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:10:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce4cd9e8-176f-4c29-b803-782c13558684","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:15:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4d02a215-235b-4023-b7dd-f1255afdeead","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:20:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b79eb870-0460-4ebc-8503-0cef0e676860","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:25:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"223499de-7319-4f6b-af3f-a332fd40de5c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 22:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:30:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"38518a9a-f231-4167-9404-65df7ddf7d98","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:35:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c3aa3414-c2fd-4bba-ab57-b68547a0f234","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:40:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"12dd3476-27fb-47b1-9197-661d5c71a6ea","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:45:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8ca1167f-dd5d-4e43-8c58-ea6303fdfeca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:50:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ece50d74-fa72-4565-88a3-edcf6e3f8019","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 22:55:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c07b899-7265-4cb8-813d-5bb25fd479f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 22:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 22:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 23:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:00:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0dbeb1b8-6aaa-41b0-bb19-78d6dc4c88b7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:05:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fb3c82a0-3789-4acf-82f9-546eecc637c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:10:00","totalConnections":1}
{"durationMs":5.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c643828-4c77-43ed-8592-c998933ea02e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:15:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"979a649b-004f-40d4-a924-1a1e028d5480","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:20:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ec1dac3b-22b1-4f41-a195-c4eba44150b1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:25:00","totalConnections":1}
{"durationMs":3.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a3a0187-94c0-4adb-9da3-02ae7968d041","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-16 23:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-16 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:30:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7bc78ac-b749-4e5d-abcc-649e14fe0765","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:35:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"500b6c6e-fce0-4064-89de-bc81f0d7e1a5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:40:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5551ceb0-c36e-448c-9a55-7fe800674835","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:45:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"22903afa-1825-4ddf-9faa-fcafde5c0232","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:50:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fd24e3f8-993f-4eb3-b5e7-78f554da29a5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-16 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-16 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-16 23:55:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-16 23:55:01","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"235bca70-1673-4259-a724-81d164381feb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-16 23:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-16 23:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 00:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:00:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f7e602df-6ed2-413a-a323-15bca9ada6d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:05:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b7df7cde-5b81-42f0-bc19-39ad9ab6d21f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:10:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9bee8f96-13a9-4c83-abf7-cd3138e954eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:15:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"40d7730d-5387-49a2-b243-9fbf75f5971c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:20:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e8a93dac-3e3f-40ce-a833-ed8137bb1cf7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:25:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca39abb4-4189-449b-a5d5-4b494b06f44c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 00:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:30:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bfae8b58-ed74-4e34-af66-7a5cb97eae9c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:32:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:35:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01e43de9-9fb6-4fa3-80d8-cac249b624a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:40:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3be36273-8fc2-42b8-bb76-d98b4b13b8a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:45:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e217899c-e7d3-43a1-836d-ec91894976a9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:50:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"753158fa-421e-48f4-b490-b73bead09f3c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:51:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 00:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 00:55:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"183c7d5e-4477-4e94-92d8-6958c8bc162d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 00:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 00:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 01:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:00:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"22efc59d-0c32-41fa-8cac-9e479cc70154","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:05:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b8a4ce38-8f53-46d1-8d71-3067468f7058","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:10:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4aad2fb-fe6d-4570-a4c1-bfc1b1d993d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:15:00","totalConnections":1}
{"durationMs":4.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6cf900da-f39f-4f9e-877c-b112313c7971","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:20:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dde528e7-4a59-46bd-a965-0b482132c21a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:25:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ecd22a02-4548-4557-842b-a84bd0fa1309","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 01:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:30:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0bcb3787-3d29-4c7a-838c-99037c7839a1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:35:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8178f0be-afd2-4a11-8207-e7e3c7d0eb34","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:40:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"43bdfcd3-dd7b-4a24-8957-c8c3dd51227e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:44:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:45:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"47b44688-c8e5-4e3b-83cd-ebbb4040b1e1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:50:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8e54641f-f98d-42ba-85ad-37b09f34a70d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 01:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 01:55:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e665a607-c3eb-42d3-b8c1-1fb49b2f0f51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 01:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 01:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 02:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:00:00","totalConnections":1}
{"durationMs":1.39,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4467d8fb-f3e3-4f7c-acef-7625d41a4500","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:05:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a56697ac-6487-4a94-8811-f73d06653da2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:10:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4e4d4964-9c6e-43c8-aeab-307d1d93e888","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:15:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8cbf1ab0-c9ac-46e5-b4c5-d67e7b6eb4bb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:20:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2c91f625-0e45-431a-a502-d4a840539297","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:25:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c5d35329-74a2-4256-9d7a-1b37db796d9a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 02:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:30:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3a98e5c0-80f4-4957-9e43-9ef378ba607a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:35:00","totalConnections":1}
{"durationMs":3.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b1e07e3-91cd-411b-9f9d-f05c69c3166e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:40:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:40:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:40:01","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"917d6aff-4ba3-475e-bee0-4fdfc444e484","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:45:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"938113c6-bc37-43c8-8534-9670f80b6a20","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:50:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4bda2c47-e86e-496c-af76-bd0f9665231b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 02:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 02:55:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7331aeaa-6d3d-4c39-a4f9-2b9ac2786f94","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 02:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 02:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 03:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 03:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:00:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7be1938-7749-4f4d-ae53-158125d89511","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:05:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a2d2bac4-d8b0-4dd0-b9ef-7b21ed70849d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:10:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca3e65ab-3244-43b8-9d5a-25cdddd80150","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:15:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1b4152c6-60f8-47e8-8e33-9eec8c7a7230","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:20:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1fc92707-e42d-4549-9689-ea7ad5ada3cf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:25:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5721767c-96be-4433-8bc3-065affabc655","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 03:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:30:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"65bcd066-c3eb-4e5c-b215-8e70fe8c9b84","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:35:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c813a415-7947-4f70-816c-b1cb52852e6a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:40:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"77288248-91fd-42bf-9259-79b9a2f6f32e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:45:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f2756e42-3da2-47f0-a799-3a9252a6bed6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:50:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fca695a2-5af7-43d4-9721-95a8dbb8cd35","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 03:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 03:55:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"836db0b1-9b14-4773-8769-4ed2797c0bef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 03:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 03:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 04:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:00:00","totalConnections":1}
{"durationMs":3.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5597f9bc-bfbc-44ea-9c44-78baa11dbcee","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:05:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"208eeeaa-f015-47d0-9523-be9002362a69","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:10:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6d9d8f6c-abd3-46ae-bb6c-021a5bf8bbda","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:15:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9129fe64-cf09-4cb3-a10b-daed42f7dc0b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:20:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c4dd1399-b457-4765-9992-2acf8663d654","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:25:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"25a96f57-3f48-4c65-899d-79570d58e170","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 04:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 04:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:30:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0da79ad-1c81-46db-89fc-df54a88374c1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:35:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c69ab53e-9daa-427e-b4d8-d0c2e54658d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:40:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ee6c1c67-a2ed-4c97-99c1-3e78e002d52e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:45:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6432b7b4-3694-4cb9-ad70-b2b8d57695f5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:50:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"166ebee9-de46-4c6a-b09e-8a16c64256c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 04:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 04:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 04:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 04:55:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5960406f-dcde-4311-82b1-d774eab684a5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 04:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 04:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 05:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 05:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:00:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aa4cb869-2f86-4eda-938e-21540e13d8e1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:05:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0fb8e7bb-948d-40c1-98ab-b816398616e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:10:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"47b0abc5-c890-40da-a3a2-f2fe055c0219","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:11:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:15:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"81ae62f7-398d-4285-a8ab-718536e8e560","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:20:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"45d14e3e-6f7b-4a0f-9884-0a8545813765","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:25:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2af2bbf0-1aca-4da9-84ea-d53168489157","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 05:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 05:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:30:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:30:01","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0f3827b-d703-4400-be51-09971f2f18d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:35:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"00967df7-beb8-4cf7-806b-540986f5222f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:40:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"87ff6520-349b-4a0f-8333-7a3c894c412a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:45:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"735aae71-c4d2-4476-ab04-c7f851166577","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:50:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d44d57ce-8519-411d-beb6-165d741b0e99","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 05:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 05:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 05:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 05:55:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1a2121b0-b6a5-468b-be08-7b84eb550789","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 05:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 05:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 06:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 06:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:00:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"618fa16d-13fa-4890-970d-c47abde87cf8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:05:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b9e1726-fabf-419f-a22f-86960da631cf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:10:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"959f6d42-10c0-4544-a23a-749fc947f63c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:15:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d0e45a5-7760-4bb7-9b2b-ac2e53d7c66d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:20:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"02aa6a2d-6dce-467f-b23c-7fcaefc2f517","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:25:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fc9990fb-86ee-43fc-9e1b-623c4c8bc354","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 06:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 06:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:30:00","totalConnections":1}
{"durationMs":1.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c001855-3906-416d-b87c-251c4ebc750d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:35:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"33b55156-9b81-4322-afb4-2aea63c5f686","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:40:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a9f23a6-8c28-4776-9c94-e4b660b7605f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:45:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8a8fefdf-97af-4e9b-8320-1b3939d853cc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:50:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"63d2cf2c-04fd-4193-bfa6-944379c80a47","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 06:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 06:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 06:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 06:55:00","totalConnections":1}
{"durationMs":2.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"25fbea64-2c9a-4d82-839c-9694836bab9b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 06:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 06:59:00"}
{"level":"info","message":"[CRON] Arrears reminder started","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"error","message":"[CRON] Arrears reminder failed:","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:00:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"293bdb96-21b0-4cc0-9344-cce2db66716c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:05:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b7977cb4-0d52-4c68-9981-ae4815d7156d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:10:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e13bb2c2-446b-40e6-9ab1-66eb28f2e8cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:15:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ee5eab11-f2ea-4200-bd11-9ea90190d119","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:20:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3459df58-ff76-4b47-bd33-86454587c302","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:25:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e42c8c23-ae6e-4a41-b0a0-1d0044ae7b74","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 07:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 07:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:30:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1c6d605d-a1e4-4509-acb6-258ed227c837","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:35:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b9c598f-689b-44d4-82dc-f22da273a617","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:40:00","totalConnections":1}
{"durationMs":2.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0914190e-4963-4bcf-83fb-1ae6e3510f0e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:45:00","totalConnections":1}
{"durationMs":1.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aed14730-b4c2-4c99-94c8-05a6018ee75c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:50:00","totalConnections":1}
{"durationMs":1.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5920fdae-587e-407b-b013-01729c4509f1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 07:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 07:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 07:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 07:55:00","totalConnections":1}
{"durationMs":1.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"42df341c-dd2b-47ef-8a20-fd526c8f4e5c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 07:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 07:59:00"}
{"level":"info","message":"[CRON] Library overdue check started","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"error","message":"[CRON] Library overdue check failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/library-overdue.job.js:14:56)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:00:00","totalConnections":1}
{"durationMs":1.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"564e4640-ab6b-47a7-bb00-4a54320f21dd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:05:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cb139297-f8f2-414e-9474-8afbd20f711c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:10:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0a0937ee-9033-49d5-8dc0-60f5e346f9c3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:15:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a66280e6-587a-4338-af45-a4b18ef88bfb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:20:00","totalConnections":1}
{"durationMs":2.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4ed7b550-6dfc-4b96-a5cb-7e1708df70a2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:25:00","totalConnections":1}
{"durationMs":2.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"62293340-e0fb-4f2c-9d8c-bd1c188f9bed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 08:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 08:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:30:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"840be125-d5a1-45ee-b044-9d62790101be","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:35:00","totalConnections":1}
{"durationMs":1.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e0237050-6ec7-4fed-b8eb-b25a64449a69","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:40:00","totalConnections":1}
{"durationMs":3.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cd545bd6-454a-4047-a127-0e3f25ecff4e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:45:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6b547eab-0ae1-469f-9877-d132a2c3241c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:50:00","totalConnections":1}
{"durationMs":3.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c27e2e95-e180-4b0f-9d61-28355a6caffb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 08:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 08:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 08:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 08:55:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3b4ed19b-e8ec-4a0f-9109-ceab3e2e78cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 08:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 08:59:00"}
{"level":"info","message":"[FeeClearanceEmail] Weekly job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"[FeeClearanceEmail] Starting weekly fee clearance email job","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:00:00","totalConnections":1}
{"level":"info","message":"[FeeClearanceEmail] Found 0 cleared students for kisii Highschool","service":"cbc-sms","timestamp":"2026-08-17 09:00:01"}
{"level":"info","message":"[FeeClearanceEmail] Found 0 cleared students for Bungoma","service":"cbc-sms","timestamp":"2026-08-17 09:00:01"}
{"level":"info","message":"[FeeClearanceEmail] Found 0 cleared students for CBC Model Primary School","service":"cbc-sms","timestamp":"2026-08-17 09:00:01"}
{"level":"info","message":"[FeeClearanceEmail] No current term found for school All for Jesus education center ","service":"cbc-sms","timestamp":"2026-08-17 09:00:01"}
{"level":"info","message":"[FeeClearanceEmail] Job completed in 0.30s. Processed 0 students, sent 0 emails","service":"cbc-sms","timestamp":"2026-08-17 09:00:01"}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"31cd4894-3638-48bd-b9b2-f6a07977d071","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:05:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9d04d250-8f0e-45d2-91b2-97c1590f6fa0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:10:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"82da03fa-9144-4ff8-8353-446254e35fdb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:15:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52914322-088c-4a6f-9898-cc6e226238fa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:20:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"508a8fdd-997c-40c8-8734-2c8c5741fafb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:25:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"783e34d3-6044-4d61-8baa-333199894715","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:29:00"}
{"level":"info","message":"[CRON] Attendance alert started","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"error","message":"[CRON] Attendance alert failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/attendance-alert.job.js:19:53)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:30:00","totalConnections":1}
{"durationMs":1.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c81ca26a-746b-40e5-a2f8-7bd0bd9e5b2d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:35:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bcd6c7a5-82a2-443a-ba5e-b4892700e78a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:37:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:40:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1c9c8b93-8d7b-4c56-a324-a5ee42c6fca8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:45:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2f4b1edf-5330-411c-b7df-b51425b7d4ed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:50:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b2f9eebd-f919-486b-bcd4-b2c8fc51efab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 09:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 09:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 09:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 09:55:00","totalConnections":1}
{"durationMs":2.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9cb055d6-1bbb-4dc6-8f1f-6d4fae8fcd6e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 09:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 09:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 10:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 10:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:00:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2a8adc1c-037c-47d1-a610-90ebfe439cb0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:05:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e61ce5d-1c9c-4f0c-a5c1-a60b4b01dcf3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:10:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e0027d6a-0f40-4db9-97c7-6f2227e70793","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:15:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"942e3829-b95f-4c38-b5bc-ddeb73809a0c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:20:00","totalConnections":1}
{"durationMs":2.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea052dc4-8bf5-4c9e-bcb6-4fc6f0053b81","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:25:00","totalConnections":1}
{"durationMs":1.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2f36fbdb-4e45-4b64-886d-569635030ac5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 10:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 10:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:30:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"85ef3b38-31f0-4fe9-97ce-50e2e569e3df","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:35:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"85fe0126-a5ac-4b4b-8115-fc6413fe5e6e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:40:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:40:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:40:01","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"09585eb9-7d6a-45be-8655-378d7b3d8cf2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:45:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8195be64-3703-475c-8767-9d6bf4174e07","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:50:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5240a9d9-684f-4c72-b369-f6e81ffc64a3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 10:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 10:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 10:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 10:55:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"57ba83c0-d2d2-4a96-91bc-22330b348dcb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 10:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 10:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 11:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 11:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:00:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"41ae6c4b-2b00-49fe-af31-edeafcd07c49","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:05:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f6448334-cb5b-4e6b-a65f-6992740dec5d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:10:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23c9e548-73d6-40cb-82b9-f0f2b70b0416","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:15:00","totalConnections":1}
{"durationMs":2.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13093a5c-835c-4a34-8806-c30e45e1b8c6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:20:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"59366502-1dfd-464a-81b6-c173693efe0a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:25:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f1d3d437-1f62-4fa3-a24c-a6dd0e7400bb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 11:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 11:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:30:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a15f2362-5061-4913-a0cd-4d1fff217985","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:35:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2227fd4d-2d73-417f-a3b0-7a55953e591a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:40:00","totalConnections":1}
{"durationMs":3.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"803e16b5-1136-498a-a493-26f19ce1697e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:45:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fff67958-bb5f-45d7-9558-738490c57709","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:50:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a62063d9-e29c-4c20-a832-7d0bc3c43f60","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 11:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 11:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 11:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 11:55:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f1ef95aa-28fe-428a-a9c0-2efec4354f04","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 11:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 11:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 12:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 12:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:00:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d42fce71-a34e-4384-9716-3e1b8612ce1f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:05:00","totalConnections":1}
{"durationMs":2.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"21fa876b-3014-45be-81ea-56b4cbd7197d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:10:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15f32da8-85dd-40fb-9958-b7f97f294778","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:15:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b1cd353f-81b3-4b41-abf9-6978336194d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:20:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ac073bad-a7ab-42eb-be08-279b65a274d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:25:00","totalConnections":1}
{"durationMs":1.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"aae0037e-91a9-4e14-88b4-57cc17fb545e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 12:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 12:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:30:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dd7aecd0-b17b-41c3-95d5-41d426e72643","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:35:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7aec356a-e486-491e-904f-3c45f47b1642","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:40:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fa70db45-e766-4c6f-b566-3f791679a7f9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:45:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d8bc88c0-3822-4fb8-8083-973442581c78","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:50:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d2a6ff53-f081-4a2a-8173-15fe793bf744","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 12:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 12:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 12:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 12:55:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c28bed6-61a3-47d1-95e1-55618d7cd6e2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 12:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 12:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 13:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 13:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:00:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"36214fa0-bbbe-4b87-9376-70dc6d07dbaf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:05:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8f92cd6e-99dc-4477-bbab-b282593a66a4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:10:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a50092d4-f025-4e38-acd6-addd0804939f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:15:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b5e9ba1-ea4d-485b-9ea4-363f9fcdee8d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:20:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a72d04fb-9584-4423-b78e-3ed9d71e1816","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:25:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bf529c18-49df-4266-8ba0-ed119ac7c97b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 13:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 13:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:30:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f4487cfd-20f4-4d8a-8ac6-c407faebfccb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:35:00","totalConnections":1}
{"durationMs":2.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0801385b-eda0-4637-9b0f-f626c5c6580c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:40:00","totalConnections":1}
{"durationMs":1.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78f28a2f-c821-4aad-8b33-02740fdab392","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:45:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"43f58b2a-24f9-4749-b900-e09ccd21719b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:50:00","totalConnections":1}
{"durationMs":10.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2388442f-2a2e-4732-acf1-62d69f932d2f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 13:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 13:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 13:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 13:55:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3da8d0ce-ac64-43c9-bcd4-d6d5624e27a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 13:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 13:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 14:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 14:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:00:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"27f41d1d-6911-4549-a436-91d826e9a929","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:05:00","totalConnections":1}
{"durationMs":2.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15038e86-11de-4df4-bba4-f087f59bb098","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:10:00","totalConnections":1}
{"durationMs":1.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"80b587da-15b0-40c5-8c49-406af5bb7470","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:15:00","totalConnections":1}
{"durationMs":1.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a89cb37b-1945-4bd2-a58a-8f4de67bb574","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:20:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a20a6179-cf8a-47f5-babd-6eb08fe891c8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:25:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0fe34e5e-8789-4670-a12c-c4c255b41677","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 14:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 14:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:30:00","totalConnections":1}
{"durationMs":1.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dd7fd69a-ea54-482a-8d97-0adb27d19ca5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:34:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:35:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"02e9da2e-bad1-4484-9e8c-6337e770b8e2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:40:00","totalConnections":1}
{"durationMs":1.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"80e6418d-f41c-454a-8066-6e94f25d4702","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:45:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c99b08f-63c1-4e80-aab4-e67769dc9161","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:50:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"41413da3-1f7b-4199-81f3-8a932cf563c6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 14:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 14:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 14:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 14:55:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b2d9ec5-04b9-42fc-bb44-54a07e0dfe15","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 14:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 14:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 15:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 15:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:00:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0fc10ce8-2839-40d7-8e9e-5e22ab2756ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:05:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"195d53a7-a319-47bb-9639-5705b54d8568","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:10:00","totalConnections":1}
{"durationMs":1.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"33df9750-0fc1-4f13-9794-d34b660007ca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:15:00","totalConnections":1}
{"durationMs":1.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8836c897-9e9b-41ff-b693-1980435c6b71","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:20:00","totalConnections":1}
{"durationMs":1.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"382210d0-7bdd-41be-8626-390fb464e40d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:25:00","totalConnections":1}
{"durationMs":3.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3b1d2ddd-cab1-43cd-a767-54f310e41717","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 15:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 15:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:30:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f372bef7-94ed-4437-bb86-93a98a05a7ef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:35:00","totalConnections":1}
{"durationMs":2.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f27b6a4-e867-479e-ba6c-a5c3db89670a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:40:00","totalConnections":1}
{"durationMs":1.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ab82a391-f299-473f-9f16-d6be279b9af6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:45:00","totalConnections":1}
{"durationMs":1.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4e6cd43-e8b1-434e-8bf1-746c6107268f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:50:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0f51156-ec2d-461c-a459-6f456e4296d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 15:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 15:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 15:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 15:55:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e5f7ef94-f428-4c98-ab58-1886271b4521","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 15:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 15:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 16:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 16:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:00:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fcbb8d06-23aa-4711-980a-a03c6333d092","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:05:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"451aedde-2170-4d11-a0dd-8bc0bee7a304","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:10:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"66a3d4ea-b6fc-4e4a-8f26-35bde45e6981","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:15:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a8a6d6fa-c54e-4bef-8609-13ac6e28202e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:20:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0c1666f1-9a86-408f-a58f-b4b0ed110ab0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:25:00","totalConnections":1}
{"durationMs":1.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"791e8146-cc0d-497e-bcbc-79044e18e484","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 16:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 16:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:30:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8cdea98f-a4fc-49ed-94f7-c65a50213cfc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:35:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff43c0da-09f8-4a08-9077-237d8c477ced","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:40:00","totalConnections":1}
{"durationMs":1.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"083bf764-1ce8-4f96-a47a-07da027d3d35","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:45:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8d5d069c-da6c-4a15-8197-dd02522daab7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:45:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:49:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:50:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:50:00","totalConnections":1}
{"durationMs":2.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17c13ce9-efbe-4425-802d-0f74bcdb4bca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 16:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 16:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 16:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 16:55:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5f753fb0-4376-44eb-a198-e81b728dfda0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 16:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 16:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 17:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 17:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:00:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a1342bd0-6836-493a-83a8-29efd8106e9d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:05:00","totalConnections":1}
{"durationMs":1.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"69d47594-9bf4-4035-839d-4eebab7d0664","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:10:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"98d555f0-0602-4864-85d2-edcc02cf1ce8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:15:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e7c19348-57a9-46f0-baf8-cc5abea05a9e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:20:00","totalConnections":1}
{"durationMs":3.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3d0f095a-1e0d-4e7f-9d6c-797446913ee2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:25:00","totalConnections":1}
{"durationMs":1.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7a70af1f-6118-429d-a759-36d4c8439914","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 17:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 17:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:30:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e8fd32c7-7583-42dc-980f-8c1ea5dd258d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:35:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:35:01","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d8c6428e-be2a-4ffe-b4b1-ab1a4a922045","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:39:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:40:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"300824c1-db56-4bde-ba69-c634c6985c06","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:45:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"72cf06b5-71dc-4875-aab8-a698d0c7e019","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:50:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"56810e5b-1c84-4080-8023-a90681b1fe9e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:54:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 17:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 17:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 17:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 17:55:00","totalConnections":1}
{"durationMs":2.2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd3ea248-6ca0-4779-aa2a-dd6a59d668fc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 17:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 17:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 18:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 18:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:00:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1376f41a-9aee-4767-98e8-13caf2ddadd7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:05:00","totalConnections":1}
{"durationMs":1.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"359d6ee1-82d4-4f68-a06f-91f6c665b25c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:05:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:09:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:10:00","totalConnections":1}
{"durationMs":1.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"af203eaa-8066-414d-b51a-f56a057042d2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:15:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"51e0b3ca-9b26-467c-9149-a976291fee1d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:19:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:20:00","totalConnections":1}
{"durationMs":1.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b0d3b4ba-4e09-4a74-8c08-951a0691f74c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:25:00","totalConnections":1}
{"durationMs":3.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4736a60d-b4c1-4a0b-b142-a286fff301a7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:29:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 18:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:30:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"98d001e4-40ec-4411-ad5a-963677fd5ab4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:35:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"15a30e36-3726-461a-8b3c-f7d9a40233c7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:35:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:40:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1b1d25b3-2bc8-416b-a01e-ff5591ab3306","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:45:00","totalConnections":1}
{"durationMs":1.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"28342577-f89e-4a22-bd2e-4898be60bf30","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:50:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c761f13-180d-4f96-8dfd-95b7e0a73370","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 18:55:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b5bd9c14-dd8c-4df9-b355-a5bbca761897","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 18:55:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 18:59:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 19:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:00:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"69360560-c4b6-46e2-bc35-fe06b5c0b373","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:01:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:05:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17802b62-813e-4438-acd6-79855dbfbcf4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:10:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"71cbe390-0d9c-440b-bca0-e8aa40fc1214","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:15:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9ba70fcd-59d0-43c0-9738-068ca3951382","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:15:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:20:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7dbc8a23-88e2-4bcf-be3b-1ac72ed1084d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:23:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:25:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"519cc419-f681-49ab-9a02-9b5e83af1d65","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:25:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:29:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 19:30:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:30:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8bcb61a2-ec33-4e1c-b969-5ee87ea22739","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:35:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"71b34714-f38c-465e-bba3-d6a1cb3b9cd9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:37:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:40:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c426fa22-6959-4892-9659-af0f8efcd5c1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:45:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3eb76d06-a3cd-452a-9f87-8a3933d8c0d0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:49:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:50:00","totalConnections":1}
{"durationMs":1.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e2e4464-2463-43d0-878e-cdd21d9adfb6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:53:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 19:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 19:55:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"10cf71c2-bec1-4e91-b65e-0a4ea083c9aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 19:55:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:57:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 19:59:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 20:00:00"}
{"level":"error","message":"[CRON] M-Pesa reconciliation failed: Cannot read properties of undefined (reading 'updateMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'updateMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/mpesa-reconcile.job.js:17:57)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-17 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:00:00","totalConnections":1}
{"durationMs":1.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13b7a650-6448-4df1-92dd-1d6e73199119","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:01:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:03:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:04:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:05:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:05:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ceb9aa52-239b-4965-99d0-e5dc2f1300c0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:05:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:07:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:09:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:10:00","totalConnections":1}
{"durationMs":1.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c8a4af6b-c3bf-48dc-a469-529f0c2aa103","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:11:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:13:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:15:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b3df3424-6d8c-4c33-b7fc-20d7e247b624","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:15:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:17:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:19:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:20:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9c0abf77-391c-4e2b-9d7d-f70c138dae17","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:21:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:22:00"}
{"level":"error","message":"[ScheduledMessages] Error in cron job: Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","name":"SequelizeDatabaseError","original":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:23:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"parameters":{},"parent":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:23:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"service":"cbc-sms","sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:23:00' LIMIT 50;","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async ScheduledMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Task.processScheduledMessages [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/scheduledMessages.js:20:25)","timestamp":"2026-08-17 20:23:38"}
{"level":"error","message":"[Email Queue Job] Error processing email queue: Table 'aereuxky_cbc_sms.email_messages' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async EmailMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async fetchPendingEmails (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:134:10)\n    at async processQueue (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:81:27)\n    at async processQueueSafely (/home/aereuxky/cbcsms-backend/src/jobs/email-queue.job.js:24:5)","timestamp":"2026-08-17 20:23:38"}
{"level":"error","message":"[Email Queue Job] Error processing email queue: Table 'aereuxky_cbc_sms.email_messages' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async EmailMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async fetchPendingEmails (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:134:10)\n    at async processQueue (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:81:27)\n    at async processQueueSafely (/home/aereuxky/cbcsms-backend/src/jobs/email-queue.job.js:24:5)","timestamp":"2026-08-17 20:23:52"}
{"level":"error","message":"[ScheduledMessages] Error in cron job: Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","name":"SequelizeDatabaseError","original":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:24:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"parameters":{},"parent":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:24:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"service":"cbc-sms","sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:24:00' LIMIT 50;","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async ScheduledMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Task.processScheduledMessages [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/scheduledMessages.js:20:25)","timestamp":"2026-08-17 20:24:00"}
{"level":"error","message":"[Email Queue Job] Error processing email queue: Table 'aereuxky_cbc_sms.email_messages' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async EmailMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async fetchPendingEmails (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:134:10)\n    at async processQueue (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:81:27)\n    at async processQueueSafely (/home/aereuxky/cbcsms-backend/src/jobs/email-queue.job.js:24:5)","timestamp":"2026-08-17 20:24:07"}
{"level":"error","message":"[Email Queue Job] Error processing email queue: Table 'aereuxky_cbc_sms.email_messages' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async EmailMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async fetchPendingEmails (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:134:10)\n    at async processQueue (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:81:27)\n    at async processQueueSafely (/home/aereuxky/cbcsms-backend/src/jobs/email-queue.job.js:24:5)","timestamp":"2026-08-17 20:24:22"}
{"level":"error","message":"[Email Queue Job] Error processing email queue: Table 'aereuxky_cbc_sms.email_messages' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async EmailMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async fetchPendingEmails (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:134:10)\n    at async processQueue (/home/aereuxky/cbcsms-backend/scripts/email/processQueue.js:81:27)\n    at async processQueueSafely (/home/aereuxky/cbcsms-backend/src/jobs/email-queue.job.js:24:5)","timestamp":"2026-08-17 20:24:37"}
{"level":"error","message":"[Payment Email Catch-Up] Job error: Table 'aereuxky_cbc_sms.payments' doesn't exist","service":"cbc-sms","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at async catchUpMissingPaymentEmails (/home/aereuxky/cbcsms-backend/src/jobs/payment-email-catchup.job.js:31:29)","timestamp":"2026-08-17 20:24:42"}
{"level":"error","message":"[ScheduledMessages] Error in cron job: Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","name":"SequelizeDatabaseError","original":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:25:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"parameters":{},"parent":{"code":"ER_NO_SUCH_TABLE","errno":1146,"sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:25:00' LIMIT 50;","sqlMessage":"Table 'aereuxky_cbc_sms.scheduled_messages' doesn't exist","sqlState":"42S02"},"service":"cbc-sms","sql":"SELECT `id`, `school_id` AS `schoolId`, `channel`, `template_id` AS `templateId`, `subject`, `body`, `audience_filter` AS `audienceFilter`, `scheduled_at` AS `scheduledAt`, `status`, `sent_at` AS `sentAt`, `error_message` AS `errorMessage`, `sent_by_user_id` AS `sentByUserId`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `scheduled_messages` AS `ScheduledMessage` WHERE `ScheduledMessage`.`status` = 'pending' AND `ScheduledMessage`.`scheduled_at` <= '2026-08-17 20:25:00' LIMIT 50;","stack":"Error\n    at Query.run (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)\n    at /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:315:28\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async ScheduledMessage.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Task.processScheduledMessages [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/scheduledMessages.js:20:25)","timestamp":"2026-08-17 20:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:25:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b0779ed-7e15-4d2f-8c75-66605c629414","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:25:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:27:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:28:00"}
{"level":"info","message":"\nSIGTERM received. Starting graceful shutdown...","service":"cbc-sms","timestamp":"2026-08-17 20:28:22"}
{"level":"info","message":"Redis not configured, continuing without cache","service":"cbc-sms","timestamp":"2026-08-17 20:28:33"}
{"level":"info","message":"Serving frontend static files from: /home/aereuxky/cbcsms-backend/public","service":"cbc-sms","timestamp":"2026-08-17 20:28:42"}
{"level":"info","message":"Testing database connection...","service":"cbc-sms","timestamp":"2026-08-17 20:28:42"}
{"level":"info","message":"✓ Sequelize database connection established successfully","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✓ Database connected successfully","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✓ Database schema loaded (models initialized)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✅ Socket.IO initialized for real-time notifications","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✅ Scheduled Messages cron job initialized (runs every minute)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"[Email Queue Job] Initializing 24/7 background worker (interval: 15000ms)...","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✓ [Email Queue Job] Background worker active","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"[Payment Email Catch-Up] Initializing (interval: 120000ms)...","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✓ [Payment Email Catch-Up] Job active","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✅ Weekly fee clearance email job initialized (runs every Monday at 9:00 AM)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"Initializing integration sync cron job","schedule":"*/5 * * * *","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"Integration sync cron job initialized successfully","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✅ Background worker jobs initialized (Email Queue 24/7 active)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✅ Guardian Email Worker started (enforcement mode)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"🚀 CBC SMS Server started successfully","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"📍 Environment: production","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"🌐 Server: http://0.0.0.0:5000","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"💾 Database: Connected (Sequelize ORM)","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"✨ Tables: 168 models loaded","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 20:28:43"}
{"durationMs":15.8,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e064335b-bec2-4e4c-8ec9-fe7110ffaa14","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:28:48","userId":null}
{"durationMs":8.67,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8d0bbd63-0d83-4551-aade-8f48d0c3ae7c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:28:49","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:29:00"}
{"durationMs":5.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/health","requestId":"a019d9a8-d6cd-4238-ac90-0bb0a21ca5b7","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 20:29:06","userId":null}
{"durationMs":2.19,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/health","requestId":"3a86e320-6979-4123-9edf-19b5cf5ff774","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 20:29:06","userId":null}
{"durationMs":19.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"f206ce7c-d440-45e7-b006-e403eaeb38d6","schoolId":null,"service":"cbc-sms","status":422,"timestamp":"2026-08-17 20:29:25","userId":null}
{"durationMs":3.76,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"912a19f7-af47-4e29-bb0a-29b28278683d","schoolId":null,"service":"cbc-sms","status":422,"timestamp":"2026-08-17 20:29:25","userId":null}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 20:30:00"}
{"durationMs":3.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b48cfdf6-effb-4f76-bf71-bfa4efd8da65","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:31:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:33:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:34:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:35:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:35:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fce3c957-8281-4ffe-a948-8fa49e7c7535","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:35:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:36:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":16,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:36:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":16,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:36:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":3.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3e670efe-563a-4bd4-a7bc-581426e7f5c1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:20","userId":null}
{"durationMs":728.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"8f5562c6-7ada-4880-ab3d-661a23ffe206","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:21","userId":null}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1121.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:22","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":10.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7c885222-430d-4d74-a156-f3bf031d1599","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:22","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":1067.76,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"78d01f94-f8b8-409a-a2bc-bcbcdfe6c6be","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:22","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":88.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"d83c30a7-5ddd-4687-932d-15fd533c24d1","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:23","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":122.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"e01c8aa2-8627-42ff-b2ee-2f0cfc3d70f6","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:23","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":112.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"0cecd002-c7f6-46e1-8b72-a294a24e4ee8","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:23","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":92.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"d0492a90-b302-4c92-8d81-02e39e597cef","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:23","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":1458.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":486.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":550.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":551.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":552.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":20.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b103104a-eaab-4143-8d42-701ca32df9cf","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:23","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":42.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"58216b50-084a-42c9-a2a7-7a4c31176581","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":35.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview","requestId":"98f14ff7-1837-4e3e-a705-122554adfcc8","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":32.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"99e5509d-d73e-491a-87e0-d6c369677954","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":40.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"b7f0a2e3-7808-49ca-97a9-b00b45ecfa1f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":28.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c9dac895-ebfd-4eb2-9a7a-c895f2968d9d","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":44.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms/current","requestId":"146d3c88-8988-4ba0-b3f2-03b0ab1a9916","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":26.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"9e391ab9-f238-4709-b666-8aa41e8d5959","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:24","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":16.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview?termId=8941151e-85e9-11f1-8826-0250f227b463","requestId":"a8b59b85-b0dd-4940-b943-c8029e9f13f4","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:25","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/login","navId":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":578.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/overview"},"durationMs":591,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":592.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":594.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/academic/terms/current"},"durationMs":647.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":648.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":650.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c443b2f8-ab36-44fa-b033-6e742e00a4ef","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:25","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":22.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"be0e6422-aea6-48b8-80d7-9827548ac59a","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:25","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":15.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"ca2b2a7b-4917-4484-bdc7-9cfeb79eeb1a","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:25","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/overview"},"durationMs":470.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":10.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c7e9c0eb-c708-43b9-b311-52cbfb211ed3","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:26","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":17.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview?termId=8941151e-85e9-11f1-8826-0250f227b463","requestId":"3f076122-55dc-4586-ba1a-1834efcd8a83","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:26","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/status","requestId":"c4babf96-59fc-4986-8f1a-42f2b654b3fa","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:26","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":401.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":415.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/overview"},"durationMs":392,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d35fd73b-f212-4f77-a0cf-66955198daef","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:27","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/status"},"durationMs":446.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1a71cad8-607a-4eca-8944-07940666e933","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:28","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":21.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"d7e4806e-aab8-4d7a-bc04-e094b6cd6f3f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:28","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":10.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"21aa0500-0113-4837-9ce6-b40d504b9757","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:28","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":420.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":421.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":9.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3d013b2d-90c8-4b04-a34d-d7249f32c8a3","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:29","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":33.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/events?startDate=2026-07-24T21:00:00.000Z&endDate=2026-09-07T20:59:59.999Z","requestId":"f145bbea-ad68-4daa-9433-26293f62bc39","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:37","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":37.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/summary","requestId":"8c1d7ea5-91e5-4403-93ab-4d2fb077bf4e","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:37","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":45.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/holidays?year=2026","requestId":"10d7d405-1a7b-47d7-9ee9-21b95a22abb8","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:37","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/calendar","navId":"1786988195099-449481","text":"Calendar"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher","href":"/dashboard/teacher/calendar","navId":"1786988195099-449481","text":"Calendar","to":"/dashboard/teacher/calendar"},"durationMs":437,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/calendar","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher","navId":"1786988195099-449481","to":"/dashboard/teacher/calendar"},"durationMs":460,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/calendar","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.69,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"277b7b7d-ae02-4486-b0f0-378998a82c91","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:37","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/calendar/events"},"durationMs":380.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/calendar/summary"},"durationMs":397.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/calendar/holidays"},"durationMs":398.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2983e50c-6053-4500-a48b-54fba7b1bb1f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:38","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/timetable","navId":"1786988197265-255709","text":"Timetable"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/calendar","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1127007a-c332-4c64-8260-941fd397f1d9","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:40","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":16.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"99923e22-c42b-4f3b-9205-9bcb833b04e7","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:41","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":33.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule","requestId":"2596e113-da84-4b82-a2ae-d6bd7a848983","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:41","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/timetable","navId":"1786988199103-928770","text":"Timetable"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/calendar","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/calendar","href":"/dashboard/teacher/timetable","navId":"1786988199103-928770","text":"Timetable","to":"/dashboard/teacher/timetable"},"durationMs":95,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/timetable","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/calendar","navId":"1786988199103-928770","to":"/dashboard/teacher/timetable"},"durationMs":117,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/timetable","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":352.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":378.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"75064bab-6b4a-4c60-8952-2fca9eb6ac0f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:41","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"7ae0db83-8819-477f-99bd-044ddeeef502","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:42","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":8.32,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule","requestId":"a7a89041-0724-476b-9943-cc60c5ab4a47","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:42","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":361.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":353.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"id":null,"label":"My Lessons","name":null,"type":null},"durationMs":16,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/teacher/timetable","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.76,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8bb08e75-615c-4f9d-b06b-80813fbf470c","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:43","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"6fd64e59-b8f6-4b36-b13a-a5bde783ee72","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:44","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":10.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule","requestId":"12c54520-6c50-428e-b5d1-f246ee76d749","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:44","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":10.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"2947d0e5-52c7-4d10-b21e-7695177ee96f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:44","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"id":null,"label":"Lesson Plans","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/teacher/timetable","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":371.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-schedule"},"durationMs":389.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":365.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cc02871d-be1e-4e5e-b5d3-5982df295cdb","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:45","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.29,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"b6dca1a1-907d-4dd1-bc12-ff10543b8aa4","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:46","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/clocking","navId":"1786988204295-215397","text":"Clock In/Out"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/timetable","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":717.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":15.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"90d8b8aa-d210-4460-8f19-350bcfb7b0d2","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:47","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"a3cf91a0-fe37-44d2-95d9-eabb2415696d","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:47","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"375c606a-2544-446f-9cf4-0bca0244390a","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:47","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/timetable","href":"/dashboard/teacher/clocking","navId":"1786988204295-215397","text":"Clock In/Out","to":"/dashboard/teacher/clocking"},"durationMs":831,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/clocking","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/timetable","navId":"1786988204295-215397","to":"/dashboard/teacher/clocking"},"durationMs":831,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/teacher/clocking","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/timetable","navId":"1786988204295-215397","to":"/dashboard/teacher/clocking"},"durationMs":876,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/clocking","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-history"},"durationMs":370.8,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-status"},"durationMs":372.8,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ecdcab7c-17b9-4cfb-9ac8-cdebb7461691","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:47","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":17.77,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"9c98f56d-bfaa-4238-8619-153afb28ae48","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:48","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"25be10b1-917c-40f6-8cd6-22216470649d","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:48","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"77f40340-1b5a-42ce-90a2-15c5fc29967d","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:49","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-status"},"durationMs":428,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:49","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-history"},"durationMs":429.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:49","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":374.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:49","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":7.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f27b0bd1-173a-4d51-af40-fd10974c068a","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:49","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":18.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"0d54b03e-74cc-494c-9178-6f23c135f261","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:50","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"36c5cdb3-b03a-42f2-b1b3-eb1bff584673","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:50","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-history"},"durationMs":365.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/clocking/my-status"},"durationMs":382.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":9.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"86257e6a-79e5-4f20-bfab-f1e2f8886f9e","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:52","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/students","navId":"1786988212361-111077","text":"My Classes"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/clocking","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/clocking","href":"/dashboard/teacher/students","navId":"1786988212361-111077","text":"My Classes","to":"/dashboard/teacher/students"},"durationMs":476,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/students","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/clocking","navId":"1786988212361-111077","to":"/dashboard/teacher/students"},"durationMs":490,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/students","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a023a3fa-ac8b-49f1-80cb-38a645dcafc1","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:55","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":15.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"11ee917d-b353-4c9e-8ebc-501ee2ff59c7","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:55","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":371.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:56","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":13.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ee17360c-712f-4b89-8f8a-15d96e3c2813","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:56","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":16.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"69270e9b-c217-483d-9b71-df994929230e","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:56","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":391.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:36:57","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c75d35a6-9bd4-4810-a806-70345a964e71","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:36:57","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":15.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"03c222b2-05e0-478f-a05a-a90c8ed09fb3","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:36:59","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/assessments/formative-grades","navId":"1786988217465-714031","text":"Formative Grades"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/students","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":408,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/students","href":"/dashboard/teacher/assessments/formative-grades","navId":"1786988217465-714031","text":"Formative Grades","to":"/dashboard/teacher/assessments/formative-grades"},"durationMs":407,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/assessments/formative-grades","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/students","navId":"1786988217465-714031","to":"/dashboard/teacher/assessments/formative-grades"},"durationMs":431,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/assessments/formative-grades","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:00","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"be99aa6a-d942-4f39-a4a8-1a38cd528878","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:00","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":23.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"c53e3f20-67ee-41bb-8231-cb71336c6ff6","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:00","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":42.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms","requestId":"0c3060c5-6063-409d-9ee0-81cd3654bf93","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:00","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":41.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"a546b953-9ce7-47d6-9703-fb48001500e8","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:00","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:37:00"}
{"durationMs":30.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/assessments?termId=8941151e-85e9-11f1-8826-0250f227b463&streamId=&isPublished=true&limit=100","requestId":"f89d634e-e455-424d-882e-00440549f44d","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:00","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":396,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:01","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/academic/terms"},"durationMs":397,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:01","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":412.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:01","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/assessments"},"durationMs":388.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:01","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"91b4fa1f-c8ac-4266-8724-169e1f31ed11","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:01","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":8.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"0156bc54-dcd4-4d09-9f9f-678838d67ae5","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:01","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":463.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:03","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":9.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce2b5a41-8c41-40b2-8006-e606b9873cbe","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:03","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":12.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"18398fc1-a7d8-4386-a151-c2757628c693","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:04","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/teacher/my-streams"},"durationMs":372.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:05","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":9.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f4a9a821-f5e4-40f7-8045-b753e0a30851","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:05","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/analytics","navId":"1786988223789-525795","text":"Analytics"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/assessments/formative-grades","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/assessments/formative-grades","href":"/dashboard/teacher/analytics","navId":"1786988223789-525795","text":"Analytics","to":"/dashboard/teacher/analytics"},"durationMs":425,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/analytics","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/assessments/formative-grades","navId":"1786988223789-525795","to":"/dashboard/teacher/analytics"},"durationMs":437,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/analytics","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:06","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":6.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5c39efd5-bd64-4c1d-8040-01b9cf1045b7","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:06","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":22.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/me","requestId":"13a3bdca-9b19-4f51-a035-5eec2b9e4eca","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:11","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":32.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/profile","requestId":"d5d2ee3f-96b5-47b0-8691-5817bb979682","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:11","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/profile","navId":"1786988229223-180940","text":"My Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/analytics","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:11","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/analytics","href":"/dashboard/teacher/profile","navId":"1786988229223-180940","text":"My Profile","to":"/dashboard/teacher/profile"},"durationMs":431,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/profile","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:11","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/analytics","navId":"1786988229223-180940","to":"/dashboard/teacher/profile"},"durationMs":451,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/profile","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:11","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":11.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e04f6738-fc18-481a-99bd-a5c4dbd9d8b2","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:11","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":403,"url":"/staff/me"},"durationMs":383.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:12","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"method":"GET","status":200,"url":"/auth/profile"},"durationMs":394.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:12","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":9.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"abbd26f8-931a-489b-9daf-346027c5f1e1","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:12","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"href":"/dashboard/teacher/settings","navId":"1786988234269-872591","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher/profile","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:17","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/profile","href":"/dashboard/teacher/settings","navId":"1786988234269-872591","text":"Settings","to":"/dashboard/teacher/settings"},"durationMs":435,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher/settings","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:17","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/profile","navId":"1786988234269-872591","to":"/dashboard/teacher/settings"},"durationMs":466,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher/settings","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","timestamp":"2026-08-17 20:37:17","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"durationMs":14.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cfae3f00-64f9-4fe3-9c1f-88b6d7ade63f","schoolId":"78a14f6a-4c90-4dba-8b7a-8f1419cfa698","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:17","userId":"6f55b7b7-139a-4c01-9286-a929c6b44e3a"}
{"data":{"from":"/dashboard/teacher/settings","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:37:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"from":"/dashboard/teacher/settings","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:37:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":3.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"27d073da-ce41-4ebb-8356-8bb5a1fc863e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:20","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":7,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:37:48","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":9,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 20:37:48","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":1.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"35edd57f-5478-4a24-ba35-b97fb2f9b08d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:48","userId":null}
{"durationMs":687.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"51145489-45b6-490c-949f-a29976baf056","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:48","userId":null}
{"durationMs":23.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"c9e969b6-0c00-49e3-b7e1-256c8cc90312","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":116.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"1663f1b0-cebb-4806-9a99-9eeb8e223c02","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":205.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"d6b044f0-1d08-4104-8b87-83fea8d06e1f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":288.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"c64adf40-1c0e-47c6-b28a-e9dbe11eebce","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":299.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"8efe55b2-9d9d-4c58-a9c4-2ef2111fef60","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1099.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:50","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":436.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:50","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c402c6fb-9036-45ba-ad23-8d97f97f4af1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"a086efb1-ab8f-4ed6-91ce-f1f002b9ef6b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"5ea41f73-0def-4865-8498-3f683fdfdc8d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":23.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"f772124e-8491-4831-b29a-cb67fc95ea20","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":39.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"5764f706-fb18-4c25-ad31-b23e778d34ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":27.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"9cfbdc27-cdb0-4f09-87d4-ca4b9ebeba20","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"efef08ad-1686-484d-a7a5-6c890e99bc4b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:37:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":501.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/guardian"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","navId":null,"to":"/guardian"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":878.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":890.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":892.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":488.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:51","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d0aaa57d-249e-4108-9b54-995b68571224","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:51","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.52,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"c598a0ad-6d05-4c4e-9d00-36fc2f34aa8c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:51","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":473.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/school-info"},"durationMs":475.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":484.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":484.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":485.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3ea3599c-4442-4f37-8602-2262a920dec1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"669011f4-4ecd-4dd9-9b4f-046055e5dfc8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"5ad544ec-530f-4d1a-baf3-d6b3ccc3fd5a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":411.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:53","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":379.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:53","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/school-info"},"durationMs":381.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:53","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"10e713c4-7583-4bb2-ab56-67dce4361702","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"319b3973-b8b1-4fd2-a684-923acdb4234e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"49144184-596f-41a0-ba80-bd87a1079e8c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"4ca4c2a0-cfc7-4ecd-bc14-bdc8210adb8f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":388.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":425.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/school-info"},"durationMs":424.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:37:55","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6afb943b-014d-450a-9b74-244d57cfb784","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:37:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:38:00"}
{"durationMs":13.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"661c53b7-c5bd-44a9-85c8-01b075d71149","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:38:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/students","navId":"1786988285709-692554","text":"My Children"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/students","navId":"1786988285709-692554","text":"My Children","to":"/guardian/students"},"durationMs":396,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1786988285709-692554","to":"/guardian/students"},"durationMs":419,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":368.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2822bfb3-a3a6-4c56-9b90-354128811e4f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:38:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"bf73c8a1-ba81-4eff-8abd-826846ee87cd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:38:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":403.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:10","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4730c573-cc1d-4fe7-85cf-a14f5ba49490","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:38:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"e26ba9b4-b16b-44d9-b767-b65e95a97ad7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:38:11","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":425.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:38:13","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.32,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"12cf531e-5caf-4908-be7b-cecc2fe8bbd3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:39:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:40:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:40:00","totalConnections":1}
{"durationMs":2.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5da3ce54-bb53-41ee-943d-b65d4a03b396","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:41:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:43:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:45:00","totalConnections":1}
{"durationMs":3.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a51fec20-4aca-4a70-9ab1-29cb31b0c138","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:45:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:47:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:49:00"}
{"level":"error","message":"Error: Invalid username or password\n    at Object.login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.service.js:378:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async login (/home/aereuxky/cbcsms-backend/src/modules/auth/auth.controller.js:34:20)","service":"cbc-sms","timestamp":"2026-08-17 20:49:35"}
{"durationMs":1159.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"8c24cb0f-6575-4776-9fa1-1411194fd5d8","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 20:49:35","userId":null}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:50:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5db83d56-37cc-48bb-bdaf-4a34de0ffbac","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:51:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:52:00"}
{"data":{"href":"/guardian/students","navId":"1786989143256-665171","text":"My Children"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":31.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5f7ecc7a-1ceb-4df4-ab70-0312eab9cd34","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"bec1ae01-d4c0-4b2b-b199-a4463e3fc844","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"85d1d800-42e4-48b9-a3cc-b3deb2a704c7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"0f640f4b-92ed-44f4-9030-5e37f58e4917","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian","navId":"1786989145048-143638","text":"Home Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/students","href":"/guardian","navId":"1786989145048-143638","text":"Home Dashboard","to":"/guardian"},"durationMs":15,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/students","navId":"1786989145048-143638","to":"/guardian"},"durationMs":36,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":446,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":470.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/school-info"},"durationMs":470.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:27","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b5edff65-a97a-4de7-badd-eb69b641a447","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":17.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"ea5d9ccc-d8e4-48d8-8ea7-332b7be10e84","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"7b696599-8d86-43c0-8de0-762b7aacccd0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"5915428e-a82a-47f1-bc05-5357cc3eae8a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":479.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":455,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/school-info"},"durationMs":454.8,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"71521f95-0f3e-4eff-85b4-d386286401bb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"25bd3057-3fed-42a3-8898-6a3b81a554c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1786989147972-281209","text":"Notifications"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/notifications","navId":"1786989147972-281209","text":"Notifications","to":"/guardian/notifications"},"durationMs":410,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1786989147972-281209","to":"/guardian/notifications"},"durationMs":438,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:30","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"47228a08-3b06-4e04-bc47-8f375f05a9f2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"57237290-ca0c-4f2b-9e0f-ee326452690a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":432.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/dashboard"},"durationMs":393.9,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8d28dab2-2b11-4d1c-858a-51f4fddf2d7f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"7a5d2bc1-0a9b-412b-ab88-72fc169086dc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":406,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"534cca9f-b047-48ec-92a5-9fc5f409662b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"aba1a4cb-4a57-494e-a002-68d130c7c463","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":10,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:34","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/notifications"},"durationMs":606.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:34","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"43accfb3-bf97-4e14-9382-4e1ead603967","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/announcements","requestId":"492ba2ca-0fff-4535-ab51-fa8a227852f3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/announcements","navId":"1786989154566-723374","text":"Announcements"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/announcements","navId":"1786989154566-723374","text":"Announcements","to":"/guardian/announcements"},"durationMs":417,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/announcements","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1786989154566-723374","to":"/guardian/announcements"},"durationMs":442,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/announcements","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/announcements"},"durationMs":377.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ad245f0f-8304-493d-a9d4-44bb0f7a6f11","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/messages","requestId":"ae1b4c9c-f4f5-48fd-94d2-ca252bdeb292","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"005e17d8-709a-474b-b288-8049cffe2c69","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/messages","navId":"1786989155782-747489","text":"Messages"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/announcements","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/announcements","href":"/guardian/messages","navId":"1786989155782-747489","text":"Messages","to":"/guardian/messages"},"durationMs":526,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/announcements","navId":"1786989155782-747489","to":"/guardian/messages"},"durationMs":526,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/announcements","navId":"1786989155782-747489","to":"/guardian/messages"},"durationMs":556,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:38","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"553fcb77-b5a3-44c8-86d5-1245c1b220ee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/messages"},"durationMs":415.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":429,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"84a66031-6f6d-4d43-80c0-f58bddabb78d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/messages","requestId":"0f936ec3-f4e7-4611-9a2d-d9bffb53f698","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"0125e593-1f8c-4f7d-9644-2f5e9c925e7f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:52:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/messages"},"durationMs":405.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":396.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:52:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3339ce37-641b-4e6d-bc67-8a77edb06b19","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:52:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:53:00"}
{"durationMs":4.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"1b650cd0-aa09-48c5-8d1a-0d1c15bbd5a9","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 20:53:35","userId":null}
{"durationMs":3.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/messages","requestId":"809cfe79-cccf-49f2-86cf-eff93fd7c0ef","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 20:53:35","userId":null}
{"durationMs":57.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"69024e26-10ca-4e60-bb47-d1ba889ca945","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:53:35","userId":null}
{"durationMs":34.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/messages","requestId":"2a49e615-99a7-40cc-b46c-0e678244e7b8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:53:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":41.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"eefeaa1c-12fc-47b0-8aa8-dea0ec7566ec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":403,"timestamp":"2026-08-17 20:53:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/guardian/children"},"durationMs":361.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:53:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/guardian/messages"},"durationMs":435.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:53:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"76ab8cec-0e07-4d6d-aff8-92650525f8d9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:53:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/messages"},"durationMs":443.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:53:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":403,"url":"/guardian/children"},"durationMs":450.2,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:53:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fcc07f77-b588-4a08-91c3-6b6080b0bf50","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:53:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 20:55:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49c3f1fb-93a7-4953-bfb3-2dc09d78dea5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 20:55:02","userId":null}
{"level":"info","message":"\nSIGTERM received. Starting graceful shutdown...","service":"cbc-sms","timestamp":"2026-08-17 20:55:34"}
{"level":"info","message":"Redis not configured, continuing without cache","service":"cbc-sms","timestamp":"2026-08-17 20:55:38"}
{"level":"info","message":"Serving frontend static files from: /home/aereuxky/cbcsms-backend/public","service":"cbc-sms","timestamp":"2026-08-17 20:55:40"}
{"level":"info","message":"Testing database connection...","service":"cbc-sms","timestamp":"2026-08-17 20:55:40"}
{"level":"info","message":"✓ Sequelize database connection established successfully","service":"cbc-sms","timestamp":"2026-08-17 20:55:40"}
{"level":"info","message":"✓ Database connected successfully","service":"cbc-sms","timestamp":"2026-08-17 20:55:40"}
{"level":"info","message":"✓ Database schema loaded (models initialized)","service":"cbc-sms","timestamp":"2026-08-17 20:55:40"}
{"level":"info","message":"✅ Socket.IO initialized for real-time notifications","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✅ Scheduled Messages cron job initialized (runs every minute)","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"[Email Queue Job] Initializing 24/7 background worker (interval: 15000ms)...","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✓ [Email Queue Job] Background worker active","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"[Payment Email Catch-Up] Initializing (interval: 120000ms)...","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✓ [Payment Email Catch-Up] Job active","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✅ Weekly fee clearance email job initialized (runs every Monday at 9:00 AM)","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"Initializing integration sync cron job","schedule":"*/5 * * * *","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"Integration sync cron job initialized successfully","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✅ Background worker jobs initialized (Email Queue 24/7 active)","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✅ Guardian Email Worker started (enforcement mode)","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"🚀 CBC SMS Server started successfully","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"📍 Environment: production","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"🌐 Server: http://0.0.0.0:5000","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"💾 Database: Connected (Sequelize ORM)","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"✨ Tables: 168 models loaded","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 20:55:41"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:56:00"}
{"durationMs":26.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"7f6e7e4c-0f7e-4b4e-b780-1e9f6b5a79f4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":23.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"8c9f2889-e9a1-430e-99ac-700dd84611de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":38.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"f6e8b2d8-0863-4414-acd1-6b2e6454cb31","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":278.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"a1ca8700-2989-4da1-8704-f8d1e7d3d5ef","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":152.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/messages","requestId":"1a50214a-9a4e-45e5-8dca-d30e2da03d08","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":225.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"f848afdf-b172-416a-9f04-bf3a64a62248","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":524,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":530.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":578.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":792.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/messages"},"durationMs":696.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children"},"durationMs":773.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:19","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7b2bdf7c-f660-4795-95d2-2934ca225aa3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989381536-457588","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/messages","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989381536-457588","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":718,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/messages","navId":"1786989381536-457588","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":718,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/messages","navId":"1786989381536-457588","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":726,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"92e9e4dc-c226-4b8a-8802-efc0f93d0210","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":107.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"e4cde383-bf74-404e-8dd7-87744b911176","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":112.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"7b3b8f99-f8ac-4240-bb8f-ab465420801c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:25","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":999.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:26","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0b9d1b7e-54eb-4c5b-8da9-354dd282d0f3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:26","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":36.67,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/attendance","requestId":"4236a08d-2da9-4b78-855e-2d69e9fa6568","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786989385618-548648","text":"Attendance"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":2579.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786989385618-548648","text":"Attendance","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":704,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989385618-548648","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":704,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989385618-548648","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":718,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ca458bf2-c3ea-4534-bb18-b64100b40025","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":505,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8ed7532c-a62a-4f5e-a7c0-8ee3cd697db4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":39.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"a71a5eff-acaa-4024-b6c7-41256c4115ae","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":48.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"5e649d9b-7202-4bea-88bf-fd468bd63a3d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1786989388556-127707","text":"Academic Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1786989388556-127707","text":"Academic Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":504,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786989388556-127707","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":504,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786989388556-127707","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":529,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5955ecca-87dd-45e6-8f65-c935cd777f8f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":543.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":594.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","navId":"1786989390412-29240","text":"Health Records"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b9a900af-08e7-4f26-b071-d3154645db12","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":71.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8","requestId":"cc742cda-48fe-42c9-949b-d93c58fa1752","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":78.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/health/history","requestId":"521537e1-61aa-46c1-a3e6-ac7ac85db819","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":76.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/medical-profile","requestId":"369727db-e56f-4e0f-b250-4515913e8f2c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","navId":"1786989390412-29240","text":"Health Records","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health"},"durationMs":543,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1786989390412-29240","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health"},"durationMs":543,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1786989390412-29240","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health"},"durationMs":552,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8"},"durationMs":615.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/health/history"},"durationMs":616.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/medical-profile"},"durationMs":617.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"569b4945-92cb-44fd-b7b8-967b9adef253","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":47.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"394fea21-f0ba-4254-835e-677e3ac09b50","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:56:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":117.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"f88accb5-f504-4dce-8dca-a6326541148e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:56:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989392846-395817","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786989392846-395817","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":13,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/health","navId":"1786989392846-395817","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":28,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":603.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":668.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:56:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04508d7f-c58f-4bb0-a73e-dbca8f8c7ec3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:56:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:57:00"}
{"data":{"id":null,"label":"Pay KES 21,484.00","name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:57:15","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":37.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4979a1b9-3d21-421b-b5ff-9743215cb9c0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:57:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"9481231c-d0cf-464d-941a-c80bd92e9e5f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:57:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"4e5dc2f8-d170-40af-8d29-1b1dae803be3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:57:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":751.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:57:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":752.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:57:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"91b30124-e472-4211-9366-249750857e32","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:57:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:58:00"}
{"durationMs":28.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a0827341-f8c4-4c60-98fc-714fb3b37fb4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"f014a013-3291-41f6-b5ef-b33e2d247b94","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":537.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":542.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:20","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"30c23faa-3e40-4e32-87eb-2f3471b87425","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"amount":1,"feeItemIds":["c71d7e60-c83f-46f5-ac6d-dcbe7afcfd1c"],"guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","invoiceBalance":21484,"invoiceId":"35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","level":"info","message":"[Guardian Payment] Initiating M-Pesa payment","service":"cbc-sms","studentId":"cmp8gtpz200fy8bcnxg8120p8","timestamp":"2026-08-17 20:58:24"}
{"bankAccount":"***6152","bankName":"KCB Bank","bankPaybill":"522522","level":"info","message":"[Guardian Payment] Bank C2B direct settlement configured","service":"cbc-sms","timestamp":"2026-08-17 20:58:24"}
{"data":{"id":null,"label":"Pay KES 1 via M-Pesa STK","name":null,"type":null},"durationMs":20,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a2a7648a-8f46-471a-a75c-01c9ee08883e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:25","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"checkoutRequestId":"ws_CO_17082026205824220706576238","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","level":"info","message":"[Guardian Payment] STK Push initiated successfully","requestId":"f4595973-8599-40a6-bbe5-53553796e144","service":"cbc-sms","timestamp":"2026-08-17 20:58:27"}
{"durationMs":2138.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa","requestId":"6332f5a0-2c97-4a76-82ed-d3ac731f8a61","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa"},"durationMs":2708.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"988f301d-0b73-4dd4-afa6-f740b7d2c990","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":40.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"ca8b27ed-e6d3-44bf-9feb-0e89ba980dc3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":543.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a962e862-527d-402c-8a24-5218453037de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":34.52,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"88f862b1-1104-4eb6-8b79-cd41a05120f9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":560.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:33","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"21322712-93fe-43a5-8122-0cc6fe941c07","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"3c5185ad-de1d-46db-8f0d-2cc5fcff3581","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":733.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:35","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"470408f5-8cc4-4c35-b770-67ba28b74221","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":31.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"c100462d-a242-4743-b2f2-dd54a68abe63","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":549.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:36","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b4e3900e-9b48-4ccd-bffa-3eace6a8dab5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"855e4828-b191-4a61-b71c-694c12932201","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 20:58:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":49.85,"ip":"196.201.212.69","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"d6e85f23-173a-430c-b15b-230491f460e1","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:38","userId":null}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":542,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a321b2d1-b1c4-43ba-8d95-9fc5fdf4d94d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238","requestId":"d04b24b5-69fe-49d6-99a5-29bebd0fac0e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026205824220706576238"},"durationMs":532.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c12482a7-511f-4de1-beac-b2a8478dd70d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:40","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":91.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"b19c4c16-5bbe-417a-b590-865f5ac5009b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:42","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":573.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 20:58:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04e008d5-0d3e-481c-b7cd-6e09630531c8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:58:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 20:59:00"}
{"level":"error","message":"SyntaxError: Expected property name or '}' in JSON at position 1\n    at JSON.parse (<anonymous>)\n    at parse (/home/aereuxky/cbcsms-backend/node_modules/body-parser/lib/types/json.js:92:19)\n    at /home/aereuxky/cbcsms-backend/node_modules/body-parser/lib/read.js:128:18\n    at AsyncResource.runInAsyncScope (node:async_hooks:206:9)\n    at invokeCallback (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:238:16)\n    at done (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:227:7)\n    at IncomingMessage.onEnd (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:287:7)\n    at IncomingMessage.emit (node:events:524:28)\n    at endReadableNT (node:internal/streams/readable:1698:12)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)","service":"cbc-sms","timestamp":"2026-08-17 20:59:00"}
{"level":"error","message":"SyntaxError: Expected property name or '}' in JSON at position 1\n    at JSON.parse (<anonymous>)\n    at parse (/home/aereuxky/cbcsms-backend/node_modules/body-parser/lib/types/json.js:92:19)\n    at /home/aereuxky/cbcsms-backend/node_modules/body-parser/lib/read.js:128:18\n    at AsyncResource.runInAsyncScope (node:async_hooks:206:9)\n    at invokeCallback (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:238:16)\n    at done (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:227:7)\n    at IncomingMessage.onEnd (/home/aereuxky/cbcsms-backend/node_modules/raw-body/index.js:287:7)\n    at IncomingMessage.emit (node:events:524:28)\n    at endReadableNT (node:internal/streams/readable:1698:12)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)","service":"cbc-sms","timestamp":"2026-08-17 20:59:19"}
{"durationMs":6.16,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"b9fe1148-4a7b-4fcf-958a-970461d16ba0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 20:59:39","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 1 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 20:59:41"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 20:59:41"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 1 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 20:59:43"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 21:00:00"}
{"durationMs":5.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"05fff02a-ca3a-4e1f-b270-0debe191e038","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:01:00"}
{"level":"info","message":"\nSIGTERM received. Starting graceful shutdown...","service":"cbc-sms","timestamp":"2026-08-17 21:01:06"}
{"level":"info","message":"Redis not configured, continuing without cache","service":"cbc-sms","timestamp":"2026-08-17 21:01:10"}
{"level":"info","message":"Serving frontend static files from: /home/aereuxky/cbcsms-backend/public","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"Testing database connection...","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"✓ Sequelize database connection established successfully","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"✓ Database connected successfully","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"✓ Database schema loaded (models initialized)","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"✅ Socket.IO initialized for real-time notifications","service":"cbc-sms","timestamp":"2026-08-17 21:01:12"}
{"level":"info","message":"✅ Scheduled Messages cron job initialized (runs every minute)","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"[Email Queue Job] Initializing 24/7 background worker (interval: 15000ms)...","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✓ [Email Queue Job] Background worker active","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"[Payment Email Catch-Up] Initializing (interval: 120000ms)...","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✓ [Payment Email Catch-Up] Job active","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✅ Weekly fee clearance email job initialized (runs every Monday at 9:00 AM)","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"Initializing integration sync cron job","schedule":"*/5 * * * *","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"Integration sync cron job initialized successfully","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✅ Background worker jobs initialized (Email Queue 24/7 active)","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✅ Guardian Email Worker started (enforcement mode)","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"🚀 CBC SMS Server started successfully","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"📍 Environment: production","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"🌐 Server: http://0.0.0.0:5000","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"💾 Database: Connected (Sequelize ORM)","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"✨ Tables: 168 models loaded","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 21:01:13"}
{"durationMs":11.99,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"950c934c-c089-4adc-9bfe-daf58fee60d0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:01:31","userId":null}
{"durationMs":3.56,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/timeout","requestId":"f622a463-f281-4f61-850e-d5ebbe4be2e0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:01:31","userId":null}
{"durationMs":5.07,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/result","requestId":"63ba6b05-d9e7-4d0e-a077-180032c71bab","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:01:31","userId":null}
{"durationMs":3.58,"ip":"102.212.247.98","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/b2c-timeout","requestId":"aeff8f2a-824c-4d9a-85a0-9f48d3b775e3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:01:31","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 1 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:01:43"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:01:43"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 1 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:01:45"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 1 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:03:13"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:03:13"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 1 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:03:15"}
{"data":{"id":null,"label":"Pay KES 21,483.00","name":null,"type":null},"durationMs":19,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":276.58,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c2b2c5e5-39b6-45f5-ab4b-76a869b8ffd2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"amount":1,"feeItemIds":["c71d7e60-c83f-46f5-ac6d-dcbe7afcfd1c"],"guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","invoiceBalance":21483,"invoiceId":"35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","level":"info","message":"[Guardian Payment] Initiating M-Pesa payment","service":"cbc-sms","studentId":"cmp8gtpz200fy8bcnxg8120p8","timestamp":"2026-08-17 21:03:38"}
{"bankAccount":"***6152","bankName":"KCB Bank","bankPaybill":"522522","level":"info","message":"[Guardian Payment] Bank C2B direct settlement configured","service":"cbc-sms","timestamp":"2026-08-17 21:03:38"}
{"data":{"id":null,"label":"Pay KES 1 via M-Pesa STK","name":null,"type":null},"durationMs":65,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:39","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":35.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5255ba6a-f604-4b21-b914-f476949b1831","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"checkoutRequestId":"ws_CO_17082026210337111706576238","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","level":"info","message":"[Guardian Payment] STK Push initiated successfully","requestId":"be2b2b13-157c-4577-8182-759fab25ca38","service":"cbc-sms","timestamp":"2026-08-17 21:03:40"}
{"durationMs":2143.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa","requestId":"6c9fcc80-c891-47f4-97c0-2301abcf06db","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:40","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa"},"durationMs":2550.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6305e242-ccd9-4297-983a-b4e3a90912f8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":43.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238","requestId":"79f7b796-0993-4f27-bd44-81472da1af37","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:42","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238"},"durationMs":388.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:43","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0c9890c6-5310-4ba7-9cb5-5a2e7fb138e9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":44.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238","requestId":"9229741c-8c4f-44d0-9727-67ca78c565fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:03:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238"},"durationMs":417.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8b013c99-5ffe-4d53-9ca8-e7d76146a311","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:45","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":42.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238","requestId":"6cbfef7d-f855-45e7-9d06-7d7555f941e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:03:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238"},"durationMs":487.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c2eb89a6-9a27-4042-a94c-31e012777a97","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":37.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238","requestId":"78cb7935-0bb3-4367-9b26-be6a23620abb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:03:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":92.9,"ip":"196.201.214.200","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"eee9212d-ba2e-4fbb-840c-f3e7f05525fa","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:49","userId":null}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238"},"durationMs":487,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:49","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"620866d5-786b-4fc8-ac81-8f4456ed1af9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238","requestId":"69425844-dc37-4e5f-b220-92028077ed0e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026210337111706576238"},"durationMs":475.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:52","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bb39a852-0d92-46c1-a8ec-c7802cfa6b29","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":90.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"502fad95-16b0-4ba3-b116-49d8b9c0aa0a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":565.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:03:54","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"96eba6ca-a0b3-4947-a521-a29839fbca97","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:03:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:04:00"}
{"durationMs":42.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"c27df5e9-171d-4e70-ae98-589f4700a2c5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:04:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":38.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"f8159e42-498f-4700-9d75-7e12109f623a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:04:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":420.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:21","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":419.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:21","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e667a3d9-1ab3-4a77-b5db-28803982840f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:21","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":27,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:04:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"177ef3ed-742b-457a-b33b-0c8d98e2283c","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:24","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":86,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:04:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"565fb397-cab9-4757-aca4-d559fb19eef2","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:31","userId":null}
{"durationMs":1019.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"3c13a5fe-3760-4f12-8b6a-1c0efce31b11","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:31","userId":null}
{"durationMs":79.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"bd5912bf-f286-4497-bc95-89a62c7d2624","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":121.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"f2193d0c-0f07-4e1a-a1a9-d1b55fd7cefa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":111.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"81508484-2945-47f1-a4ad-2660be21ddf2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":55.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"ae63f370-0b7c-492e-be59-e12749eaddc1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1466.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":495.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"692ad231-328b-4b18-be47-64f1304f5d55","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"3c17bad5-b6bf-4912-9006-593060f2a5c6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":630.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":682.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1148.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1165.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/guardian"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","navId":null,"to":"/guardian"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"052f4786-f585-4efd-a02e-a9746186450f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":390.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"ec6bc127-ceb3-45ab-aabc-46b764cb99b0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"88e12ef9-0bec-4cb8-a709-23e03bddd16a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":27.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"00e79782-8614-40ec-9098-80c305a43d69","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":47.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2fe80f71-8a55-48db-80cd-6374fa1fc46d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":43.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"e2b3f7cb-f7a0-480d-a2ad-27c1a55c626e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":65.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"fcbe7bbe-dc4b-465d-b855-69e61ed96206","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":1020.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":574.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":578.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":581.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":595.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":610.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f7d92be7-5c82-4154-9440-d038334ad206","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":14,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:04:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6d934035-c1a6-4ed7-bcd4-ffd971abd72f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:04:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:05:00","totalConnections":1}
{"durationMs":5.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e4b81ec7-d0d0-4bb7-bdf5-4189fff96c82","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:05:13"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:05:13"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":64,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:05:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8491859b-c53a-4f14-bcb3-276c9ee19113","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:05:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":76,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:05:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"264176ec-0754-414c-9161-eed2def4d9e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:05:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:05:17"}
{"durationMs":15.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"bcca48d6-4d10-4228-8fb8-e9a4c9520314","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:05:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":17.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"9612339c-56a5-4bfb-be1e-9b4cf4c6439c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:05:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":66.67,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"0996cfa6-ee80-444a-9d38-f5ba2896fc35","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:05:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":412,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:05:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":793.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:05:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":826.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:05:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"01d1f465-93ad-420f-ba83-cd8790d4481c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:05:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:06:00"}
{"durationMs":46.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"d33e8f2a-dec1-4c37-ae9b-456b266d272a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:06:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":38.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"07617eeb-9fd2-4da5-954b-6481bd0d5848","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:06:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":94.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"8d5541b7-70c9-4c24-b3a5-9dee86970f28","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:06:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":465.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:06:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":591.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:06:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":574.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:06:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1d657e77-e7ee-49d3-a4a9-cb37cda37dfc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:06:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:07:00"}
{"level":"info","message":"\nSIGTERM received. Starting graceful shutdown...","service":"cbc-sms","timestamp":"2026-08-17 21:07:08"}
{"level":"info","message":"Redis not configured, continuing without cache","service":"cbc-sms","timestamp":"2026-08-17 21:07:12"}
{"level":"info","message":"Serving frontend static files from: /home/aereuxky/cbcsms-backend/public","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"Testing database connection...","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✓ Sequelize database connection established successfully","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✓ Database connected successfully","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✓ Database schema loaded (models initialized)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✅ Socket.IO initialized for real-time notifications","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✅ Scheduled Messages cron job initialized (runs every minute)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"[Email Queue Job] Initializing 24/7 background worker (interval: 15000ms)...","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✓ [Email Queue Job] Background worker active","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Initializing (interval: 120000ms)...","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✓ [Payment Email Catch-Up] Job active","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✅ Weekly fee clearance email job initialized (runs every Monday at 9:00 AM)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"Initializing integration sync cron job","schedule":"*/5 * * * *","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"Integration sync cron job initialized successfully","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✅ Background worker jobs initialized (Email Queue 24/7 active)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✅ Guardian Email Worker started (enforcement mode)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"🚀 CBC SMS Server started successfully","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"📍 Environment: production","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"🌐 Server: http://0.0.0.0:5000","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"💾 Database: Connected (Sequelize ORM)","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"✨ Tables: 168 models loaded","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"level":"info","message":"============================================================","service":"cbc-sms","timestamp":"2026-08-17 21:07:14"}
{"durationMs":63.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"db779ea9-bb95-412b-8c83-b5ed2b2d8ead","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:07:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":31.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"85263f0c-57fd-4b82-a652-c9c733c5b70c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:07:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":80.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"cd0df561-8f63-4afd-8920-6372b6e9c83f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:07:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":640.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":649.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":641.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:07:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"88caff8a-244d-40bd-8eac-de219319cc4f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:07:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:07:44"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:07:44"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:07:46"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:07:48"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:08:00"}
{"durationMs":35.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"fdae2935-5563-4ffc-b857-eca5defbbe26","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:08:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b6c01673-9536-492e-8de7-7721ff94d173","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:08:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":69.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"a8da41d1-2506-4230-8a86-b5611d2a9a30","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:08:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":2033.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:08:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1514.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:08:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":2067.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:08:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"590a4895-ed9b-427d-8906-6e455d5698b4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:08:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:09:18"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:10:00","totalConnections":1}
{"durationMs":6.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52735b45-121d-4124-bf3f-12d90bbf336c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:11:18"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:13:18"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:15:00","totalConnections":1}
{"durationMs":3.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e1588a67-7465-4012-8835-3f6ff139a6c2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:15:18"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:17:18"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:19:00"}
{"durationMs":51.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"fdcca73b-46ff-46c9-8fd6-e0094ca9ca34","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"95ee208f-f115-4cbe-a4d0-850b138132fa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":64.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"0f7b548f-07cb-45ed-8316-3cc32db2ac0f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":1487.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1677.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":1749.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1741616b-4517-441c-ab89-614f35407858","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:11","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":89.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"aa785694-6b81-4b48-be86-885e697400e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:19:14"}
{"durationMs":236.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"5c1a4d2c-8a52-409e-a5c0-fe2d163d0c1d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":17.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b186291f-e617-46df-b59c-e0f2acba8f68","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"562a88ac-00b9-405a-bf55-89c15dc8ad3a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"c4e0fbec-1e17-4bd4-9968-0466ecee6827","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":64.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"5f2ec8ae-49f2-49d2-b83e-18674d76a224","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":136.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"7ab78650-4e76-4ca6-ae81-22c892976ddc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":141.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"458cbea2-0e7c-4065-8b04-815b578ce69f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:19:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":610.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":767.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b8636f55-0cb3-47cd-bce7-97e93533061a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:16","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:19:16"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":511,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":543.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":545.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":549.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":627.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":742.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fc6314dc-0665-460e-a78f-9707a020bbca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:16","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"192.178.11.5","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36 (compatible; Google-Read-Aloud; +https://support.google.com/webmasters/answer/1061943)","userId":null}
{"data":{"from":"/guardian","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"192.178.11.5","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36 (compatible; Google-Read-Aloud; +https://support.google.com/webmasters/answer/1061943)","userId":null}
{"durationMs":3.46,"ip":"192.178.11.5","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c9ad3dac-898a-429b-af4e-18eb5765eef4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:17","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:19:18"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"91ecf599-7f82-43a6-bbd3-bfe3771b3630","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":57,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":4.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6e9cf321-6855-447e-9ed2-1958d34f7eaa","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:31","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":37,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3b85f3df-e414-4c5b-b3a6-1ee69dd20e87","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:32","userId":null}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786990769946-908605","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":4.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"03fb3777-b072-4e7a-ba38-e6d706ab62a0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:33","userId":null}
{"durationMs":4.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"9cc5fa08-430a-4488-bacb-1ba5e121c842","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 21:19:33","userId":null}
{"durationMs":41.52,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"554f8c75-3c67-4c9a-aacd-c3ee219964e9","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:34","userId":null}
{"data":{"from":"/guardian","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786990769946-908605","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":832,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/guardian","navId":"1786990769946-908605","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":832,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/guardian","navId":"1786990769946-908605","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":867,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"method":"GET","status":401,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":436.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 21:19:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":5.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5678e17c-2f00-4843-bd8d-35afbe6a944d","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:34","userId":null}
{"durationMs":96.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"5c7a3fc1-3efc-47a0-b804-203b6469ca2e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":44.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"eb05c274-5876-456d-bc87-8303a638fe9a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:35","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":555.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":490.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ab8e7043-ce9d-48e4-8cfe-0e2edf518170","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":91,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"23a4a45b-3876-4bf9-aea7-c8a6e8256272","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Invoice","name":null,"type":null},"durationMs":22,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"06e5629a-4a32-46dc-9f90-fefe27bd0903","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":34,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:19:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3fec4d99-b3bb-4b34-a382-79c396a57b8e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:19:59","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:20:00","totalConnections":1}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786990797261-510095","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"15e9519b-e410-4efc-bada-fcb5f4103560","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:01","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":3.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e0ae910-ded0-418d-be42-f05084a3f27e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:20:02","userId":null}
{"durationMs":64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"b6c38226-b5e8-4e7b-84f1-1f83619d190b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":34.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"24bebd30-51e9-4975-a7f2-f7287a007b20","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5dedd163-8879-4684-b6c4-2f7193bfad14","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"c6a851ce-e9c6-4a9f-b154-25203e562c24","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"a5f838af-0b99-443a-bb3a-3897bb22272a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":244.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"b585e885-0146-4043-9693-4f486fd9aa2d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":552,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:10","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":864.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:10","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":737,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:10","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":775.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:10","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":807.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:10","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.3,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bd8b0985-7b8a-4a1e-9881-3daee5c937ce","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"d01696a5-cecd-46dd-9dfc-9bb07687db8d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":1287.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:11","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":472.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:11","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"237547eb-b1aa-4cc7-971b-a7c83ba4b4e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:11","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Pay KES 21,482.00","name":null,"type":null},"durationMs":78,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:12","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.53,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"51905eca-665f-4317-907e-920b45b1cb98","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:12","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":49.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"d0053100-659e-4d0c-a4e8-ed3969d5189f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:17","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"3c90f060-d689-4716-b3f2-a7b981523449","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"6225fc0a-cc27-4870-8e94-8cdade6d489c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"840e9a0e-4e58-483b-a3f2-faeae535233a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"782895ec-8366-4735-b6a3-6d43fe54a27e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":71.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"b9943685-f351-4418-b98f-7f79fb849360","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":482.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":838.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":768.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":770,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":787.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":1123.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ffaeadd5-ab8b-4c25-8341-7528db3d78f0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":35.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"c31e22d6-ec5d-4176-8bec-40850455ec04","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:20:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":466.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6d627611-9796-44f9-a456-e316473dcae1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Pay KES 21,482.00","name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c0da6013-7018-4dfd-b7f3-985f4d1ff636","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"KCB Bank","name":null,"type":"button"},"durationMs":9,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:20:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3fbfe0ba-0c11-47fb-be8d-6fdd329d2b3b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:20:42","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:21:00"}
{"amount":1,"feeItemIds":["c71d7e60-c83f-46f5-ac6d-dcbe7afcfd1c"],"guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","invoiceBalance":21482,"invoiceId":"35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","level":"info","message":"[Guardian Payment] Initiating M-Pesa payment","service":"cbc-sms","studentId":"cmp8gtpz200fy8bcnxg8120p8","timestamp":"2026-08-17 21:21:02"}
{"bankAccount":"***6152","bankName":"KCB Bank","bankPaybill":"522522","level":"info","message":"[Guardian Payment] Bank C2B direct settlement configured","service":"cbc-sms","timestamp":"2026-08-17 21:21:02"}
{"data":{"id":null,"label":"Pay KES 1 via M-Pesa STK","name":null,"type":null},"durationMs":22,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c7528456-b1ed-4507-96d1-996628e39579","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:03","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"checkoutRequestId":"ws_CO_17082026212103160706576238","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","level":"info","message":"[Guardian Payment] STK Push initiated successfully","requestId":"4401e45e-bb8f-4cde-9cd1-9d920d96e903","service":"cbc-sms","timestamp":"2026-08-17 21:21:06"}
{"durationMs":3905.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa","requestId":"1643e567-655e-42d2-932a-ec0b7d178b44","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa"},"durationMs":4375.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.69,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"af2d456d-9e41-465b-abac-75919097e0dd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"bb201dcd-63ae-4da3-b2aa-975aa84fdc2c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":441.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a69cfd68-cab6-4f1d-8c0d-a47e3813eaa3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"8cad247a-d96b-407d-8554-84a1f0ea0509","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":498.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c806d811-5cc4-416f-acdf-e840d1ce7cb0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:11","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"7876cf60-1085-45b0-9334-4c2c6e99a88b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:12","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":441,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"254b5121-9301-4d63-958b-3d5bb963e047","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":36.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"51dd34ae-f19f-4c1e-afbe-3ca113ac85bd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 2 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:21:14"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":454.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5b51933f-034d-4afd-921e-a79784ecfc37","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"41457f32-a713-4038-89cb-4d2359a0685d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:16","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:21:16"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":456.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.38,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f398eea1-8314-43b6-acc2-097d5b4a94cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:17","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":35.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"04d24d1c-fe6e-47bc-96af-ff488c32be76","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 2 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:21:18"}
{"durationMs":16.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"5d95cfad-3dca-4fda-a6c8-7069c18018ee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"141d8b69-a7db-462e-ac33-191643c0e16f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:21:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":53.97,"ip":"196.201.212.69","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"18bffc77-3c32-4862-a239-b080725e2687","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:19","userId":null}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":527.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":789.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":826.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2abaf782-19e2-4f98-9950-027949c0ecf3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238","requestId":"1e1b72ca-a705-4f83-861f-d569d33e588b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_17082026212103160706576238"},"durationMs":509.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c7f5af7b-63e2-450b-b1ff-07037b72abed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:21","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":75.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"d7bff68a-3f53-4467-8425-0b610e35d249","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:23","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":583.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"14f74415-c777-4585-b81d-3f6a5752e7b9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"06ddbb0a-abf7-4386-89f7-c44bb2541447","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"School","name":null,"type":"button"},"durationMs":23,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bb8cbc3f-8c47-4771-b7f3-0310a1ae0d7a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":51.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/attendance","requestId":"5544bafe-d7c0-4675-896f-9df6dfd5f576","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786990889882-912762","text":"Attendance"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":"1786990889882-912762","text":"Attendance","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":514,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786990889882-912762","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":514,"event":"NAV_STALL","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1786990889882-912762","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":537,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d94800f9-5f8d-4a4f-a244-d4fae03371b1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/attendance"},"durationMs":524.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"65d024b8-394c-4361-a035-f9d3c4118c23","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:21:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:22:00"}
{"durationMs":37.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"c89ec308-5a5d-46ad-b85e-6d1e79c0bfdf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:22:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2b2a1a1d-1470-4cf6-9024-4124e4dc2063","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 21:22:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":811.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:22:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1214.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 21:22:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5c6dc476-9154-4ec5-ba1b-b4593305fd67","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 21:22:21","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:25:00","totalConnections":1}
{"durationMs":2.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8fa67983-9c20-4b1d-963b-2ac2d9297e0a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 3 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 21:30:00"}
{"durationMs":5.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a4d2d446-3fef-429b-ab67-9134d7409298","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:35:00","totalConnections":1}
{"durationMs":4.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8e094002-fdaf-4b4f-875e-e7f78c861472","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:40:00","totalConnections":1}
{"durationMs":2.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4631dcd3-0262-4c23-a37b-25fe64076a9b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:45:00","totalConnections":1}
{"durationMs":2.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ac9128bf-06af-460b-816c-596f290da4e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:50:00","totalConnections":1}
{"durationMs":2.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"50e7842a-ac99-4742-af13-810576c3072f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 21:55:00","totalConnections":1}
{"durationMs":4.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"452638fa-eebf-4fc4-8139-83fdf362b6eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 21:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 21:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 21:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 21:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 21:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 21:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 21:59:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 22:00:00"}
{"durationMs":3.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f603be3-ec9f-4639-b09a-48e9b0fa0faa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:05:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f846a0fe-0372-4e1f-b176-68c327431437","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:09:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:10:00","totalConnections":1}
{"durationMs":4.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"60ac7700-440a-4b15-a522-d8f05c321a82","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:15:00","totalConnections":1}
{"durationMs":2.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e6af4ecb-1c21-40c1-a443-e12b5898eab1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:20:00","totalConnections":1}
{"durationMs":4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2fb54f06-425a-4f31-ad3b-bca5f867d0b1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:22:00"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 22:22:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/attendance","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 22:22:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.82,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e253bba4-bbb0-43be-9cb6-281cf31cff79","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:15","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":25,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 22:22:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"92475e1e-f7c6-431b-8452-62640a1e38a4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:29","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":65,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 22:22:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce9e9117-7357-489f-a65b-fad572ec9ef3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:29","userId":null}
{"durationMs":905.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"3fe3a22b-0000-4b03-89a6-9a99b4c5e7fe","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:30","userId":null}
{"durationMs":27.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"3b17da55-11da-4163-997b-9a722cc17454","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1490.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bb2e2e67-a7ed-46ad-81ff-7e6c67de99f3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:31","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":34.31,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"1407a521-da5f-4bec-a696-5ff7b2277c03","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":59.7,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"802c13a6-c8a1-4f6f-b9cb-975c58f6efb3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":29.24,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"e5c6c756-10c1-40f8-bf5e-42b39f422209","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":1494.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":22.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c3a9831a-f2ec-41f6-8df8-fe9f4edb9bfc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":45.12,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"f7c74fd1-11a6-42f5-9511-9dbd915c4087","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":87.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview","requestId":"c5234de5-20cd-40c5-bf06-260591ff1ccf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:33","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":38.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"bbc43188-cdf8-4d53-a4c2-a0d1907ef3c7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.84,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"b04f4140-ca16-4525-9891-663eb105555e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":23.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"2df91fcb-efed-4a90-8c2c-49b4870e78a4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.42,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms/current","requestId":"a54b9ea0-9c06-49b5-bd55-377f7a43ca48","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:22:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.18,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"7fb67b58-9bc9-4059-830f-2267071c160e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":121.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"5ea01c23-b0a1-4937-b695-564d1eba94f2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":796.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":820.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":1707,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1740.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/login","navId":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/overview"},"durationMs":574,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.37,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5fc2a3b1-9ec1-44fe-a82c-e1a4a6b25d82","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":70.23,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/status","requestId":"950b4c87-f4d9-439e-95e5-f6e849b3c25f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":65.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview?termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"17341458-adbc-44a6-80fc-520c38d4f2b9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":37.86,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/attendance/sessions?streamId=cmp8gtppb00dy8bcnm1lpuafg&date=2026-08-17","requestId":"e4778873-4651-4873-b588-b3650502f86a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":49.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/dashboard?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"7110453a-3742-42ec-9e86-b68fabfa9a94","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":30.44,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"9d2b741d-73ca-42b5-aaf3-b16048c8874a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":20.76,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/timetable?streamId=cmp8gtppb00dy8bcnm1lpuafg&day=Monday","requestId":"71b5ea6e-cd32-4b8f-a3d9-b3380d7e9ede","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-schedule"},"durationMs":871.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":887.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":1189.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academic/terms/current"},"durationMs":1274.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":1552.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":1754.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/status"},"durationMs":1287.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/overview"},"durationMs":798.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/attendance/sessions"},"durationMs":500.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d25bc3c1-9a83-47ad-a273-2de678f28d14","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":36.22,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"f139abcc-b7b7-425c-b8e2-e04c13579162","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":25.48,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"4694b288-b606-459d-9487-d8d590eba833","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:22:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":20.17,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/status","requestId":"c3c54ad8-eda2-4396-b3f8-e805881dff6f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:22:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/dashboard"},"durationMs":787.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":886.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/timetable"},"durationMs":1097.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x"},"durationMs":1237.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":711.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/status"},"durationMs":738.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:22:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8b6e0d19-7e94-4f8a-a2ba-ef3ef7a5a340","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:22:37","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:23:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":63,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":33.04,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"312aaf87-e69c-4998-8365-8bb20a8b39d4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:01","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/calendar","navId":"1786994579153-672472","text":"Calendar"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5e4cee02-0e04-4b57-9e6d-02602357df70","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:02","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":16.87,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/events?startDate=2026-07-24T21:00:00.000Z&endDate=2026-09-07T20:59:59.999Z","requestId":"35c79c43-2cb8-4cc9-a5e4-066391cef1f9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:02","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":21.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/holidays?year=2026","requestId":"6e601b46-2721-475a-b702-168816e7107e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:03","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":30.24,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/calendar/summary","requestId":"0ba3cbb3-f41d-4423-aec5-82dacac8f8a7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:03","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/teacher","href":"/dashboard/class-teacher/calendar","navId":"1786994579153-672472","text":"Calendar","to":"/dashboard/class-teacher/calendar"},"durationMs":849,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/teacher","navId":"1786994579153-672472","to":"/dashboard/class-teacher/calendar"},"durationMs":849,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/teacher","navId":"1786994579153-672472","to":"/dashboard/class-teacher/calendar"},"durationMs":885,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/calendar/events"},"durationMs":380.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/calendar/holidays"},"durationMs":694.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/calendar/summary"},"durationMs":719.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2c5a1e7d-ac8b-4d61-b66d-b42f74e6af10","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:03","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Public Holidays","name":null,"type":null},"durationMs":27,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.76,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42d176f7-8784-4163-900c-89e59e49ca1e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":29,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/timetable","navId":"1786994585075-395227","text":"Timetable"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/calendar","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":15.32,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"56e65190-4245-42b5-a42d-c1df4d4efbcf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":54.01,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/timetables?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"3ca8d4e8-79ca-4b2e-8bad-6d4b8e1445ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":38.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"9763d813-96e9-49eb-bf5e-108d98fb1182","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":38.36,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule","requestId":"a3b1837f-650c-4a16-bc7f-50bcd57065e8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/calendar","href":"/dashboard/class-teacher/timetable","navId":"1786994585075-395227","text":"Timetable","to":"/dashboard/class-teacher/timetable"},"durationMs":2173,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/calendar","navId":"1786994585075-395227","to":"/dashboard/class-teacher/timetable"},"durationMs":2173,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/calendar","navId":"1786994585075-395227","to":"/dashboard/class-teacher/timetable"},"durationMs":2206,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/timetables"},"durationMs":410.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-schedule"},"durationMs":714.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-schedule"},"durationMs":718.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.06,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1e65fa28-04bc-4aac-afda-3a663f937eaf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Class Timetable","name":null,"type":null},"durationMs":50,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.79,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"546c59f9-311a-4341-8636-e6956108dbd2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:14","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:23:16"}
{"data":{"id":null,"label":"My Lessons","name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.28,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9908acbc-449b-48b7-bfd7-a4db9540b75f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:17","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:23:20"}
{"durationMs":37.6,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/lesson-plans?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x&week=1","requestId":"6194217f-a37a-4139-b1e2-f97113962036","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:27","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.55,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"b69e1a5f-df91-420f-ab29-3cc6f3be43c4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:28","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Lesson Plans","name":null,"type":null},"durationMs":33,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.55,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ad3b2113-d853-4c14-a558-07ed5c593180","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:28","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/lesson-plans"},"durationMs":400.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":735.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.68,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"69678265-613c-4290-8821-e501e3734a0b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:28","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms","requestId":"78c33002-70e4-4a0e-b5d4-5d073c1dbd4a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":28.74,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"6a361bf4-53af-4653-8184-59c96f3d4923","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.63,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"1072a99b-598f-4d5c-9bcf-50cccfb5866c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:31","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Create Lesson Plan","name":null,"type":null},"durationMs":9,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/timetable","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/timetable","href":null,"navId":null,"text":null,"to":"/dashboard/class-teacher/lesson-plans/create"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/lesson-plans/create","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/timetable","navId":null,"to":"/dashboard/class-teacher/lesson-plans/create"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/lesson-plans/create","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":30.31,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"777c5393-4a01-49e4-a59f-b4342443d7d3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:31","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academic/terms"},"durationMs":421.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":1047.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":1119.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.77,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e9b0194b-7c91-4256-9619-d11e63bdae20","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":18.55,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"2a1ef314-a4a3-4cea-ac19-690b0c5bbb95","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":16.11,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"f971b65d-7408-4c81-81d8-cdb08d7b5b0f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:23:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":369.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":372.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:23:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.89,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b6b60262-c78d-46c0-956b-a2ab4f8a853f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:23:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:25:00","totalConnections":1}
{"durationMs":2.23,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"89513cda-74ca-4de5-8640-ae8d5b226aec","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:30:00","totalConnections":1}
{"durationMs":3.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"307b3eaf-3ff4-4feb-ada5-0b2e926645e0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:33:20"}
{"durationMs":40.57,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"293176b6-889e-42d5-9601-2795b566589e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:33:29","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"fba24e87-20b3-489a-a5b2-f9d73a85976c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 22:33:29","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1651,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:33:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":1885,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 22:33:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f2099ee5-8f68-4865-9e2c-5380c89b13cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 22:33:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:35:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"112d7b0d-a8ee-400b-861d-09b02e750d51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:40:00","totalConnections":1}
{"durationMs":4.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c83dd0f-823f-4ad9-813b-364ff7912753","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:44:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:45:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:45:00","totalConnections":1}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"09d9ae3b-82da-4e53-90ed-23b6c962ced3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:50:00","totalConnections":1}
{"durationMs":2.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"481c72ff-736d-4846-9d77-f463ca79b5f9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 22:55:00","totalConnections":1}
{"durationMs":2.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7341a975-b144-4beb-a0d8-115b0abb014b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 22:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 22:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 22:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 22:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 22:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 22:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 22:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 23:00:00"}
{"durationMs":2.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6a442225-5088-438a-941a-792b88b1042f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:05:00","totalConnections":1}
{"durationMs":2.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2ca754a9-790d-473c-a67a-5ae9cabf6463","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:09:00"}
{"durationMs":3.19,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"d1e14635-3f4b-4786-9d2d-2eb4c73d5158","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 23:09:05","userId":null}
{"durationMs":2.75,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3a9383d5-3ccc-4d3d-9a02-388bdcd33cfb","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-17 23:09:06","userId":null}
{"durationMs":47.27,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"1149b8e2-0458-464e-b778-3e83a3aef4da","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:06","userId":null}
{"durationMs":79.92,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"939cf15a-966a-4924-973b-ae0a0085f8c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:09:06","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":86.7,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"f3069b39-4fd1-4a18-b70a-3ef87be1ce38","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:09:06","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/unread-count"},"durationMs":1169.8,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1455,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e8d4f9fc-3a86-479c-9f16-30a13eff9430","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:06","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":435.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":438.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.46,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"46580385-b0d4-4dbd-8794-4a944c58ff2d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":83,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/lesson-plans/create","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.74,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"32e0b70c-7c41-4e56-997c-7739d8a69989","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:13","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/clocking","navId":"1786997350675-55335","text":"Clock In/Out"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/lesson-plans/create","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.75,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f71aecf0-e106-4db0-8106-34a20c5baa2e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:14","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":56.38,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"d92092bf-662c-4200-9003-4c02cbef329a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:14","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":40.11,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"dae5d4af-af79-4ddd-8720-d99831296b90","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:14","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:09:14"}
{"data":{"from":"/dashboard/class-teacher/lesson-plans/create","href":"/dashboard/class-teacher/clocking","navId":"1786997350675-55335","text":"Clock In/Out","to":"/dashboard/class-teacher/clocking"},"durationMs":934,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/lesson-plans/create","navId":"1786997350675-55335","to":"/dashboard/class-teacher/clocking"},"durationMs":934,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/lesson-plans/create","navId":"1786997350675-55335","to":"/dashboard/class-teacher/clocking"},"durationMs":1034,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-status"},"durationMs":383.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-history"},"durationMs":403.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5c557ac1-9e79-489b-a169-31dcfd9e1f5d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:15","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:09:20"}
{"data":{"id":null,"label":"QR Code Scanner","name":null,"type":null},"durationMs":56,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":31.8,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a5020b13-2817-4313-b722-1eced1aae837","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":37.36,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/settings","requestId":"c00c6811-e667-499f-9b1b-8221b78c2de2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Biometric & Camera","name":null,"type":null},"durationMs":83,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Location & Settings","name":null,"type":null},"durationMs":51,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.12,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f7a48dc2-1139-4d06-87a9-3b651a1c9dc6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/settings"},"durationMs":425.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.92,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b86cde07-f780-4e26-834e-431164a3f4dd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"QR Code Scanner","name":null,"type":null},"durationMs":26,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.49,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"47065e12-cb80-4278-a197-5344aecc74f1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":45,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.96,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"07097b7f-77d4-4407-aaf2-708de9dc19ca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6cb53bf1-bae4-42a8-b777-7333f2b62886","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:43","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"37374d20-58d5-45de-99f7-49419f73ddda","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:44","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":3,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.73,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"930a3edf-4c0e-4331-aac5-aa5cbe877756","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:46","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Biometric & Camera","name":null,"type":null},"durationMs":18,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"28722bf9-27c0-43b4-99e3-11cf24b202de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:49","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Camera","name":null,"type":null},"durationMs":13,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.82,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"095a56ef-14e7-49c0-8568-23f65bb62010","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"QR Code Scanner","name":null,"type":null},"durationMs":20,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.36,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"67d7ceba-8666-497d-999e-d6afeae916e4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:54","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":12,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":12,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:09:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":16.52,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"184da28b-750a-4ff2-942b-c095d2d04345","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:09:55","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:10:00","totalConnections":1}
{"level":"error","message":"Error: Invalid QR code format\n    at Object.processQRCode (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.service.js:596:17)\n    at processQRScan (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.controller.js:109:42)\n    at newFn (/home/aereuxky/cbcsms-backend/node_modules/express-async-errors/index.js:16:20)\n    at Layer.handle [as handle_request] (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/layer.js:95:5)\n    at next (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/route.js:149:13)\n    at Route.dispatch (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/route.js:119:3)\n    at newFn (/home/aereuxky/cbcsms-backend/node_modules/express-async-errors/index.js:16:20)\n    at Layer.handle [as handle_request] (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/layer.js:95:5)\n    at /home/aereuxky/cbcsms-backend/node_modules/express/lib/router/index.js:284:15\n    at Function.process_params (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/index.js:346:12)\n    at next (/home/aereuxky/cbcsms-backend/node_modules/express/lib/router/index.js:280:10)\n    at authenticate (/home/aereuxky/cbcsms-backend/src/middleware/auth.middleware.js:117:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)","service":"cbc-sms","timestamp":"2026-08-17 23:10:01"}
{"durationMs":17.56,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/clocking/qr-scan","requestId":"daa812ad-7449-43d9-92c1-97a9f76a3b36","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":400,"timestamp":"2026-08-17 23:10:01","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Process QR Code","name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"POST","status":400,"url":"/clocking/qr-scan"},"durationMs":377.6,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7c287ede-11d0-42eb-b416-9bc7db02bf6e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:01","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"59036951-4ed9-4bc3-be06-213e12f492d1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:10:02","userId":null}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":12,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.19,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"30e3952d-0018-4de8-b128-cb46fcb093d7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":18.76,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"27c8280f-b55f-4621-beb1-44e95f0ccc34","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"da7d1e78-b56b-4908-8a00-38cd886f4ca4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":407.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":695.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"My Clock Records","name":null,"type":null},"durationMs":54,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"82dcec4d-8f6c-481b-a2cc-5e31fea7e454","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":57.64,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"ba5efc76-48a2-41f0-aecb-98d4e6b1e3b0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"535038e4-8aca-4e94-a543-06edfdba3203","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:09","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-status"},"durationMs":435,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":15.56,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"db8dcd57-d5ce-4b09-bcb3-fb52e5c63632","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-history"},"durationMs":1907.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1437d5d1-17e3-47f5-8578-f3b0ce35efaa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":36.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/clocking/clock-out","requestId":"24a4e8ff-7194-42c5-bd9e-2477418c7889","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:19","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":33.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-status","requestId":"ba93fe27-ff9a-4ed5-b3a4-d81e20cd2bc2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:19","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":31.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/my-history?limit=20","requestId":"e8658a25-7b55-4a17-96e4-ea2e0b561806","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:20","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Clock Out","name":null,"type":null},"durationMs":9,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"POST","status":200,"url":"/clocking/clock-out"},"durationMs":373.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-status"},"durationMs":362.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.92,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"742ab37d-0a0d-4aab-9af3-75ba6db09fcb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:20","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/my-history"},"durationMs":671.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.27,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c47de814-7399-411d-8ec6-4b97b0a61129","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:21","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"Error: Already clocked in for today\n    at Object.manualClockIn (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.service.js:317:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async clockIn (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.controller.js:53:25)","service":"cbc-sms","timestamp":"2026-08-17 23:10:21"}
{"durationMs":40.16,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/clocking/clock-in","requestId":"886cb403-c2c8-4131-a99c-537a2ac8a9fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":400,"timestamp":"2026-08-17 23:10:21","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Clock In","name":null,"type":null},"durationMs":12,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"POST","status":400,"url":"/clocking/clock-in"},"durationMs":373.4,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.85,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"85ea047e-a01c-46e3-8d6e-21c3a378ab70","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:22","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"Error: Already clocked in for today\n    at Object.manualClockIn (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.service.js:317:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async clockIn (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.controller.js:53:25)","service":"cbc-sms","timestamp":"2026-08-17 23:10:23"}
{"durationMs":22.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/clocking/clock-in","requestId":"1f9e8aef-da99-4b3a-ab0f-5eb8921da572","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":400,"timestamp":"2026-08-17 23:10:23","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"POST","status":400,"url":"/clocking/clock-in"},"durationMs":349.8,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.05,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2c7148a1-271e-4f8a-8d46-51a6ca26fe26","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:24","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":10,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"089daf5d-ba8f-4320-b07f-b3aef44464d0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:28","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"QR Code Scanner","name":null,"type":null},"durationMs":24,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":33.09,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e5f3c4e9-9624-4564-8204-7cb13395c2c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:42","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":56,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"46d45db9-27c4-4b82-8b4e-8da216ee1bb2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:43","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/students","navId":"1786997440847-708656","text":"My Students"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/clocking","href":"/dashboard/class-teacher/students","navId":"1786997440847-708656","text":"My Students","to":"/dashboard/class-teacher/students"},"durationMs":435,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/clocking","navId":"1786997440847-708656","to":"/dashboard/class-teacher/students"},"durationMs":440,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.93,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"87d879bd-cbe0-41a7-b28f-dda3186c4fa2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:44","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":236.74,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"1e64e3b3-0028-4279-a5fc-aaa2eb27343f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:45","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":604.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:46","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c3590112-5838-4850-bdbe-1ee099374ec6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:46","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":46.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"e949c08f-4b9a-4cd7-b447-149202f9d09e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:10:56","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Other Classes","name":null,"type":null},"durationMs":19,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.7,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bd7255a1-a405-4586-8e37-5757e96a9f36","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:56","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":411.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:10:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f2ce05dd-59d0-4126-bb00-991c2a8accd2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:10:57","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:11:00"}
{"durationMs":37.46,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"05382df5-9747-4868-90bb-a26c0aaf078a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:03","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":62.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-schedule?day=Monday","requestId":"b768c84c-9896-42df-b0d9-df2dbec4fffe","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":69,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/dashboard?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"2bf189e2-8719-4099-8792-fccd409fe466","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":24,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/attendance/sessions?streamId=cmp8gtppb00dy8bcnm1lpuafg&date=2026-08-17","requestId":"0154c3af-1c63-4961-892f-4b20af2c7d9e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":79.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/overview?termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"26675cc6-dc63-4a3e-a8cb-73b444ff7e0f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.64,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/timetable?streamId=cmp8gtppb00dy8bcnm1lpuafg&day=Monday","requestId":"52a0ed84-fb94-4b4b-9f53-646045a08a49","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Dashboard","name":null,"type":null},"durationMs":18,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/students","href":null,"navId":null,"text":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/students","navId":null,"to":"/dashboard/teacher"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":451.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.44,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6bfd98d6-b8bc-47e4-8693-3aa81cbc2e33","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":54.12,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"d762a1c1-0e89-472f-92ea-29fc26c9942f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":23.91,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"6f8d0bda-b2cc-44d6-9e8e-ba44c91ce039","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":35.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/status","requestId":"ef0c7763-ba0c-4109-b1ef-78b7f5a315c0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:05","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-schedule"},"durationMs":781.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/dashboard"},"durationMs":892.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/attendance/sessions"},"durationMs":1132.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/overview"},"durationMs":1438.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/timetable"},"durationMs":1556.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x"},"durationMs":1748,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":538.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/clocking/status"},"durationMs":683.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.03,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a6f309a9-fd8c-41f8-a939-a69ffe39afad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:06","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":23.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"8c420fe7-bed3-4824-8d60-94e28d88d676","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":65,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.28,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"71dc9dac-ed5c-4b5f-a0a6-4bd1216cd7a0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3bc554bb-85aa-41e2-af2c-ecdbf117f690","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":393.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":415.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/attendance","navId":"1786997465373-117697","text":"Attendance"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/teacher","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.44,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"45645d1d-aa72-4a3c-9c8f-1e2c2fdfe6e2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":38.48,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"ead93111-b125-4bb7-af09-22f44eaab1ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/attendance/sessions?streamId=cmp8gtppb00dy8bcnm1lpuafg&date=2026-08-17","requestId":"579621d0-fd14-4128-8d00-c89287d93a4e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:09","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/teacher","href":"/dashboard/class-teacher/attendance","navId":"1786997465373-117697","text":"Attendance","to":"/dashboard/class-teacher/attendance"},"durationMs":490,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/teacher","navId":"1786997465373-117697","to":"/dashboard/class-teacher/attendance"},"durationMs":525,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":376,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/attendance/sessions"},"durationMs":662.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.21,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"643b148e-abde-49ab-8104-a0160c40e0b9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:09","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.46,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/attendance/sessions?streamId=cmp8gtppb00dy8bcnm1lpuafg&date=2026-08-17","requestId":"9d0a45cb-6edb-46e9-a7a2-0b89536adb54","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:10","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"History","name":null,"type":null},"durationMs":29,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/attendance/sessions"},"durationMs":352.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cbf03419-d933-47f4-87bf-9761a438f755","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:11","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Reports","name":null,"type":null},"durationMs":29,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.74,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"01aa6a79-cd65-47a2-8459-479fc3642654","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:13","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:11:14"}
{"data":{"id":null,"label":"Roll Call","name":null,"type":null},"durationMs":36,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.47,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c71fc7ac-5870-4988-9508-526500a7bca0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:15","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:11:18"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":15.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6ce260e9-6321-4d90-ad2a-b7cbb63ee694","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:20","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:11:20"}
{"durationMs":32.23,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"1af120e1-1bf5-48ef-8163-2e98b5b07f7b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:22","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":17.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms","requestId":"68a48951-8810-4f50-924d-82551d6d53b3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:22","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":15.78,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"5e4fac79-f297-4d65-a5ec-5c298d8b75e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:22","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/assessments/formative-grades","navId":"1786997477542-597365","text":"Formative Grades"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/attendance","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/attendance","href":"/dashboard/class-teacher/assessments/formative-grades","navId":"1786997477542-597365","text":"Formative Grades","to":"/dashboard/class-teacher/assessments/formative-grades"},"durationMs":422,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/attendance","navId":"1786997477542-597365","to":"/dashboard/class-teacher/assessments/formative-grades"},"durationMs":440,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.89,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0bf0184e-3fec-40ff-a2d4-a732a8b3e7d0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:22","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":57.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/assessments?termId=cmp8gtpme00d68bcnq5m8mk8x&streamId=&isPublished=true&limit=100","requestId":"84127fa2-23a5-4371-aaed-51fc775c4679","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:23","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":1309.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academic/terms"},"durationMs":1583.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":1659.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/assessments"},"durationMs":1939.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":18.68,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ad059daf-befa-491f-aeef-33aca36f964f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:23","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":58.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"ea169254-a858-4710-a9c9-59e64baaf989","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:29","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":16.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"72f192f4-9dae-4bb7-a368-fb0d0ec5617f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:29","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Bulk Entry","name":null,"type":null},"durationMs":19,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"40c63471-1ffd-4e1c-81d4-820bbed81149","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:29","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":388.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":647.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Report Cards","name":null,"type":null},"durationMs":18,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.23,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eb2cec07-a875-4fe2-93e5-1e9ee5000c59","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:30","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":18.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academic/terms","requestId":"789cab93-4fac-4b1c-95bc-741e20865086","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":30.93,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"e8a66e81-5373-4e84-a1ca-0b5184c25ef7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"CBC Grade Entry","name":null,"type":null},"durationMs":99,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/academic/terms"},"durationMs":360.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":679.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7211afbd-5980-4583-8723-9e4f22fd0dd0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:33","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":19.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/cbc/learning-areas","requestId":"362142f5-1fe8-4e22-9654-18e5306995f0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:33","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/cbc/learning-areas"},"durationMs":1709,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":38,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.96,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"346c82fe-cf19-4692-856e-8bacf4a629d5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:34","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":40.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/students?streamId=cmp8gtppb00dy8bcnm1lpuafg","requestId":"1af5d7af-b5ba-4f86-9650-fc3d0ad8ae8b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/portfolios","navId":"1786997491839-816993","text":"Student Portfolios"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/assessments/formative-grades","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/assessments/formative-grades","href":"/dashboard/class-teacher/portfolios","navId":"1786997491839-816993","text":"Student Portfolios","to":"/dashboard/class-teacher/portfolios"},"durationMs":415,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/assessments/formative-grades","navId":"1786997491839-816993","to":"/dashboard/class-teacher/portfolios"},"durationMs":426,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.49,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2430b32e-6899-43ee-aa43-965f6dc77148","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:35","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/students"},"durationMs":467,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"be7d2b3f-b17c-4662-988f-c7cb0979987f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Upload Evidence","name":null,"type":null},"durationMs":5,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d7a21d09-1b51-48a5-8121-e3ad7b26407e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:37","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Upload Evidence","name":null,"type":null},"durationMs":7,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c3e2d971-3e74-4869-a095-0382834cdade","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:41","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.25,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"71322831-69eb-4d30-bda7-2e7e40d8bf15","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:42","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":30.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"5dec4db4-2e52-447d-9b07-bbc37fc31a14","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:43","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/analytics","navId":"1786997500120-493810","text":"Analytics"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/portfolios","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/portfolios","href":"/dashboard/class-teacher/analytics","navId":"1786997500120-493810","text":"Analytics","to":"/dashboard/class-teacher/analytics"},"durationMs":458,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/portfolios","navId":"1786997500120-493810","to":"/dashboard/class-teacher/analytics"},"durationMs":479,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.24,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"59ef159c-49e7-4a90-92ca-58565282a41d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:43","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":41.08,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"61cf12dd-5780-4dd9-8d4e-3ce755350cca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:46","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":2883.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x"},"durationMs":458,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.49,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aeb589a9-46e4-4880-b1ff-b644cada3377","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:48","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":32.01,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/my-streams","requestId":"e71ac40e-d4c7-4787-ae50-74aac0de9acd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Subject Mastery & StrandsSubject-specific breakdowns","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3101e244-d9a1-43f1-b340-115491acc5fe","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/my-streams"},"durationMs":739.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"30f64253-c99e-4717-9c79-74f418a3a7be","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:51","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":28.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x","requestId":"cf677b01-0d5f-48c5-89f3-13fd81b398d5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:11:52","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"CBC Competency Radar Map7 core competencies tracking","name":null,"type":null},"durationMs":20,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/analytics?streamId=cmp8gtppb00dy8bcnm1lpuafg&termId=cmp8gtpme00d68bcnq5m8mk8x"},"durationMs":414.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.49,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c535e831-cbfd-42cb-b998-e14f9e2274ae","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:52","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"Settings","name":null,"type":null},"durationMs":36,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:11:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":11.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"40e7e298-e706-4cfe-9141-01d2ad633355","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:11:59","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:12:00"}
{"data":{"id":null,"label":"Orange","name":null,"type":null},"durationMs":63,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e71aeb7d-681d-45ad-84db-10e66dab0422","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:00","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":38,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aaf319d1-51dc-4701-8854-15fda57b7143","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:04","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/messages","navId":"1786997522466-411785","text":"Parent Messages"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/analytics","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/analytics","href":"/dashboard/class-teacher/messages","navId":"1786997522466-411785","text":"Parent Messages","to":"/dashboard/class-teacher/messages"},"durationMs":425,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/analytics","navId":"1786997522466-411785","to":"/dashboard/class-teacher/messages"},"durationMs":450,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.73,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"435f4d71-80a2-4bf9-9fee-aa52da9facc8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:06","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.33,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"c149a265-68d5-4a2c-85e1-007a39149051","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:12:07","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"0a193d41-a6ee-4462-ab64-d0ed41d9d7d5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:12:08","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":375.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":372.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"918c0156-9869-44af-a480-0c1ecf42af7a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:09","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/support","navId":"1786997527523-924168","text":"Support"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/messages","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":9.01,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c5b7ea20-80d0-4742-a74f-1107d3c09782","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:12","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":22.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/announcements","requestId":"0c4f0e1a-4d46-4d12-83ea-d8e81184cfd5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:12","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":46.86,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/support-tickets","requestId":"f0428a3d-c055-4d9d-bddc-9883201a0d83","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:13","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/messages","href":"/dashboard/class-teacher/support","navId":"1786997527523-924168","text":"Support","to":"/dashboard/class-teacher/support"},"durationMs":1872,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/messages","navId":"1786997527523-924168","to":"/dashboard/class-teacher/support"},"durationMs":1872,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/messages","navId":"1786997527523-924168","to":"/dashboard/class-teacher/support"},"durationMs":1898,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":34.91,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"dcabe9d7-4a8f-49bf-8fb5-3d395015cdb1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:13","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/announcements","requestId":"8a71d72e-afea-4015-add3-e168dacf6f54","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:12:13","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/announcements"},"durationMs":953.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/teacher/support-tickets"},"durationMs":1292.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/communication/announcements"},"durationMs":1598.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d3afc093-1324-4c57-8529-fa0bbdf69af2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:14","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"All Priorities","name":null,"type":"button"},"durationMs":166,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":14.11,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"00d44135-2f45-402f-938d-74f7d4562bc0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:23","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":43,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2a6fa73b-f765-4a51-bede-09f090c6cfe3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:24","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":29.41,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/auth/profile","requestId":"76b1986f-34e5-4925-8860-4ad72c6266f9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:27","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":83.52,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/staff/me","requestId":"c0041db0-5c4c-4006-b4e4-e8b8f399d00d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:27","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/profile","navId":"1786997543927-528277","text":"My Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/support","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/support","href":"/dashboard/class-teacher/profile","navId":"1786997543927-528277","text":"My Profile","to":"/dashboard/class-teacher/profile"},"durationMs":427,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/support","navId":"1786997543927-528277","to":"/dashboard/class-teacher/profile"},"durationMs":441,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/auth/profile"},"durationMs":366.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04d0f283-8e09-41f1-86c5-27ee585e4bef","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:27","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":200,"url":"/staff/me"},"durationMs":823.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":8.73,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"82aa9485-560e-4f7e-957d-9f8e7c888de6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:28","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":"radix-:rb8:-trigger-professional","label":"Official Record","name":null,"type":"button"},"durationMs":7,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.03,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3a5b6c04-447e-47b1-b43c-54146995c99c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:32","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":"radix-:rb8:-trigger-teaching","label":"Teaching Load","name":null,"type":"button"},"durationMs":8,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.06,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b671a08-19d5-4588-8e2e-4aa787d2e1e9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":57,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.78,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e47d70b2-dab5-4527-a846-30f9d044b5de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:43","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/settings","navId":"1786997561516-477873","text":"Settings"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/profile","href":"/dashboard/class-teacher/settings","navId":"1786997561516-477873","text":"Settings","to":"/dashboard/class-teacher/settings"},"durationMs":415,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/settings","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/profile","navId":"1786997561516-477873","to":"/dashboard/class-teacher/settings"},"durationMs":426,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/settings","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"efcc1145-9ee7-4bf0-b0bc-f1724eca96fa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:45","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":40,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/settings","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":15.28,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"086d01be-d2e5-4ae5-b1dc-13dd5dc641bf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:48","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpQuickStartTask.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async listQuickStart (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:40:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:50"}
{"durationMs":34.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/quickstart","requestId":"aafff8d2-189f-45d7-9f0f-ad7e791efe99","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpCategory.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Object.getCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.service.js:32:22)\n    at async listCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:9:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:50"}
{"durationMs":34.37,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/categories","requestId":"fb6482de-2c27-4aed-b530-059c1da11bf2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"href":"/dashboard/class-teacher/help","navId":"1786997566942-218289","text":"Help Center"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/class-teacher/settings","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/settings","href":"/dashboard/class-teacher/help","navId":"1786997566942-218289","text":"Help Center","to":"/dashboard/class-teacher/help"},"durationMs":420,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/class-teacher/help","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"from":"/dashboard/class-teacher/settings","navId":"1786997566942-218289","to":"/dashboard/class-teacher/help"},"durationMs":438,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/class-teacher/help","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":6.8,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fa84d062-0593-4aa2-b014-f9b55c534070","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:50","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/quickstart"},"durationMs":389.3,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/categories"},"durationMs":714.3,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.38,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cf12a803-79c9-4ab4-ba71-06c9790cac8d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:51","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpQuickStartTask.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async listQuickStart (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:40:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:51"}
{"durationMs":37.11,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/quickstart","requestId":"cbb9ace9-af36-4682-ba04-41ac345b6375","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:51","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpCategory.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Object.getCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.service.js:32:22)\n    at async listCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:9:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:52"}
{"durationMs":31.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/categories","requestId":"e27e510f-943e-448e-8615-d896cf0bae51","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:52","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/quickstart"},"durationMs":372.1,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/categories"},"durationMs":367.2,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":10.6,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"14e78ec5-3147-4d26-be0a-103f490ab6da","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:52","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpQuickStartTask.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async listQuickStart (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:40:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:54"}
{"durationMs":47.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/quickstart","requestId":"17098338-8790-405c-afe7-729005f95189","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:54","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"error","message":"SequelizeConnectionError: Access denied for user 'aereuxky_DrewGalowayDev'@'localhost' to database 'aereuxky_cbc_platform'\n    at ConnectionManager.connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ConnectionManager._connect (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32\n    at async ConnectionManager.getConnection (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)\n    at async /home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/sequelize.js:305:26\n    at async MySQLQueryInterface.select (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n    at async HelpCategory.findAll (/home/aereuxky/cbcsms-backend/node_modules/sequelize/lib/model.js:1140:21)\n    at async Object.getCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.service.js:32:22)\n    at async listCategories (/home/aereuxky/cbcsms-backend/src/modules/help/help.controller.js:9:41)","service":"cbc-sms","timestamp":"2026-08-17 23:12:54"}
{"durationMs":30.33,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/teacher/help/categories","requestId":"8dc179de-a867-4830-9afb-9e610e9e88f1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":500,"timestamp":"2026-08-17 23:12:54","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/quickstart"},"durationMs":425,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"method":"GET","status":500,"url":"/teacher/help/categories"},"durationMs":382.9,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":7.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4830a48e-e0e1-40b2-8ed3-fbcb7c059258","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:55","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/help","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":13.03,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"83736003-df39-43f4-bd0e-1ccabb9e7b31","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:57","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"data":{"id":null,"label":"15","name":null,"type":"button"},"durationMs":91,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/class-teacher/help","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:12:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"durationMs":12.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"676276f2-e279-40ff-964b-91ca993e8c5a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:12:59","userId":"cmp8gtjbg00cl8bcn0acvif07"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:13:00"}
{"data":{"from":"/dashboard/class-teacher/help","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard/class-teacher/help","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:03","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":3.07,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"055a51be-e5a0-48fc-aca5-307197a00e80","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:03","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:13:16"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.52,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"92aeec37-8406-413f-8c30-05f492986ff0","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:18","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:13:18"}
{"durationMs":679.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"0a187f6f-f694-416d-b807-a293b938573f","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:19","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":53,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.22,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f9994313-acf5-40c0-b005-def621ceda7b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:19","userId":null}
{"durationMs":36.62,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"779586a2-7ab6-4ce8-ab61-17ea8ea7d81f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:19","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":64.28,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"22a0987a-415b-4e47-ae8e-44633cb7b837","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":48.73,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"4628fd32-2844-4ecd-83a1-66bb716718ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":38.98,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"639c8b94-15e8-45c7-9daa-9fefa3293c3a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":45.87,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"bcd31eb0-e363-4bb7-acfa-3da5c20d3eb4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:13:20"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1112,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":444.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ae68e83d-cb81-42fa-8e9b-1b5b4c888e31","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":54.16,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"00543089-02c7-449d-b829-33c39d4f0e11","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":42.9,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"a1b6c1d6-4ec3-4ce4-b50e-562fc3ea4820","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.53,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"7476cb90-059a-47e5-98c3-29eea8991cff","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":32.44,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"309e46d7-687c-445e-ac56-da709ace2d9e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":443.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":737.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":780.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":791.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":1072,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.18,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6688dc49-4ff7-4de9-a200-1489cf03979b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":107.59,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"3bad4638-9182-4329-8624-3148456f1763","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":111.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"878b5dee-2121-45f8-b90b-66bbb33b603f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":102.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"feffb257-0154-4494-8d1b-491dc12ea978","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":69.84,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"c4396b1d-702a-4b60-a5df-ef85fcbc8c0e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":35.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"c66f9e7e-0f75-414e-a245-eee43e1f898f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":55.91,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"44ff6fcc-0abd-411c-b878-365c7b2bad75","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":71.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"53739687-513f-4da5-9e3e-6f0df1e40919","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":109.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"7c7a796d-87e6-4c7d-8dc4-64ecc4086840","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":432.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":443.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":444.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":531.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":549.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":551,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":769.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":772.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":841.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":843.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":923.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.29,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"595cc662-a7e2-4573-ab85-d8ea85b6992e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:22","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":12,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:25","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.65,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f1a65860-d5e1-4d4b-95ad-28b32fd2507c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:25","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":86,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.7,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"83a9d783-b29f-45ed-9b90-a64d439a86d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:29","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"430689da-1baf-4818-b905-8f2d3eb7e879","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:34","userId":null}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":22,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3de64287-511e-48dd-928f-b4864ba517c6","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:45","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":31,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-17 23:13:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"02e9ee09-b81b-47f8-abce-9799be61b1d6","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:47","userId":null}
{"durationMs":678.64,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"69a55d8d-99ae-418a-86c1-76f40799ba16","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:47","userId":null}
{"durationMs":48.86,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"fb4b21c8-7603-40fa-a92c-a04d073776ee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:48","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":78.33,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/reports/dashboard","requestId":"37dc22e0-2696-4226-8d1e-eb308361a5cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:50","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":58.14,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"bc3b79da-8b95-4d5e-bc02-9a6b897468b8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":58.25,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"a6a062ae-d803-43a6-be99-d8d89333b929","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":33.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"0e0b9ba6-2d71-4d71-b123-cb4775e3eb8a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:51","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":47.03,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"d98d297b-781f-4b92-8e77-7a73a436d423","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":3423.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":757.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.66,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"04aebe1e-1261-4594-abd3-549c626d5655","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":53.56,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/stats","requestId":"e5ce709a-f493-4300-ad57-55041818bedc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:52","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":58.69,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/revenue-trend","requestId":"6a2fb53a-e652-4aeb-91c8-c4224522ef0e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":55.45,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/attendance-trend","requestId":"413f3946-e26c-4393-ba14-c3912e96127a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":61.56,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/grade-distribution","requestId":"a24368d4-523e-4e7d-898c-9b3fdde6e144","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":36.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ffa15ed6-a007-448b-b744-c34c38bbfcfe","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:53","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":43.25,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/dashboard/recent-activities","requestId":"2cc85a9b-bf29-4f0c-a66f-4df9b11c7da0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.5,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"0907fa7e-9be7-4278-a75d-b27cce368f4a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":36.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"160026ef-d48e-45eb-8a8a-4cd5f7293588","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":50.4,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/mpesa-config","requestId":"6dc5c841-8696-45a5-96f6-5eaf9f0f46d6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":30.8,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/sms/settings","requestId":"4e4b8f5f-a1ed-47c8-beb8-04aa9117cae4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:54","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":42.35,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communications/whatsapp/status","requestId":"682f2e5a-8ab1-4ffd-8dbc-7225e529a1ef","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-17 23:13:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/login","navId":null,"to":"/dashboard"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":10,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/reports/dashboard"},"durationMs":2281.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":2560,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":2944.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":3271.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":3629.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.24,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0e6ce9d9-0eb5-4390-9bde-e12bb4339891","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/stats"},"durationMs":4002.3,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/revenue-trend"},"durationMs":4317.5,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/attendance-trend"},"durationMs":4585.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/grade-distribution"},"durationMs":4974.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":5174.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/dashboard/recent-activities"},"durationMs":5471.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":5555.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":5899,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/school/mpesa-config"},"durationMs":6150.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/sms/settings"},"durationMs":6275.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communications/whatsapp/status"},"durationMs":6515.2,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.55,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d3256188-3349-4e41-ac3b-b3d91f33f8ac","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:55","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":87,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:57","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.11,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"470ff41b-95b4-4bb9-addf-96afbc84fe81","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:57","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":65.89,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardians?page=1&limit=10&includeStudents=true","requestId":"14c97441-e90d-417a-92f4-c026873eab7a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:58","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/guardians","navId":"1786997635314-332394","text":"Guardians"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","href":"/dashboard/guardians","navId":"1786997635314-332394","text":"Guardians","to":"/dashboard/guardians"},"durationMs":495,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/guardians","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard","navId":"1786997635314-332394","to":"/dashboard/guardians"},"durationMs":551,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/guardians","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:13:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"636d7a7a-93ec-4139-a659-d7284b9d8be2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:13:59","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:14:00"}
{"data":{"method":"GET","status":200,"url":"/guardians"},"durationMs":413.9,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.39,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0ee7cd5e-d366-4cde-9355-c6fde5499abb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:01","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":88,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/guardians","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b217e59-a649-4569-b2b7-4114ef95c81e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:04","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/finance/payments","navId":"1786997646178-330009","text":"Payments & Deposits"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/guardians","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":102.58,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3217fe9d-0db8-4a32-b63a-fc6fb03a441f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:10","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":47.87,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/classes","requestId":"b6b61e75-e95c-43ee-9b3e-68cb36299dd2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:10","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":15.94,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/banking/banks","requestId":"d6cddf18-0281-43d8-8430-a74caec54b06","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:11","userId":null}
{"data":{"from":"/dashboard/guardians","href":"/dashboard/finance/payments","navId":"1786997646178-330009","text":"Payments & Deposits","to":"/dashboard/finance/payments"},"durationMs":1104,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/guardians","navId":"1786997646178-330009","to":"/dashboard/finance/payments"},"durationMs":1104,"event":"NAV_STALL","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation stall before route change","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/guardians","navId":"1786997646178-330009","to":"/dashboard/finance/payments"},"durationMs":1151,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.13,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b1ba10de-76cb-4766-8158-6306b3b5bd59","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:11","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":1686.48,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/fees/invoices?studentId=","requestId":"7373d9c8-9efd-4393-888d-f6f6752fe477","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:12","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/academics/classes"},"durationMs":1046.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/banking/banks"},"durationMs":1860.4,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":39.71,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3f03c9d0-bfc9-430b-8169-bfa5b5c70d16","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:13","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":70.33,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/finance/payments?bankVerificationStatus=PENDING_VERIFICATION,UNVERIFIED&limit=100&sortBy=createdAt&sortOrder=asc","requestId":"bef30ad8-2ceb-4392-af2c-0af44d10ce37","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:13","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Unverified Deposits","name":null,"type":null},"durationMs":78,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/fees/invoices"},"durationMs":3343.7,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/finance/payments"},"durationMs":758,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.06,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"912112fd-3664-47f4-ac02-b315d0eb9d6c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:14","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Payment Settings","name":null,"type":null},"durationMs":26,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":24.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"1d999954-e15b-4696-8076-dd7e24e26808","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:15","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":62,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.79,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"29553281-3327-49d3-a6b6-38a24d0beae8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:17","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":55.05,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/staff-log?page=1&limit=20&date=2026-08-17","requestId":"a099bcf1-8de4-448f-b4bd-1dc2c1c2bb3b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":52.88,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/clocking/daily-stats?date=2026-08-17","requestId":"61420268-d473-4617-9d9c-2b8b2e7a4b3e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:20","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"href":"/dashboard/clocking","navId":"1786997656838-903050","text":"Clocking"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Navigation click","path":"/dashboard/finance/payments","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","href":"/dashboard/clocking","navId":"1786997656838-903050","text":"Clocking","to":"/dashboard/clocking"},"durationMs":439,"event":"NAV_PATH_CHANGE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route path change","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"from":"/dashboard/finance/payments","navId":"1786997656838-903050","to":"/dashboard/clocking"},"durationMs":505,"event":"NAV_RENDER","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Route rendered","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"329d4399-506b-40c1-a8b7-8b5275286e2c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/clocking/staff-log"},"durationMs":691.6,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/clocking/daily-stats"},"durationMs":1002.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":18.94,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"18e5a6bb-97fb-44d7-b69f-09f8ab857638","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:21","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"QR Code Scanner","name":null,"type":null},"durationMs":27,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":26.04,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0ea64b34-1c14-4e65-a28d-8685f8afc992","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:23","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Start Scanner","name":null,"type":null},"durationMs":13,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":16.83,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b81a8a5-c573-491a-8bb9-d98dbf447bdc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:24","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Biometric & Camera","name":null,"type":null},"durationMs":21,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":19.43,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0ea9a5a6-1377-4fd4-80ec-3e88d6c1c595","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:31","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Facial Recognition","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Facial Recognition","name":null,"type":null},"durationMs":4,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.22,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5aec5809-c57e-4d8a-927a-103a5ef691e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:33","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Facial Recognition","name":null,"type":null},"durationMs":15,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Fingerprint Scan","name":null,"type":null},"durationMs":18,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:35","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":20.25,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5f4e6280-51a2-40ae-ae7b-42c93393f905","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"id":null,"label":"Simulate Scan","name":null,"type":null},"durationMs":13,"event":"UI_CLICK","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT Action click","path":"/dashboard/clocking","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":17.09,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c70daa16-9d28-472b-9453-0b0db6b9305b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"error","message":"Error: Already clocked out for today\n    at Object.processFingerprint (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.service.js:762:17)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async processFingerprint (/home/aereuxky/cbcsms-backend/src/modules/clocking/clocking.controller.js:124:20)","service":"cbc-sms","timestamp":"2026-08-17 23:14:39"}
{"durationMs":1552.97,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/clocking/fingerprint","requestId":"d6ba8b43-0ed6-4460-8e76-be05c53af46b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":400,"timestamp":"2026-08-17 23:14:39","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"POST","status":400,"url":"/clocking/fingerprint"},"durationMs":2414.1,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-17 23:14:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":21.17,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ccdfb884-ade9-486d-a4a1-fc09f6a556d2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-17 23:14:40","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:15:00","totalConnections":1}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a348c8de-2664-4064-91bb-5ac730969b51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:20:00","totalConnections":1}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"539c9224-e64c-479b-a2ba-49c693b6923b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:23:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:25:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b8dd0125-6c47-4dc2-be79-57943bc08c18","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-17 23:30:00"}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7f4d78b4-24e8-46b4-a99a-11edbb937a4a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:35:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"439b8fc1-5dc6-40d9-9fbe-f00d7f9351b7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:40:00","totalConnections":1}
{"durationMs":2.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fd585b9f-e4dd-408a-a231-decfc823a577","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:45:00","totalConnections":1}
{"durationMs":2.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0d8235ec-4597-4caa-bec6-ffbaaddf71aa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:50:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7dd3a0a9-1230-4909-a19c-ec5fd6651ebe","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-17 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-17 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-17 23:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-17 23:55:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f705c40f-9b87-4448-9e8b-8c25b27f4775","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-17 23:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-17 23:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-17 23:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-17 23:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-17 23:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-17 23:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-17 23:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:00:00","totalConnections":1}
{"durationMs":3.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"44ed94bc-d36f-484b-bd51-287bfd98e2d4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:05:00","totalConnections":1}
{"durationMs":2.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bed2a325-e2e8-4456-82df-96f777cc523e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:10:00","totalConnections":1}
{"durationMs":5.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23bd48f6-9f0b-4d51-8a37-b977e10cb40f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:15:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b7c9eaaf-34af-4b3e-becf-65436bfc8398","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:20:00","totalConnections":1}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3757a3e7-9fcc-46f3-a0a9-03ac23665a2c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:25:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f3178310-37c7-4cbd-9f56-963a388d8577","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:29:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:30:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b8bd2745-8b1e-4ad5-b9fb-58a3ae13ef3f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:35:00","totalConnections":1}
{"durationMs":2.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"17df7436-6354-4279-ac4e-8f3219927541","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:40:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1de0a545-56ad-4091-b704-1c7cb292f14c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:45:00","totalConnections":1}
{"durationMs":2.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83a0a8f8-0d62-4764-a945-c8f2e321d4de","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:50:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"79003ff6-6310-41a3-bd80-4739b0381ea7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 00:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 00:55:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a81f3382-3f01-454c-a29f-61e184c7c475","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 00:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 00:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 00:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 00:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 00:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 00:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 00:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 01:00:00"}
{"durationMs":2.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c184434f-82d4-4380-af38-d32361caacc1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:05:00","totalConnections":1}
{"durationMs":5.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"40b19c6a-d85a-4e18-9653-681f85496701","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:10:00","totalConnections":1}
{"durationMs":3.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1bddfd86-ec53-4a06-abf0-e36ab2703f5d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:15:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad6d6d42-5962-4b19-8d0b-e2e97cd19b1c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:20:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a78e81d2-0084-4976-bfab-d3b635155d9f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:25:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6e014287-b7aa-4b3d-9bbb-f2eea2f1b9a7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:30:00","totalConnections":1}
{"durationMs":3.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"64c5e1a8-5239-442d-bb90-1de78ac5af75","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:35:00","totalConnections":1}
{"durationMs":2.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4935f420-4cba-4c58-bbdb-bc28f48fa897","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:40:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"176731a7-6478-4d81-8aef-0390f523f1f5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:45:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"daac3f27-ab7a-4f6e-9e9f-a39631393ba3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:50:00","totalConnections":1}
{"durationMs":2.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e619af12-8e5c-470e-9cbc-cd44c3463376","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 01:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 01:55:00","totalConnections":1}
{"durationMs":3.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9739ea22-5714-448b-b154-415a5abcc85f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 01:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 01:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 01:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 01:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 01:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 01:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 01:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 02:00:00"}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c2e31af6-617b-4b67-8732-5cf1cf200b3d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:05:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bbb90bae-6840-4f68-b696-9c30fccd20c5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:09:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:10:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"eb05546c-9d5b-4c81-afe3-fa1d4eda14b5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:15:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37ba6ee0-1cd9-485f-be44-45cecb5b328b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:20:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6943c85d-fefe-44b7-846d-d0d25f6975b2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:25:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c712762a-619a-499a-8116-da2a2abb2033","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 02:30:00"}
{"durationMs":2.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"df6ddf76-6ae6-4032-98e1-6e7541340b14","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:32:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:35:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6e72c289-d661-4f90-a298-384ce17f74ce","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:40:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5015e165-7d21-48ef-9af4-f062b76f25e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:45:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"589ff131-ac49-4d18-89fd-c76c9faad76b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:50:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9b15a18d-09c6-46ba-8c9b-c806db125011","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 02:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 02:55:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7b4f87f7-1119-4c05-96c0-27b69497b942","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 02:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 02:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 02:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 02:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 02:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 02:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 02:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 03:00:00"}
{"durationMs":2.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a89815b2-89d1-4d62-b8da-9cc8732c5afc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:05:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ecb4e81-0173-44b7-8caf-82cc091b21d6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:08:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:10:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d7a2f557-8ad2-4b00-8657-b65564fca48a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:15:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"351ee892-718c-4ec0-9c1b-3e728e0e28e1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:20:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ecc51311-1f12-4ed6-a40a-5b7ddc24e180","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:25:00","totalConnections":1}
{"durationMs":2.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a0e099f5-4e8d-480c-9b75-092663ed544d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 03:30:00"}
{"durationMs":2.22,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4bfdfedf-839d-44e0-93cc-d6f29eb7a944","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:35:00","totalConnections":1}
{"durationMs":2.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad4d176e-8398-4cdd-aa90-5df22eaa43ed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:40:00","totalConnections":1}
{"durationMs":2.4,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"80cc2a3a-3b96-4b82-a4f1-99ba94649989","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:45:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:45:01","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"97e057bf-45f1-411b-a7ea-fbcf0e0d0329","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:50:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"319b8631-1f9e-4f2e-a8c5-42945fdc0cc8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 03:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 03:55:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d55dd35e-9a9b-4a7a-a07a-d3024d838292","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 03:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 03:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 03:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 03:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 03:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 03:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 03:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 04:00:00"}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b1836917-a3bd-4fe8-8198-c31f0b704dd9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:03:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:05:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"363d0311-ddd2-444d-8dd2-ea43b775d586","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:10:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0b0b7220-c1aa-4a21-ab7c-d69f2744b556","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:15:00","totalConnections":1}
{"durationMs":2.32,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6e6a9772-3507-4e08-b671-adc715f9fc20","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:20:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:20:01","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6ceeacd4-3b9c-48b9-903b-e664f49ab51b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:25:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"069a05fb-a720-4b93-bb59-2b0ad0e5f35e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 04:30:00"}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1359a952-38b2-423a-96e2-63fae5d9b452","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:35:00","totalConnections":1}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:35:00"}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7756d73c-4536-4320-8fc5-30a9aa430000","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:40:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9552c50a-2c1a-4bd2-aea6-678c85a790fc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:45:00","totalConnections":1}
{"durationMs":1.63,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad1220df-8118-459d-887c-d281281796dc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:50:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"638b2d10-6cab-4474-bd5f-3afef4d4f8a4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 04:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 04:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 04:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 04:55:00","totalConnections":1}
{"durationMs":2.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2bd33257-9ed4-470a-9b6d-e45159226804","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 04:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 04:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 04:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 04:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 04:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 04:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 04:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 05:00:00"}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"99494eed-16ae-43bd-80fb-c8df536e41e5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:05:00","totalConnections":1}
{"durationMs":2.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5f04d313-693c-48f3-bd3f-4e5784998739","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:10:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"00502022-7e8e-425e-b1dc-df9f7fee0fb2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:15:00","totalConnections":1}
{"durationMs":1.58,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e3bd893b-be73-48fe-87ee-446a406c6ab3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:20:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4491ae2f-e3af-4bb0-b4f5-09c518dcda0d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:25:00","totalConnections":1}
{"durationMs":2.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cd6a3f3d-6269-4ba6-bdac-6e35c9060d40","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 05:30:00"}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a3930d11-10b1-42e7-b51c-9a709c715b2f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:35:00","totalConnections":1}
{"durationMs":2.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a106fb61-123f-4546-b1ca-5563e194adff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:40:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c9592b90-65f0-4c02-9c13-905f4428077f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:45:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0e48c2f1-178f-4c4c-b9fb-cf7d26d17aa4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:50:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0947f491-8c18-4407-9bbc-895ad8d99d03","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 05:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 05:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 05:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 05:55:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7134df4e-81af-4872-8d94-47613cc8e3f5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 05:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 05:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 05:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 05:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 05:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 05:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 05:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 06:00:00"}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7fa7609f-e030-4f64-a685-4d8ed1b7c237","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:05:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff56c1f9-d641-4c98-b643-9f9219a59ce7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:10:00","totalConnections":1}
{"durationMs":1.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c76a2ad2-10f4-4957-a733-1d469638ddc0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:13:21"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:15:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5a60cd4b-3c43-4874-890e-3af688ade75b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:20:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4ac5b588-d789-4171-af95-ee6cf260eff9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:25:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"49e92c6c-a87f-47c7-9873-24207a5f942e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 06:30:00"}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8485ee07-d2a9-4499-8b79-52b50beb8a2e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:35:00","totalConnections":1}
{"durationMs":2.05,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b30bc9ad-c03f-4573-af98-27f55678781c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:40:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e4f23931-0f48-46eb-81e0-3fb9e458e79d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:45:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5bf72dc7-8e43-4b48-a9fa-4928a414587c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:50:00","totalConnections":1}
{"durationMs":2.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"20383ea4-b120-4f01-9ec5-f4d9a0a44f15","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 06:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 06:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 06:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 06:55:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f6d107f3-6a78-460c-8094-f912ce903a2e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 06:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:58:00"}
{"durationMs":5.2,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"05ecca4d-9460-4eaf-a6e4-077f339625a8","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 06:58:34","userId":null}
{"durationMs":1.67,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"d2be1f99-a087-4e3b-ba90-d2dc34595e1d","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 06:58:34","userId":null}
{"durationMs":68.61,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"e38f535f-f862-4e5f-a5a1-66c5b1f4e68a","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 06:58:34","userId":null}
{"durationMs":58.63,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"2b0e4568-1e25-496c-a730-de423c1916d7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 06:58:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":49.99,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"befd5a56-f0f6-4b07-8c2b-9249338174b5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 06:58:35","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1943.2,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 06:58:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/unread-count"},"durationMs":1941.6,"event":"API_ERROR","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 06:58:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":434.8,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 06:58:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":465.1,"event":"API_RESPONSE","ip":"102.0.11.44","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 06:58:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"durationMs":23.02,"ip":"102.0.11.44","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7679fc37-b21c-4696-8fed-045af4214764","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 06:58:36","userId":"cmp8gtfff00cc8bcnm7wkpzqv"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 06:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 06:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 06:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 06:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 06:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 06:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 07:00:00"}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6453da79-8513-4a95-bef8-9d5d18912f9f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:05:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1ff3b772-3926-4bd1-9fcc-ffe07771c27f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:10:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9ba6053d-8f80-4a9f-b779-12035960c3f0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:15:00","totalConnections":1}
{"durationMs":3.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b642ec24-e29c-4027-b622-7b3bc7316ca5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:20:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7424d842-04d6-435c-b201-b6db761cf85b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:25:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d269d6fe-eccd-42cb-b846-332d8f64a7bd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 07:30:00"}
{"durationMs":2.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b6057d00-6530-4690-a76c-d0bbb6abde21","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:35:00","totalConnections":1}
{"durationMs":3.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"20f0a020-0189-43af-9604-83316dbae6be","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:40:00","totalConnections":1}
{"durationMs":1.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"639faa03-6979-41b3-ac4f-ed3158367f43","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:45:00","totalConnections":1}
{"durationMs":2.16,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3c06d68c-eda2-4650-a4a5-b2f3d718e8cd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:50:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c75c8791-e692-4c9d-b450-84817f3b2469","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:54:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:55:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 07:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 07:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 07:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 07:55:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e375599-2249-4bab-9879-6c1960f33d1c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 07:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 07:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 07:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 07:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 07:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 07:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 07:59:20"}
{"level":"info","message":"[CRON] Library overdue check started","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"error","message":"[CRON] Library overdue check failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/library-overdue.job.js:14:56)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 08:00:00"}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b84f185f-108c-4fc2-b69e-0deb2ed29e48","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:05:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"870d297d-b29d-4fde-a22b-70357c7fdb27","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:10:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"666f570a-16cd-4f10-894e-74773300cb72","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:11:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:13:20"}
{"data":{"from":"/dashboard/clocking","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 08:13:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/dashboard/clocking","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 08:13:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ff6843d1-42c1-4c3c-b685-ca8477ac8721","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 08:13:44","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:15:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b5bbe492-c6e4-497f-8f73-f4b5a31b2b8c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:20:00","totalConnections":1}
{"durationMs":1.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9d4c03d-5d66-4aeb-9058-b983e270fd61","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:25:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"afdf92ea-3131-43b9-bff1-1b37d3bb0358","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 08:30:00"}
{"durationMs":1.79,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"779a8fcf-6bc0-4795-99a5-52aeced2d9fa","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:35:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d08c4a48-3cf2-438e-bbb1-da2d7066c035","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:40:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"44e08c1e-e46b-4927-af3b-ff25d172eea5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:45:00","totalConnections":1}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f4ca5af9-b617-4ca3-bd3b-1db03f86f55e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:50:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a2c3ec71-663a-40a0-bbd8-58ea2d51a0c4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 08:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 08:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 08:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 08:55:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"95e16fc7-3c0d-40a4-9c10-2dd5a46accf0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 08:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 08:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 08:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 08:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 08:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 08:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 08:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 09:00:00"}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c12625f0-2dc3-4510-82d4-ab9c4e2d7f00","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:03:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:05:00","totalConnections":1}
{"durationMs":2.17,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2ef931c3-a3a3-4166-a225-22061032c77a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:10:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"74b575dd-d966-4d1a-b7b7-9edb2eb77e1d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:15:00","totalConnections":1}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff3eba58-8b45-4175-a988-469b0c16006b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:15:02","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":22,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 09:15:05","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":null}
{"durationMs":3.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3a042e04-eee7-46cb-8765-99edb7125da3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:05","userId":null}
{"durationMs":728.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"90da913b-72b6-4e2a-ab4b-9dde91c66b2b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:06","userId":null}
{"durationMs":18.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"0e6af1a8-0a50-4475-8bf2-da272264d346","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":36.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"8df90401-975f-4fc8-a2a3-5da36b9faad2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":50.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"2f3a80d0-3d1f-4c3f-a00d-f7736473916b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":65.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"2b8e34b1-5640-442f-b29d-7a05b0a0476d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"962da3d5-69dd-4323-bd93-e31b868849cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":2047,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":426.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:07","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"90d0c6c1-30ac-4657-88ff-ecd6a023d249","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"5e2e23a5-5628-473e-9f70-7e080fd9f3c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":113.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"48ce0352-2291-40a3-8d71-82bc91ad6673","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":444.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":463,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":468.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":897.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/guardian"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","navId":null,"to":"/guardian"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:08","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"42bea546-5c62-4c92-8738-05c45c4f8e58","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":17.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"c40539de-ad5b-4d8c-b5ef-c864fbd78b47","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3d2fd6fa-5fad-4cb9-93d7-a0361a7530b6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"31e3dda1-c753-45b5-956a-54402552efdc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":63.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"8156bebf-b11e-4a1b-b23d-d88b1a613522","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":54.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"6fbe1aa4-cb41-48e4-a053-e09814fc99f3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":452,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":547.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":530.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":533.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":533.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":534.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":539.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:09","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f834ae09-d02a-4376-9efe-c0171ae892d9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:15:20"}
{"durationMs":46.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children","requestId":"60abe939-1024-4086-a8e0-474daa544b5f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:23","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/students","navId":"1787033721036-487564","text":"My Children"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/students","navId":"1787033721036-487564","text":"My Children","to":"/guardian/students"},"durationMs":386,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787033721036-487564","to":"/guardian/students"},"durationMs":396,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:23","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3067edc4-c490-48d0-97e2-79694b0022ef","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:23","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children"},"durationMs":435.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"094bcd40-eed8-46f8-bd4a-2efa8dce1f6f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":75.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"37d6de74-6561-4c85-95a0-21a50057a04d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787033725482-711019","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/students","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/students","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787033725482-711019","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":431,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/students","navId":"1787033725482-711019","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":439,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:28","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cb594173-d6ef-48b9-80ce-4b21f8f04d49","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"b8b54358-86d7-464e-846d-8e5635bfaf48","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":468,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":451.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:29","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.29,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9b448c23-5580-453b-b431-6f1e09b5387d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":223.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"17e289df-46b8-47ac-ae72-ceb31ef782ae","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:15:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":232.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"d1d3a575-84bf-4497-9abb-cdd3595ef1b1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:15:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":279.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"de8d410b-782f-4217-9045-ccd1385de252","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:15:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"View Full Invoice","name":null,"type":null},"durationMs":2,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":null,"navId":null,"text":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"23b74aed-ab36-4498-b630-84623c4b251f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":661.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":662.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":706.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:15:32","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3e72e61e-fd0e-4721-9c8b-0928cbb38261","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:15:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:16:00"}
{"durationMs":34.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"02d142a4-4279-49c7-88df-19ed97a46d01","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":107.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"c8a3b404-45f7-49af-9566-4ada38684924","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"05ae7252-b497-4766-8add-bfd4c4d80dd1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":25.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"bc28763a-7c4c-4680-a0ab-975dfdb8f63c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"f961f1bf-7c01-4b08-81b7-34cb440ce721","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":63.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"7bf5dc4c-25d5-42f2-876a-e2a094516e5d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":52.28,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"be360e05-5018-40cd-acf3-83ac2dc3b843","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":455.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":502.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":768.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":770,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":773.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":805.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:47","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8afbeb70-4fcb-458b-8420-900299674798","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:16:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":448.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:16:48","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"40723e9b-2b08-4f4a-b7fe-28e7a8340466","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:16:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:20:00","totalConnections":1}
{"durationMs":3.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a5c45a25-105d-4267-aaba-6d87fb77fb6c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:25:00","totalConnections":1}
{"durationMs":24.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b7045732-d5a8-4874-8ec6-54b9cad9a05d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:29:20"}
{"level":"info","message":"[CRON] Attendance alert started","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"error","message":"[CRON] Attendance alert failed: Cannot read properties of undefined (reading 'findMany')","service":"cbc-sms","stack":"TypeError: Cannot read properties of undefined (reading 'findMany')\n    at cron.schedule.timezone [as _execution] (/home/aereuxky/cbcsms-backend/src/jobs/attendance-alert.job.js:19:53)\n    at Task.execute (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/task.js:17:25)\n    at ScheduledTask.now (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:38:33)\n    at Scheduler.<anonymous> (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduled-task.js:25:18)\n    at Scheduler.emit (node:events:524:28)\n    at Timeout.matchTime [as _onTimeout] (/home/aereuxky/cbcsms-backend/node_modules/node-cron/src/scheduler.js:30:26)\n    at listOnTimeout (node:internal/timers:581:17)\n    at process.processTimers (node:internal/timers:519:7)","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 09:30:00"}
{"durationMs":1.73,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a4739773-3bff-40f3-ab2a-593653996cc3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:35:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"07898f71-cc87-4b62-9fd5-577b3d37d8ef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:37:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:40:00","totalConnections":1}
{"durationMs":2.12,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3b4e395e-b1bb-4921-9d3b-321d6258fb34","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:45:00","totalConnections":1}
{"durationMs":1.93,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2410f90d-4eda-4c10-9da8-ce73397124ac","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:50:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad123b36-b6c3-46ad-8c98-10184cd3d659","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:50:02","userId":null}
{"durationMs":3.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"f7ca1ee3-7200-4156-9aab-95ce275ae31d","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 09:50:38","userId":null}
{"durationMs":1.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"f14627e4-08b8-4c3d-bd7c-a0a09112c854","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 09:50:38","userId":null}
{"durationMs":33.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"9d388732-c129-4e94-90f7-17be10724912","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:39","userId":null}
{"durationMs":64.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"1c8eda59-881d-4e55-84d9-ca14e95b35de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":267.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"a601edd7-b409-4806-be8c-8c593c4621bc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/guardian/dashboard"},"durationMs":458.7,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/guardian/school-info"},"durationMs":495.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:40","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8f67c1cb-d8eb-41cd-b7ce-1702db0595ba","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:40","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":590.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":799.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:41","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aadd6c30-a7fe-4c65-88c1-550b676e8131","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"a2dc9a74-244d-4a9f-af71-87ca163299af","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":48.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"82bf9368-c72c-42a8-afb9-f71d9279988d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"753b5142-cc74-4a19-a95b-7d755ecf15e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"c2337493-c812-4700-b0dc-ee4ffdb77c05","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"25b7f03b-9ed5-4cdf-a4c1-87e96cdb2a3a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":65.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"4623e518-ac9c-433d-833f-201f527278c6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"cf583e42-64ff-4a4a-83cc-e65d3c363270","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":2697.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":2700.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":2716.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":2718.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":2725.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":3186.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:45","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7acccb6b-b10d-4bdd-ad71-6e27662d2fb7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:45","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":526.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 09:50:46","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"98729f53-d11b-41b8-b712-d131bb901476","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 09:50:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 09:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 09:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 09:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 09:55:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5ba4ca21-1030-4b51-a6ca-d9f560ca58ad","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 09:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 09:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 09:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 09:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 09:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 09:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 09:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 10:00:00"}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"efec92ab-23b3-4d89-a64d-826ab94a9c83","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:05:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2831aa25-bb8a-4a5f-b47d-63d9a82c356b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:10:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"78c69767-ad91-492c-99ef-5ea829fabe75","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:15:00","totalConnections":1}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0092bc41-a9d7-4c75-8ebb-f21d85c16739","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:20:00","totalConnections":1}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3760fa64-ba29-447f-a038-b665c81f9706","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:25:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"68139b23-099d-464a-ae01-a393c891c612","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 10:30:00"}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bc55f2d8-e195-48c2-ad55-76b927882c3b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:35:00","totalConnections":1}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"28314f48-a6da-4113-9c77-7deecdc3120c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:40:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e40f06d2-f4a1-4a91-984b-e6b7a3be7ed8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:45:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"caee7423-744d-40cf-a1e2-c839ca3064ef","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:50:00","totalConnections":1}
{"durationMs":3.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9915789d-11be-47dd-ae4b-164d530f3653","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:52:00"}
{"durationMs":4.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"472bc8ab-f269-48f9-a967-0a04caea3f31","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 10:52:23","userId":null}
{"durationMs":3.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"706aacad-349e-4458-a5e3-51eb6dcdd766","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 10:52:23","userId":null}
{"durationMs":29.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"80bac68e-d7a0-4c29-8fef-2dddaf0bb190","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 10:52:23","userId":null}
{"durationMs":36.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"50a6c4a0-868c-41a1-8930-43c76a957392","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 10:52:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1350.5,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/unread-count"},"durationMs":1416.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:24","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"396e6c38-dd66-49c9-a625-4911746b74e2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 10:52:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":17.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3e9bd9e5-96d4-40da-954e-3ca3f1014800","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 10:52:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":457.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1072.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:25","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7156d90a-7566-4ce7-9c3c-df350660c0e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 10:52:25","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Print Invoice","name":null,"type":null},"durationMs":4096,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:31","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d0e11ce1-e65a-4cab-b15d-95813e898f1d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 10:52:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Open in New Tab","name":null,"type":null},"durationMs":41,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 10:52:37","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.82,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b806179a-d9d7-4770-b50d-dec38df98c26","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 10:52:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 10:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 10:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 10:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 10:55:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"84038645-1bc2-4437-80bf-a733dc6dadaf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 10:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 10:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 10:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 10:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 10:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 10:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 10:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:00:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c67fb6d-2042-4e4b-96ac-02f8de44b786","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:05:00","totalConnections":1}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f993a98f-a271-4e6d-af0e-e611a9020958","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:10:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"061349f5-ae00-40bc-9fe9-49f6bcfad67e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:15:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a1ad8ed4-65b8-4c8a-8b4e-f20f0df8d3c9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:19:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:20:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d9e6ecb-0ce4-4987-92c6-dc1d75d523a6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:25:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ef338af3-3aa6-4a00-a8da-4bff8bf9c1c2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 11:30:00"}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"06de40c2-667f-449d-ae6c-02b3a09b1719","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:35:00","totalConnections":1}
{"durationMs":2.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bab7a800-4e84-42ed-bca6-1605f4b80d4e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:37:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:39:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:40:00","totalConnections":1}
{"durationMs":2.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4cf994f7-03e9-497b-af39-de1e38f270f2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:41:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:43:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:45:00","totalConnections":1}
{"durationMs":3.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1619e6a3-0294-40b2-b308-321d340df202","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:45:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:47:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:49:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:50:00","totalConnections":1}
{"durationMs":2.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7a41391f-6f06-4aba-8360-fbed438a78d2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:51:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:53:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 11:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 11:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 11:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 11:55:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a70920fb-a34f-4a69-a58e-b94e83b7af7c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 11:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:55:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:57:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 11:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 11:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 11:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 11:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 11:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 11:59:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:00:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ad996bf4-e671-4179-a08c-1c75319d4a95","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:01:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:03:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:05:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4307873d-ef0f-470f-8040-fed792a37809","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:05:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:07:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:09:20"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:10:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5b3d04df-0383-47dc-9a38-9e49bed6ca05","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:11:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:13:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:15:00","totalConnections":1}
{"durationMs":1.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c35762e8-58fa-4d2d-9c39-d136c414a336","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:15:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:17:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:19:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:20:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"685c3865-9d52-42e6-a62e-8e178e67ab89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:21:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:23:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:25:00","totalConnections":1}
{"durationMs":2.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01ed138c-d0cf-4613-b0cd-963e22429637","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:25:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:27:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:29:20"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:30:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7cf8ce0d-739b-4bd0-bd19-edc5dd5a349f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:31:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:33:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:35:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d0a04741-05da-4130-a6e0-9f6023cf1a8d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:35:20"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:37:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":20,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:37:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6de90715-8799-4344-aeac-91d1b8d37b38","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:11","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 3 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 3 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:37:20"}
{"durationMs":674.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"fbf195d9-3874-4edd-9d2c-34633500711e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:52","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":53,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:37:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"dd12863e-4b99-41a6-90d2-15277228e96b","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:52","userId":null}
{"durationMs":23.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"cca99f5e-5293-4d77-a31e-3b52fb433078","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":81.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"ce4fc365-0c36-46b5-adcc-aea69317003c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":58.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"b38ef33a-0677-4947-a093-523c70d4a2a7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":92.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"61498020-71da-4370-83ed-6084382cba9f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:53","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":64.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"019150a5-7d70-405a-bfe5-a0e63c83f49f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"101133f9-9836-4055-b882-ec94bedd6381","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"59985e14-3e21-4a0d-9e97-ac1681526d98","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":54.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"0d811d1c-416c-423b-a687-09602491a4cb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":99.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"326cb73c-ec07-42ee-9b09-e0626f25d57c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":111.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"e68b506c-223f-449f-9369-b8cefffa4976","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1118.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":444.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/guardian"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","navId":null,"to":"/guardian"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"929611d3-cd17-4e11-bcd1-7b4ece05cdbf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"f0179934-db82-4fe9-baf5-ff9bf56e126b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:37:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":504.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":512.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":524.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":888.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":520.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":525.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":550.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":575.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":773,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":832.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a7eaf979-320d-40ea-a2e1-fb5acddfd2d6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":17,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:37:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6e48b9cd-589b-4c8b-8372-e667d4b3a2b3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:37:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:38:00"}
{"durationMs":54.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"1f942e22-2e0f-47bb-8f1d-17173bf05dbe","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":25.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"52a4ee19-3e9a-4a87-9680-bc2ea7597247","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"bfa11e6c-7262-4960-b939-fde32cfbb4f0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"eca59bad-97e9-4a65-b242-d3f63e3d7ec4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":20.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"d4b049b1-4f65-473f-afc4-e2f18a7b89e6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":58.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"185e586d-8523-4483-b839-b5bc7c8719b4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":528.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":867.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":460.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":494.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":496.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":507.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"deee355d-c88f-4372-b433-8b8ab49a503b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:01","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":73.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"1f21cb5e-28de-46e2-8936-7d7031575b5b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":16.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"66688872-5c25-4dce-a8a6-605a15fdb8d9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":58.75,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"6b9cf796-0f45-4762-9a25-5de1d6f11d43","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":47.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"1a38791f-2040-420a-ba4d-baa2c5f94ee8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"4c5d9e6b-531a-4654-bb96-3402b57f6ded","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":43.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"bc4b8a6f-1d24-4bd4-9067-68a2cad8033f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":488.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":656,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":824.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":699.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":1004,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":1128.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7753af8c-b5a8-45bc-988b-302567d21735","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":76.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"56192d67-0133-4c13-8399-8e98ffb6e8b7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Pay Fees","name":null,"type":null},"durationMs":5,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":null,"navId":null,"text":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:18","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce9bd992-99ee-4895-bcbc-ad247cc8aa53","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":39.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"1374226c-18ba-4da2-ad6d-3b76f69e0021","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:18","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":501.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":469.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9fd32899-34f8-4e44-9df3-fe79fc6473c3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Pay KES 21,481.00","name":null,"type":null},"durationMs":80,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"517d913d-f797-415f-9576-ccd3542bb513","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:21","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"amount":1,"feeItemIds":"none","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","invoiceBalance":21481,"invoiceId":"35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","level":"info","message":"[Guardian Payment] Initiating M-Pesa payment","service":"cbc-sms","studentId":"cmp8gtpz200fy8bcnxg8120p8","timestamp":"2026-08-18 12:38:31"}
{"bankAccount":"***6152","bankName":"KCB Bank","bankPaybill":"522522","level":"info","message":"[Guardian Payment] Bank C2B direct settlement configured","service":"cbc-sms","timestamp":"2026-08-18 12:38:31"}
{"data":{"id":null,"label":"Pay KES 1 via M-Pesa STK","name":null,"type":null},"durationMs":23,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.83,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b8f23d3b-b99c-4e8e-b827-fcee7f8dcfd7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"checkoutRequestId":"ws_CO_18082026123830200706576238","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","level":"info","message":"[Guardian Payment] STK Push initiated successfully","requestId":"2758849c-b988-4a44-a336-3ee6fc22d2f2","service":"cbc-sms","timestamp":"2026-08-18 12:38:33"}
{"durationMs":1891.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa","requestId":"a41851f0-1fba-4190-b28a-e364e68ed946","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa"},"durationMs":2365.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6806825a-f802-479e-84ba-a5efbbb5c96c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":37.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238","requestId":"fc949c49-4ab6-470e-96f6-b0583578e4c5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238"},"durationMs":559.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e619188d-603d-4001-85f6-0d1a533089a9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238","requestId":"9471fa97-7bf5-4dc7-9347-ab5264d5cc2b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238"},"durationMs":589.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f0bc254a-4986-48c0-94e5-127e81dfe995","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":48.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238","requestId":"962444c3-07b6-470c-a93a-f3c7f9670695","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:40","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238"},"durationMs":549.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"51973d82-1be3-4420-9e5a-422f36ffabf7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":32.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238","requestId":"54561d23-4100-4a22-8ddc-ef37e76b0297","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:38:42","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238"},"durationMs":466.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.29,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"36e7bbea-d5d9-4cb0-99d1-ba57aa8c1524","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.18,"ip":"196.201.212.138","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"7d63dec1-8a34-43da-83f4-9cd2ba427ccd","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:44","userId":null}
{"durationMs":92.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238","requestId":"bb4d013f-500a-4bd5-a3e8-b60649d486e3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026123830200706576238"},"durationMs":590.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"67dfd9f5-8f5d-41df-a937-29e5e603832a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:45","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":91.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"119fd2f8-b8e1-427b-b85f-b57afdd8915d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":534.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"da229287-b414-46e6-9b82-1834ac16f8e5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":83,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8d1d92b5-0af9-4cd7-9ef1-569e088e31cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":47,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:38:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a3c3e355-d149-4a77-99c9-69e154fa7628","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:38:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:39:00"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":37,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"79f86c70-de5f-4426-9fae-87abc30bfea2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:01","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":40.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"51d91315-b414-4727-8aca-44f338755fd7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:03","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045940288-51924","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045940288-51924","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":485,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045940288-51924","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":509,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2eea9f77-cc2c-4b20-ac70-da42fe16ad4c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":77.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"11706593-7f86-4e5d-98cf-e6778e660440","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":122.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"278ef48a-79c4-410b-98af-9d63a726b0ad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":252.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"5d860ee5-c4dc-40da-b832-edd445195342","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":112.77,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"1bcb6f0f-0ed4-413b-a446-ac178c954f51","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":461.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian","navId":"1787045941334-272547","text":"Home"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian","navId":"1787045941334-272547","text":"Home","to":"/guardian"},"durationMs":97,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045941334-272547","to":"/guardian"},"durationMs":169,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":874.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":590.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"664e5294-e699-4be5-ada9-9b79127e1916","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:05","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":688,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":691.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4109fa8c-40dd-4e32-9023-dd51a2bceef1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":45.6,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"067fe6cb-5e6e-4b97-9a1e-a625eace6ab8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1787045943577-433935","text":"Alerts"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/notifications","navId":"1787045943577-433935","text":"Alerts","to":"/guardian/notifications"},"durationMs":427,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787045943577-433935","to":"/guardian/notifications"},"durationMs":452,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:07","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7551b233-0494-4e9c-8794-8a396ae84c70","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:07","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":522,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0ffb9a4f-ed03-46f3-a743-ecde3c047213","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:11","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fa3de40c-4704-4ebe-9619-870b37c55538","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:11","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"645a4dc9-4ec5-479f-817a-0b0b1f90a9f7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":36.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"4d099321-c2b8-4445-80e5-9ea08d692cbf","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"35ee2bb1-e06e-4de4-8fa4-0c7ae8b87bb0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"d5f9f682-6142-4e4e-b236-b25901c8f1ae","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045950031-719042","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045950031-719042","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":35,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1787045950031-719042","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":74,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":459.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:13","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ba3df8fa-17d7-4b91-a240-02350e5d32b8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":856,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":434.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":481.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/profile","navId":"1787045951607-620304","text":"Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"aa5a796f-5cd7-49af-921c-aa77a0f7354f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:39:14"}
{"durationMs":24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/profile","requestId":"b521ad00-cd90-45d0-a2f0-ea6f927daf45","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/profile","navId":"1787045951607-620304","text":"Profile","to":"/guardian/profile"},"durationMs":476,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045951607-620304","to":"/guardian/profile"},"durationMs":500,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/profile"},"durationMs":470.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.67,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c031872f-6e84-4518-9cad-6ca2944bab21","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:39:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:39:22"}
{"durationMs":47.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"d9bd9954-4c19-44b7-81a3-aaa2a0b274c4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:23","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1787045960133-623717","text":"Alerts"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","href":"/guardian/notifications","navId":"1787045960133-623717","text":"Alerts","to":"/guardian/notifications"},"durationMs":57,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","navId":"1787045960133-623717","to":"/guardian/notifications"},"durationMs":87,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":592.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:24","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"72ba3c00-f051-4767-9fc2-ea0ad378f3ec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:24","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":32.33,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"8da9cc98-8d0a-4814-84c5-556a8e1aba7c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":47.53,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"1b8dfe5c-c2f1-4b3f-af33-252262e7a5b2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045964307-956373","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045964307-956373","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":40,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1787045964307-956373","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":82,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":571.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:28","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c46fcce1-25bf-44d5-95aa-cf11bc94cf08","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:28","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":960.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:29","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"8d7af877-873a-4e3c-b537-2927750320d2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":39.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"182c089b-0ac0-4bb2-b813-fe4f73ab0739","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":51.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"17a0ccee-5bbe-4aae-9340-cf236dca078a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045966207-15554","text":"Fees"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045966207-15554","text":"Fees","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":35,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045966207-15554","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":90,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":407.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":708.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"41bc5f21-d1ab-4a3e-ac5c-fb799d17a17d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":44.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"324c8652-07a3-42b1-9a9a-7e51a0e67720","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":72.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"42585f0d-083e-48cd-b7b0-a4268fd5b1cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"4c53b3de-7671-4975-8890-0d550b1fe0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian","navId":"1787045967672-295500","text":"Home"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian","navId":"1787045967672-295500","text":"Home","to":"/guardian"},"durationMs":65,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045967672-295500","to":"/guardian"},"durationMs":148,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":524.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":549.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.01,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"187d1091-da02-4439-9a9a-670fd7860b79","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":977.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":5.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2fbb59a8-1645-4fb8-96d8-e1b16da39ce9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":40,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ce7cca2b-fd9c-4c4e-a998-e3af6791fa25","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":37,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.35,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"d3ffa71b-7659-4aba-bbfd-244a923ced67","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":43,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fc5d3667-35e2-4da0-847f-50891ce5d102","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":70,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:40","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2774f91b-79e3-446e-af5b-893cba1a6475","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:40","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":78,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:41","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.57,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b3380ef6-baaf-477e-bf98-15ecb57ac9d2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:41","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.26,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"4b0f00c2-2e9d-4699-bafd-3c48c05f13ae","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":101,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"33db4938-92ca-4010-827e-2be220ba9e6a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":265.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"0a69b657-9144-4c90-915b-ab6e8b9298c5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045980027-580527","text":"Fees"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045980027-580527","text":"Fees","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":46,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787045980027-580527","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":91,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045980507-597073","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":456.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787045980507-597073","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":61,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787045980507-597073","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":104,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c1e37b05-0158-4f49-9de7-ebbdbf07e89b","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":340.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"791fb533-72a6-4c15-97e2-2ff8056dc951","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 12:39:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":537.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":707,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":1331.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 12:39:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3f148170-1dd1-4c67-aa16-cef35526e713","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:39:45","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:40:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7b7ff2a-33fb-4c1e-b0a3-5247448cc936","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:41:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:41:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:43:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:43:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:45:00","totalConnections":1}
{"durationMs":1.99,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2e36c90c-f764-4d5a-bb8b-f97c1b658fed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:45:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:45:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:47:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:47:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:49:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:49:22"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:50:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"87a0ca25-b77a-4a35-a7e1-98a80bee3516","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:51:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:51:22"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":121,"event":"UI_CLICK","ip":"154.159.237.84","level":"info","message":"CLIENT_EVENT Action click","path":"/user-guide","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:51:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.72,"ip":"154.159.237.84","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b01c1935-68a5-4ae2-a1aa-e39246d5db92","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:51:45","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:53:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:53:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 12:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 12:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 12:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 12:55:00","totalConnections":1}
{"durationMs":2.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"017b2c54-55b7-4275-86ac-2bdcdc5b7673","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 12:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:55:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:55:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:57:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:57:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:57:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:58:00"}
{"data":{"id":null,"label":"Settings","name":null,"type":null},"durationMs":33,"event":"UI_CLICK","ip":"154.159.237.243","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:58:26","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.38,"ip":"154.159.237.243","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a08bce5d-ad03-46a7-8c96-f4f2fefffe1e","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:58:26","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 12:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 12:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 12:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 12:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 12:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 12:59:20"}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":44,"event":"UI_CLICK","ip":"154.159.237.243","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:59:22","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":1.4,"ip":"154.159.237.243","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7acf9004-7b09-4e8e-a7ff-1f11962b89d9","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:59:22","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 12:59:22"}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":28,"event":"UI_CLICK","ip":"154.159.237.243","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 12:59:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.23,"ip":"154.159.237.243","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a1e356bc-9b4d-43de-a4c3-cc1e1236eca3","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 12:59:27","userId":null}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 1 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 13:00:00"}
{"durationMs":2.29,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"491c3c77-eb72-4c13-8178-cc7666033cd3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:01:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:01:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:03:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:03:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:05:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a3a898a2-b90d-4367-93bc-1e212b730d51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:05:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:05:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:05:22"}
{"durationMs":4.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"921200b3-3f55-47f9-81f8-978c06d65189","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 13:05:26","userId":null}
{"durationMs":1.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"b695b362-a78e-4687-86d6-841245e8db3b","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 13:05:26","userId":null}
{"durationMs":24.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"7d8c96e4-542d-40e9-99ec-851d666f4cd4","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:26","userId":null}
{"durationMs":47.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"7eb1a5df-c1b6-47ba-b33f-8af65ebce0f7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"02980ddd-7b8f-4806-b1c7-d3ddfe1a1eaa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1653.4,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/unread-count"},"durationMs":2179.3,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3e8d0985-269a-4511-bfd8-769fe40fa731","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":43.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"42878040-978b-4eca-a32b-3f139e6e70c4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":80.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"832a767b-a79e-4a00-92ff-6489a9386773","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"da3d90d0-b617-4fd4-b71c-e996f21fdfc2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"43471baf-8fb1-4cf3-b98d-3bbd95efb8fb","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"3317ba57-fdb9-4c84-b081-4aae92445276","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":52.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"631a87ba-ae52-4fec-90aa-26810bbf3a2f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":49.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"02ee3fee-7589-4687-8056-c92a63bb47c9","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:29","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":480.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":579.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":449.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":457.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":558.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":602.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":628.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:30","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"75b4e436-67e8-4d98-ac9d-9207099def8a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":52,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f13fc510-6cc6-4b1b-8c11-cfbe735af585","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":56.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"bcae4fe9-9570-4254-8472-baa7e0ec6289","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":99.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"28aad284-0ec5-44da-a0ae-ba13c3e322d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":48.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"00a7c4cf-788a-43c6-b197-5187ca0de9fd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian","navId":"1787047529359-940317","text":"Home Dashboard"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian","navId":"1787047529359-940317","text":"Home Dashboard","to":"/guardian"},"durationMs":235,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787047529359-940317","to":"/guardian"},"durationMs":319,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":452.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":501.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":5.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eaf954c8-be5b-4aac-9598-9b847b656600","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":814.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7dcb137d-2793-4946-b1ff-adab0a47818a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":37,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:42","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":5.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b152ebe1-9515-4752-b5a3-581e994e2003","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:42","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":66.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"66b5d205-f4e5-4aa1-b03a-dd1e9dc1f227","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787047539709-747861","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787047539709-747861","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":231,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787047539709-747861","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":276,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":500.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:43","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4ea6e76b-3d78-437c-9200-126a9d04fb20","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"980c7525-a77f-4b3f-b67a-6cede20bc823","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:05:43","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":448.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:44","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c0a0e0a7-c3d0-4bc7-8b1f-7d4d5a45606e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":90,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:05:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.76,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"56aa9076-0835-4185-ab37-dd24f9245c5f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:05:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:07:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:07:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:07:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:07:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:07:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:09:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:09:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:09:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:09:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:09:22"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:10:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea0c610e-d103-41b2-a77a-70ca3d1830b3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:11:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:11:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:11:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:13:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:13:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:13:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:13:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:13:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:14:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:15:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:15:00","totalConnections":1}
{"durationMs":2.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"01a40b38-6bb1-4094-a58a-73af10a1ec15","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:15:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:15:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:15:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:15:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:15:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:17:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:17:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:17:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:17:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:17:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:19:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:19:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:19:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:19:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:19:22"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:20:00","totalConnections":1}
{"durationMs":2.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"556b0a3d-569f-4098-b3cd-77a15e865e6c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:21:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:21:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:21:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:21:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:21:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:23:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:23:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:23:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:23:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:23:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:25:00","totalConnections":1}
{"durationMs":3.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8af5210e-4d51-4764-b3ca-16de91d31fd0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:25:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:25:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:25:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:25:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:25:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:26:00"}
{"durationMs":2.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"7979da16-0375-459f-a98f-efff9f562b2c","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 13:26:18","userId":null}
{"durationMs":3.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"ff57c198-8b0f-48f4-a54e-dea9746d675e","schoolId":null,"service":"cbc-sms","status":401,"timestamp":"2026-08-18 13:26:19","userId":null}
{"durationMs":35.55,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/refresh-token","requestId":"1a1ffb65-572a-478d-85ad-88962096f963","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:26:19","userId":null}
{"durationMs":34.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"2aa7f632-1b9a-4af5-9164-0a3e94903cb4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:26:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"5087480b-57f1-4eed-a996-cc016c5354f4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 13:26:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/unread-count"},"durationMs":1331.6,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:26:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":401,"url":"/communication/notifications/inbox-count"},"durationMs":1785.1,"event":"API_ERROR","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API error","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:26:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fba584e1-3c7c-417f-9da5-9b0d49ccc4b2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:26:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":519.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:26:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":523.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 13:26:21","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a4b95025-4dd4-4944-9b36-2896068146d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 13:26:21","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:27:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:27:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:27:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:27:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:27:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:28:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:29:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:29:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:29:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:29:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:29:22"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:30:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"909e7e5f-f6f5-46bb-9d48-9122ff2bc818","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:31:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:31:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:31:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:31:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:31:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:33:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:33:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:33:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:33:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:33:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:35:00","totalConnections":1}
{"durationMs":2.3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bd54e2bf-65f3-4255-982d-ced530c12db3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:35:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:35:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:35:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:35:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:35:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:37:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:37:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:37:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:37:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:37:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:39:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:39:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:39:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:39:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:39:22"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:40:00","totalConnections":1}
{"durationMs":2.07,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13eac43b-564c-4354-97b8-958fafdc61a8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:41:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:41:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:41:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:41:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:41:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:43:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:43:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:43:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:43:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:43:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:45:00","totalConnections":1}
{"durationMs":2.01,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0c16bff5-d719-4824-9eb4-3b01c3996f5a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:45:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:45:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:45:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:45:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:45:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:47:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:47:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:47:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:47:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:49:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:49:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:49:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:49:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:49:22"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:50:00","totalConnections":1}
{"durationMs":2.44,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37025b98-1efd-49c6-9409-4eac40a33952","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:51:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:51:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:51:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:53:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:53:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:53:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:53:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:53:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 13:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 13:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 13:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 13:55:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"34abe1fe-9fc8-4415-88b4-ecf39d359bb4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 13:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:55:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:55:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:55:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:55:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:55:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:57:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:57:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 13:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 13:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 13:59:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 13:59:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 13:59:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 13:59:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 13:59:22"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 14:00:00"}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c91ba371-d0c8-4cce-865b-d191460194d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:01:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:01:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:01:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:01:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:01:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:03:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:03:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:03:18"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:03:20"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:03:22"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:05:01"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:05:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:05:01","totalConnections":1}
{"durationMs":4.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"91a03d3e-d4e6-4d1a-ac85-1930accf9c33","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:05:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:05:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:10:00","totalConnections":1}
{"durationMs":2.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"edbf6289-2bbf-4891-bff6-32325208e50b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:11:14"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:11:16"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:15:00","totalConnections":1}
{"durationMs":1.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5782c9c2-c63b-4332-9679-4941a37c98f0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:20:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e268d576-7124-4f19-b119-f79ed53f64e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:25:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c87625f3-edf2-47ad-bbe7-19cb5bfaac8e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 14:30:00"}
{"durationMs":3.11,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"83bbf5f4-bd93-4da6-a0f7-64149202ecab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:35:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3bdbaf79-af73-4cad-a7ad-8534adcc28e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:40:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8b24fd75-d552-4ae6-810b-6032a5062391","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:45:00","totalConnections":1}
{"durationMs":4.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3cb90eaa-acd0-494e-b8a2-8e1cb1134511","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:50:00","totalConnections":1}
{"durationMs":3.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8fbd8387-8901-4555-b148-61649c688db9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 14:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 14:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 14:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 14:55:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"efe07696-b326-42de-8b87-cd2f2ced7995","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 14:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 14:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 14:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 14:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 14:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 14:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 14:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 14:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 15:00:00"}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0c4cef56-0d27-41a8-8819-a42e43cd3727","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:05:00","totalConnections":1}
{"durationMs":2.21,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5b43bd32-c079-4877-8a52-a9c03fe6ca96","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:10:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"03e330d2-f022-4412-bc3c-242835cf9577","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:15:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d6c6c4f-0635-4cad-a31f-884acc2faab8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:20:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0f925953-8e54-4223-a8c6-18fe76767b0a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:25:00","totalConnections":1}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2b8b090a-7421-4d30-96c5-7d8ba8661004","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 15:30:00"}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f0a43d5d-b9ea-4112-b0f2-4eaf56d8f2a1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:35:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"37b22b89-6a00-406d-b108-d2b4e0cb1bab","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:40:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"db62c8c7-a1f0-4a79-8086-573f9f756b4b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:45:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"811d25b9-4340-4955-83f9-793f61dbcca5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:50:00","totalConnections":1}
{"durationMs":2.13,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"af6169a1-8ce1-44a0-a874-83fd3d5d105a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 15:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 15:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 15:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 15:55:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d2e27890-7ec3-4b5d-bb1e-545f8b5cc6a9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 15:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:57:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 15:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 15:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 15:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 15:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 15:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 15:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 15:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:00:00","totalConnections":1}
{"durationMs":1.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"10b89de8-dc90-40c3-a17e-b0fb8b258f2f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:05:00","totalConnections":1}
{"durationMs":4.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8107986c-fb07-483a-867b-9cc706ade19c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:10:00","totalConnections":1}
{"durationMs":2.78,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"236c3d35-f9d3-4396-bfbe-31594c00548e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:15:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"38885393-ad3e-4a71-807f-680af68c6f54","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:19:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:20:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:20:00","totalConnections":1}
{"durationMs":2.38,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"57fa9445-21f0-46fd-abc2-fef85b75093d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:25:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7ed47138-4b9f-4ffc-84eb-833ef1db9e89","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 16:30:00"}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e0f786cf-b903-4882-928a-bc6d2ba2e4ec","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:35:00","totalConnections":1}
{"durationMs":2.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a50384ca-b67e-4cd4-8414-024fad2e7da2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:40:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9ee0d77f-523a-4761-8fe2-43774d54be32","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:45:00","totalConnections":1}
{"durationMs":1.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2e6f5265-b330-4bc6-90e3-018da11bd779","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:50:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"79031b56-b384-4b07-90f3-858cca6d520e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 16:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 16:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 16:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 16:55:00","totalConnections":1}
{"durationMs":2.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"db2591a9-5217-425f-a4b6-13e5428c8150","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 16:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 16:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 16:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 16:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 16:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 16:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 16:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 16:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 17:00:00"}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"da8ac966-2662-477f-b1fd-a969817978f8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:05:00","totalConnections":1}
{"durationMs":2.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f85f59e1-ae2b-4101-9aa3-32dd6510a4e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:10:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"366c6529-1dca-463a-876b-d6206cff82e1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:15:00","totalConnections":1}
{"durationMs":3.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"71ee97f7-9545-42e8-b981-369b0548e043","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:20:00","totalConnections":1}
{"durationMs":4.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"52ee02ff-370e-4827-87eb-3280ea97ddd4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:25:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d6142421-b459-4523-b76e-342439b14628","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 17:30:00"}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"648004f4-c3f4-4c9e-b5ea-c82955e2d26f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:35:00","totalConnections":1}
{"durationMs":1.84,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1f3288cb-b7ec-433f-a0ab-0c4179237507","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:40:00","totalConnections":1}
{"durationMs":3.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d972904-12fe-4f8f-baec-6ff4c32ff29b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:45:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"dc8bc346-bda0-4e7b-8051-8f9d24e0a7b8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:50:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a6764685-ba47-4b8c-9f50-d78b510379d5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 17:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 17:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 17:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 17:55:00","totalConnections":1}
{"durationMs":2.25,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3bc9d319-a6c1-4d02-86ba-d1e7eaecd84d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 17:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 17:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 17:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 17:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 17:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 17:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 17:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 17:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 18:00:00"}
{"durationMs":2.03,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"049e0058-fc10-49e8-84fd-699717ede0c9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:05:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"de00f9bb-d930-469a-b65d-4f223022aaa0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:10:00","totalConnections":1}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f3f31a34-6249-44be-9285-ac9a3104027c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:15:00","totalConnections":1}
{"durationMs":2.43,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"23e46bbd-4a25-4132-b1b1-a975e866af43","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:15:03","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:20:00","totalConnections":1}
{"durationMs":1.59,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"abf3a805-bd94-4b1c-b0ec-c0388517e020","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:25:00","totalConnections":1}
{"durationMs":2.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c5dfcd3-2cff-4e49-bb92-a5c90877172f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:26:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 18:30:00"}
{"durationMs":1.46,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"74d03372-8b1f-41a6-8933-2a1edf194a97","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:35:00","totalConnections":1}
{"durationMs":1.53,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e7139d6c-3f0d-4b0d-9be3-9e28928af9c2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:40:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3ceb7745-6c42-4a72-aa70-d0a9df233bd4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:45:00","totalConnections":1}
{"durationMs":1.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5ebd55d6-aa07-4a6e-a199-0fdc12e25953","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:50:00","totalConnections":1}
{"durationMs":3.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5af5d855-7cf5-4049-a06e-3277ba3b5dd6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 18:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 18:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 18:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 18:55:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cd829f0b-86eb-4010-b05c-0c9bd8d0c5c9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 18:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 18:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 18:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 18:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 18:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 18:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 18:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 18:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 19:00:00"}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c70c9810-2007-4d6d-b01e-978e59d24b59","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:04:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:05:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9a123139-1123-4cd5-a61a-800cf591a74d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:10:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0900bc57-ef6c-4739-b5b5-88ba73e693cb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:15:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"20b32514-48f5-4ebf-8f62-291cf23fc604","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:20:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7911a18e-b0cb-43e5-82d2-8bb41f511428","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:25:00","totalConnections":1}
{"durationMs":2.02,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b90dae00-3104-4ee0-baf1-067016927a51","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 19:30:00"}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f08639a7-db9f-4ef3-965a-5772a2d4f6eb","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:35:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7e1162b0-c3a4-4459-a96c-737d6c1f1286","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:40:00","totalConnections":1}
{"durationMs":2.88,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3eadd292-733e-4d38-803b-8569e00f14c1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:45:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5a0b2640-904c-4640-a1db-f80cd4adc236","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:50:00","totalConnections":1}
{"durationMs":2.96,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"09fc3956-2bb9-45dd-badb-684ca27ea08d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 19:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 19:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 19:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 19:55:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ef3f865d-e13f-4bb1-9429-d61cf287579c","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 19:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 19:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 19:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 19:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 19:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 19:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 19:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 19:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 20:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 20:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:00:01"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:00:01","totalConnections":1}
{"durationMs":2.82,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c604935f-3ca6-4756-81cd-4eb143e7cbbd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:05:00","totalConnections":1}
{"durationMs":2.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6d9882f4-44cc-473c-935d-afa354df3546","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:09:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:10:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:10:00","totalConnections":1}
{"durationMs":2.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5b41dd11-b88b-4a24-a4e4-f8523016efed","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:15:00","totalConnections":1}
{"durationMs":2.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ff3e8006-0d28-475c-bbe6-67b8f285cb48","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:20:00","totalConnections":1}
{"durationMs":2.22,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e6416f43-a8f6-4827-b5dc-15d3d929b4d2","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:25:00","totalConnections":1}
{"durationMs":2.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"67113c74-f7f5-4f4b-87fa-baf0bccd49e6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:30:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3df5f28c-9a3d-4a3f-8943-f652b0e89ba4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:35:00","totalConnections":1}
{"durationMs":2.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"26cbeab1-b835-41ef-920c-cda8791b6323","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:35:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:37:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:40:00","totalConnections":1}
{"durationMs":1.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e03a9c3f-ad9d-4d0b-98dd-6cf1529a1958","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:45:00","totalConnections":1}
{"durationMs":2.48,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"51426e2c-8824-4cf1-82e5-89d9392cba2a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:50:00","totalConnections":1}
{"durationMs":1.89,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"84fc0d94-b290-4da8-9950-f3082d9a4999","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 20:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 20:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 20:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 20:55:00","totalConnections":1}
{"durationMs":1.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f40fee3d-bfaa-46f1-a2e3-847b76d65678","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 20:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 20:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 20:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 20:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 20:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 20:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 20:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 20:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 21:00:00"}
{"durationMs":2.18,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f2aac9a0-29ec-40b3-853a-40c8ab50bfe9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:05:00","totalConnections":1}
{"durationMs":1.68,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5c779a50-ff35-44bc-8621-9e4b059265a9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:10:00","totalConnections":1}
{"durationMs":2.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6463e808-4482-4279-8b83-f2a3176f0f3e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:15:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4df34a5a-b081-4a38-b540-ec4501e6a6c6","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:17:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:19:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:20:00","totalConnections":1}
{"durationMs":3.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"13f78542-b2f3-4039-b988-e550248c6637","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:21:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:23:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:24:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:25:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:25:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ef8f24aa-7fe1-4b54-95d2-2730d0f00212","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:25:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:27:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:29:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 21:30:00"}
{"durationMs":1.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4fcea66d-913e-40f5-a1b4-7183285392ad","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:30:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:31:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:33:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:35:00","totalConnections":1}
{"durationMs":1.49,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"857829d9-ba26-453d-946c-0d0bec5bdd61","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:35:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:37:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:39:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:40:00","totalConnections":1}
{"durationMs":2.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"75e78c61-56cc-46ae-b761-7a999ff31b38","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:41:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:43:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:45:00","totalConnections":1}
{"durationMs":1.45,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2e3eb78d-a97a-4f52-a2d9-ac79b27abc29","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:45:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:47:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:49:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:50:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4190d14f-4409-4c57-8014-5c27605ddff3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:51:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:53:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 21:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 21:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 21:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 21:55:00","totalConnections":1}
{"durationMs":1.72,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"037dc2f6-17e1-40a2-a074-5caa8a3d1d19","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 21:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:55:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:57:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 21:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 21:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 21:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 21:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 21:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 21:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 21:59:23"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:00:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7ebed56c-8a43-4621-b689-43d16e71b177","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:01:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:03:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:05:00","totalConnections":1}
{"durationMs":1.67,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7093ce1-1b5f-4311-8106-6fb5dbcff9b4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:05:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:07:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:09:23"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:10:00","totalConnections":1}
{"durationMs":2.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bcc52351-9544-4e76-af8a-f98a659edec8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:11:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:13:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:15:00","totalConnections":1}
{"durationMs":2.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea4d966d-0317-4973-8882-952459a771e9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:15:23"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:17:17"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:17:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:17:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bac82ea6-89ee-4cf1-9f26-ff58caeb84ae","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:17","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:17:23"}
{"data":{"id":null,"label":null,"name":null,"type":"button"},"durationMs":35,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:17:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.21,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"eedf9842-4289-4e48-8e33-6170c3eaec46","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:31","userId":null}
{"durationMs":663.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/auth/login","requestId":"028724c3-c0a1-4d4f-bc78-ac5aa154fd30","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:32","userId":null}
{"data":{"id":null,"label":"Sign In to Dashboard","name":null,"type":"submit"},"durationMs":64,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:17:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":null}
{"durationMs":2.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"2d44f211-7b96-4b52-a984-ab0778a56d95","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:32","userId":null}
{"durationMs":34.06,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school","requestId":"bbea8a34-d06b-4dc4-b929-26a92805c64e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":73.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/school/terms?isCurrent=true","requestId":"a66de811-2e3f-4954-ad51-58652e515480","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":67.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/streams","requestId":"407aed4a-0b79-4f10-a032-864d7990830f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":89.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/grade-levels","requestId":"096062b6-e5eb-4302-8530-612191afc53f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":44.68,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/academics/learning-areas","requestId":"21e0b86d-c1d9-486f-a059-bd14a926cc56","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":46.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"534dc1a5-6225-4e48-8ec7-66ab8f281441","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"f6bdd0c6-65fb-457c-926f-e4d61d9f9b92","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":84.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"92abc517-7b05-4937-998c-f77be4979b80","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":47.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"3ea9ee49-1846-4ac8-8de1-27a62a8ada76","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"cc0ae510-a104-472f-b1f3-f2ba6df72780","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/auth/login"},"durationMs":1060.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school"},"durationMs":404.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","href":null,"navId":null,"text":null,"to":"/guardian"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/login","navId":null,"to":"/guardian"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.25,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9a4a5750-77e5-4ebd-a503-75e5c8e3e4b5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":20.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"e6dfcd62-7874-4a59-9bd4-d00cdb2eba04","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/school/terms?isCurrent=true"},"durationMs":463.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/streams"},"durationMs":479.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/grade-levels"},"durationMs":495.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/academics/learning-areas"},"durationMs":733.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":531.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":396.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":634,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":447.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":449.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":659.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.69,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"bdcd269b-748b-4911-895d-d01fff587596","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":20,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:37","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.77,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ba368b41-9816-44c4-9230-461a8542f9af","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:37","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":81.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"c199ba87-ecc7-428f-acf8-f92d8bb68197","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":34.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"48fc5fd8-acae-4151-a92f-0dbe67cd8a17","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"210e3901-194d-4fef-bb4b-4d930e131537","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.54,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"5fb9815a-93f3-42b3-a950-f344779df2b2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":86.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"77429b99-b72c-4d6e-90b5-01f24c2292f6","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.19,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"4228fb65-8416-49d7-bda3-7eb8a01979e0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":435.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":575.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":578.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":593.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":797,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":961.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.4,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a99ae3bd-eabc-4142-93cd-1cd82dd3b19e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":238.31,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"01dedf65-d7dd-4636-b8ab-18f9ccd8356a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":31.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"bb54ace0-eb61-4db0-b74e-c0f96acdc0ad","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"68d50feb-2222-4ab9-b889-9a87139fc34d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080666931-155509","text":"Fees"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080666931-155509","text":"Fees","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":150,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787080666931-155509","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":183,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080667533-143737","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080667533-143737","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":107,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080667533-143737","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":134,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":606.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"214ec43a-0149-4a68-9f40-4a91c84f20cc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:51","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":395.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":438.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:51","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"640d286b-a798-47fc-aa3b-88c23dd07718","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:51","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6a820ca0-dd13-4d0c-9d4a-11a6f60d2411","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":60.91,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"85300abd-50da-4df3-b0b2-8c08e5b8e802","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.66,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"ad8e6507-3151-4987-aa65-e7f164758238","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:17:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080671624-584388","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080671624-584388","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":127,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080671624-584388","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":174,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":427.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"86a6cfe3-2e2c-4544-84c9-1e52d609a2d7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":706.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.78,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f4fcb776-096f-4de3-8f72-c3cafb321249","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":85,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:17:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"cbc3ebdd-6416-436f-af3f-2cadf2d8324c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:17:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":62.79,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"b71ba928-752f-4123-92cf-181e76d0e1b4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:18:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:18:00"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":9,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":null,"navId":null,"text":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a53ea59f-e9a8-4ce7-9a0e-0b0358ea36c1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":34.99,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"4b8653af-8823-4415-96da-26920ece0c93","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:18:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":446.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":761.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:01","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":14.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c029db3c-f573-4c07-8148-45cb5aede6ee","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:01","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":40,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:05","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"119524a5-ddd9-4390-a680-4da25ad2ca4e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:05","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Communication","name":null,"type":"button"},"durationMs":23,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.41,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"43b8b8b1-70ee-40a5-97cb-39ea4ab3b932","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Communication","name":null,"type":"button"},"durationMs":29,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:09","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":5.92,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b603ff41-b4b1-4e09-89f7-0e1495cde02a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:09","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"63806260-cac1-4511-b11e-764f39344a18","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:18:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":64.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"d12da5d2-1991-4d2a-b520-f593ddb53c57","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:18:16","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080692543-690708","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080692543-690708","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":75,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/payment/5671ed71-9005-463e-9102-bb6481e99bf1/receipt","navId":"1787080692543-690708","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":134,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":456.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:16","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"25525909-ec05-4456-b721-03640edab5b2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:16","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":770.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:17","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.56,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c6201ba4-25fb-4157-bf92-41ae3596588f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:17","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":75,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:20","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a710b691-8bf3-471c-9744-2c76311b0a22","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:20","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":35.24,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6964effe-96f5-48ca-84a6-7d7b7896530e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":57,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:55","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ff028292-49ce-498f-90ee-5ae9d583fadc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080733011-363298","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:18:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"26368d74-54ac-4777-bcb0-6dc629e73742","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:18:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:19:00"}
{"data":{"id":null,"label":"Invoice","name":null,"type":null},"durationMs":31,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12.95,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3f7b47de-3778-46d6-a07e-65a44f1a9662","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Pay KES 21,480.00","name":null,"type":null},"durationMs":42,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"32797df9-8318-4f14-9f21-23d1d56633ca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:02","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[Payment Email Catch-Up] Found 4 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 4 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:19:23"}
{"amount":1,"feeItemIds":["c71d7e60-c83f-46f5-ac6d-dcbe7afcfd1c"],"guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","invoiceBalance":21480,"invoiceId":"35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","level":"info","message":"[Guardian Payment] Initiating M-Pesa payment","service":"cbc-sms","studentId":"cmp8gtpz200fy8bcnxg8120p8","timestamp":"2026-08-18 22:19:27"}
{"bankAccount":"***6152","bankName":"KCB Bank","bankPaybill":"522522","level":"info","message":"[Guardian Payment] Bank C2B direct settlement configured","service":"cbc-sms","timestamp":"2026-08-18 22:19:27"}
{"data":{"id":null,"label":"Pay KES 1 via M-Pesa STK","name":null,"type":null},"durationMs":21,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:27","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6906f741-eba3-47cf-89d7-ccd4b1a3f1de","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:27","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"checkoutRequestId":"ws_CO_18082026221941108702777070","guardianId":"1d8921a4-3c48-4035-9b8d-6098367e43c6","level":"info","message":"[Guardian Payment] STK Push initiated successfully","requestId":"83e37c6c-a0c4-4fa5-85b1-f3f20d9ca11b","service":"cbc-sms","timestamp":"2026-08-18 22:19:44"}
{"durationMs":17416.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa","requestId":"61d2888a-5aa2-4e7c-a923-36a00517657a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:44","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"POST","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/pay-mpesa"},"durationMs":17805.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:45","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.85,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a69b99ca-7bfd-4e36-be58-40055b8c9455","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:45","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"4707ce46-04ba-41ff-805c-175d687cf73e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"12cb3d2c-2d7e-4b7c-93ea-f837522f15c2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.39,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"62c7d20b-e19f-499d-8d49-52951ad6ff85","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":396.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":724,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":731.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e8f658c2-dae9-42f1-bc1d-dfca1039b7aa","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"698b9494-abbf-4e7d-97c3-b3be7443b52e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":425.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"50a20f2e-998f-4d58-b62f-7549a1084011","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"d6d9a16c-28ba-4f71-88a4-a611579b6ec5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":382.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.16,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f4f7dc90-ed21-4d1f-856b-2bdf5fd76b24","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.15,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"7198a228-9202-48da-92e5-35741bf988c5","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":396.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:54","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a8ff4367-e77f-4b41-86ca-dc2a82111842","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"a18fa058-5969-49ce-9027-0d6bfc39000a","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:54","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":400.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.93,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a0cf2468-c297-442b-a55e-c7160a3a1bbc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"c1064b99-596a-43d4-ab56-68678f43ade0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":410,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:19:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"0a970bf2-acc6-4d3a-8ad4-bfc057904cc7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:19:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":30.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"3905ed00-3ce7-4226-8cdb-3659d87dfbb2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:19:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":395.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:00","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.73,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4f0ef9d9-1ff7-44d4-b1b0-9d055abc24f4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:20:00","totalConnections":1}
{"durationMs":27.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"767aea58-2e8b-4357-b550-b536c797c004","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:00","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":423,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:02","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.84,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b78e4225-f202-459a-a7d4-642399d18fb8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:02","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":1.61,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3ac26bc9-229a-45b5-876e-1c7e87f15763","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:20:02","userId":null}
{"durationMs":156.48,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"144b9ec5-16bd-4e8e-90e7-de3f301bb942","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:02","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":568.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:04","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.47,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"6e12d4ea-0dd6-4b31-bd88-22c6d970e825","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":40.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"71652c8a-31ff-441a-9785-c1895e226f5d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:04","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":454.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5bd11769-2605-4866-8820-dc1842419317","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.34,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"bc94c898-6190-49c4-b022-89a519e72582","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":417.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:08","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"fd02fc1c-b18b-487a-9c7b-49d12d8e4605","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":42.96,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"daf774a9-ed82-45f2-9a63-6871e3882192","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:08","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":73.19,"ip":"196.201.214.200","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/mpesa/callback","requestId":"1233b275-f22a-40d0-8644-cb8fa0204554","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:08","userId":null}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":443.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:10","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"b9d737d3-c2ec-474a-b7c3-e42e5d3f6813","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":29.59,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070","requestId":"4a202175-30ff-4c9f-97aa-5b43925807ca","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:10","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees/payment-status/ws_CO_18082026221941108702777070"},"durationMs":445.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:12","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.02,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"59581a94-9d67-4c1c-be2a-471b32e042e7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:12","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":65,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"01229a55-3e6e-427e-981c-183c59e71ca8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:13","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":455.6,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:14","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":7.89,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"056f5efa-9f8a-48d6-9202-d6d847425508","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:14","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":76,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:19","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"f402e0c6-c80e-4cfe-ae21-1c23963388f8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:19","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":39,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:23","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c0cb295b-18b1-4caa-8a68-4faa3cbb9883","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:23","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":35.51,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"66160075-c64e-4e87-8f50-9003e459c7e7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":45.04,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"cf025f84-aa76-4cce-a882-85d5a0c8c6d2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:30","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080827079-715480","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080827079-715480","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":52,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080827079-715480","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":97,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":443.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"95d790a7-997c-49e6-b977-e0631fed03c4","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":763.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:31","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"ec3365ce-bcf8-419b-8b0e-a8b9f415a6a2","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":56.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"20ead918-feae-460d-b135-97678e909631","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1787080829452-317088","text":"Alerts"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/notifications","navId":"1787080829452-317088","text":"Alerts","to":"/guardian/notifications"},"durationMs":127,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080829452-317088","to":"/guardian/notifications"},"durationMs":152,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":462.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":38.46,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3fdcdf95-e701-43a0-baf7-f3cc55f34b57","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":32,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":19.05,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"56bb3506-88d4-4144-a493-a93b468e5bd8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":49.98,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"9b05f039-f245-4572-b08d-420c7244f86d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":96.71,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"79a4e55d-8811-48a6-9b2c-4c92f765cf83","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080834695-27142","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080834695-27142","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":65,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1787080834695-27142","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":106,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":494.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:38","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.88,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"9d4c91ba-3ed1-4326-a288-7aadc1ed76d8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:38","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":906.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:39","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":13.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7ad4c356-2e41-4a7f-828d-cda7c4aedf32","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:39","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":18.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"ff11bcb5-335b-4f4a-984b-d95e2dfe5583","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Payment History","name":null,"type":null},"durationMs":87,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.87,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"80df20ae-ace6-400b-9edf-9fd44f8e2851","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"3cce58c0-bedd-49a6-9b65-96920c50b1ea","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":381.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":391.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:48","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"e9f83a08-72c1-47d1-a65a-fd20e655a59e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:48","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":28.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"88faca7a-0b36-4949-b2d7-edc788635f53","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":46.49,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"06abd1eb-1d1f-49fd-a3ad-075d89b7d6cd","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080845867-91723","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080845867-91723","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":60,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080845867-91723","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":96,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":438.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.03,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5f707d87-6cff-43c0-9d27-dccce1f7ea32","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:49","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":33.26,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"11513647-88a1-4c29-8ced-339b9c7cf973","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":872.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1787080847006-56751","text":"Alerts"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/notifications","navId":"1787080847006-56751","text":"Alerts","to":"/guardian/notifications"},"durationMs":58,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080847006-56751","to":"/guardian/notifications"},"durationMs":88,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":399.2,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":27.1,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"45d78886-8ab1-4faf-b44c-8231f845ba92","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":51.09,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/profile","requestId":"11757043-aa23-4cf5-b51e-aec333f1bfd0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/profile","navId":"1787080849016-26308","text":"Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/profile","navId":"1787080849016-26308","text":"Profile","to":"/guardian/profile"},"durationMs":122,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1787080849016-26308","to":"/guardian/profile"},"durationMs":149,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/profile"},"durationMs":478.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:52","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.44,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"3bb4e41b-956a-4b1b-9752-ea7d8cd1ca08","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:52","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":105.61,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"34843c32-4293-48ed-844e-2ead6e7f2bd1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:57","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":54.2,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications?limit=6","requestId":"65ad4452-385d-438f-9ce8-6d99826acbc1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":49.42,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"92862af6-e1eb-4fe6-bc79-48594de73a33","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:20:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian","navId":"1787080854385-865360","text":"Home"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","href":"/guardian","navId":"1787080854385-865360","text":"Home","to":"/guardian"},"durationMs":73,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","navId":"1787080854385-865360","to":"/guardian"},"durationMs":143,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":568.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"93f7e968-c09d-4638-964c-4dfe1156acfc","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":855,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":858.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:20:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.27,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"4f231fd4-376e-4d76-8f48-c52e4905d54d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:20:59","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:21:25"}
{"durationMs":54.23,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"42d373bd-6481-4400-bcb8-142e359b2413","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":84.64,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"e05c6521-60d6-428e-8dd5-f2d3697ebd02","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:31","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080888319-463779","text":"Fees"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080888319-463779","text":"Fees","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":42,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian","navId":"1787080888319-463779","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":101,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":424.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080889091-891834","text":"Results"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:32","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.86,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7a146ea3-b823-4c28-810e-7b8b0b26b07e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:21:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":63.14,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results","requestId":"a71612f5-fdae-4f36-8396-00c5e8817458","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":87.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades","requestId":"fdebfdc3-0266-4dbf-97a2-ba0067e66f86","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:32","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080889091-891834","text":"Results","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":61,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787080889091-891834","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":94,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":806.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/results"},"durationMs":410,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/cbc-grades"},"durationMs":432.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:33","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"850f45a0-bc6d-47df-b462-9a15d81e2c78","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:21:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":41.07,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/notifications","requestId":"048d08f5-f008-4eda-9994-5672b57663ce","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:33","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":31.63,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/profile","requestId":"03c37c47-f6d5-497d-b65b-f370835548ec","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:21:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/notifications","navId":"1787080890277-366594","text":"Alerts"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","href":"/guardian/notifications","navId":"1787080890277-366594","text":"Alerts","to":"/guardian/notifications"},"durationMs":49,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/results","navId":"1787080890277-366594","to":"/guardian/notifications"},"durationMs":78,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/notifications"},"durationMs":428.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/profile","navId":"1787080890942-4999","text":"Profile"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/notifications","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","href":"/guardian/profile","navId":"1787080890942-4999","text":"Profile","to":"/guardian/profile"},"durationMs":45,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/notifications","navId":"1787080890942-4999","to":"/guardian/profile"},"durationMs":91,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:34","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.62,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"02ef91c9-dd31-4ae1-91cc-28e6e8d2bc0c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:21:34","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/profile"},"durationMs":395.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:21:36","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"66107eaf-1a6b-47a2-8653-4f5ae2799e69","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:21:36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:23:25"}
{"durationMs":37.43,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"eb5ba8bd-ea51-4ca2-b60b-93dfbeffc295","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:23:55","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"dd503755-cf27-4dbd-9c7d-46757f28af6e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:23:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":1378.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":1644.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":null,"name":null,"type":null},"durationMs":81,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:56","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":6.74,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"30aec009-4596-429e-9c45-ad7003485d33","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:23:56","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":45.7,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"647c0de5-34c5-4425-b794-8f4d4f05ade1","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:23:57","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":90.22,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"8106b6e6-48c6-4370-8c54-9e6793619b69","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:23:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787081034585-658803","text":"Fee PaymentsDue"},"durationMs":null,"event":"NAV_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Navigation click","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","href":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":"1787081034585-658803","text":"Fee PaymentsDue","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":96,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","navId":"1787081034585-658803","to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":164,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":403.5,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:58","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.12,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"c5029b16-7a25-4bb0-a4fd-0179d99e1b33","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:23:58","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":773.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:23:59","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":10.94,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"7fa35738-1a5d-448a-b983-648d2d4e8ee7","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:23:59","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:24:00"}
{"durationMs":31.37,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/payment-methods","requestId":"13f6e524-b27c-4239-ba31-f8b82b26a505","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:05","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"View Full Invoice","name":null,"type":null},"durationMs":10,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","href":null,"navId":null,"text":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route path change","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees","navId":null,"to":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed"},"durationMs":null,"event":"NAV_RENDER","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Route rendered","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":15.72,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"a7b0b47d-6141-4a44-95a8-e882e48d3873","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":129.17,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"e3ba510f-3f7c-4a41-aae6-b64598b7e92d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":268.08,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees","requestId":"b1b6af7d-abb4-4994-a517-7345f6313727","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/payment-methods"},"durationMs":414.3,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":871.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/children/cmp8gtpz200fy8bcnxg8120p8/fees"},"durationMs":960.7,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:06","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":26.8,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"5137c49b-768b-4ba0-9a1f-8780566cc784","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:06","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"id":null,"label":"Open in New TabNew Tab","name":null,"type":null},"durationMs":187,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/student/cmp8gtpz200fy8bcnxg8120p8/fees/invoice/35b80bc4-44ea-43bb-b95d-b18a69cbc0ed","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:15","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":8.18,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"185d378e-c62e-48c7-a0c9-d1387b0a5e6c","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:15","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":83.36,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/school-info","requestId":"f09ae994-9445-49ca-8c2d-6d0112527a12","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":37.11,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/unread-count","requestId":"bbb98678-d7f4-47eb-b887-46cac4472d3d","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":24.45,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications/inbox-count","requestId":"fa5faaa7-b254-45d3-b2ef-f1126a4523e8","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":132.81,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/dashboard","requestId":"52c4a5dc-0f6f-438d-be31-6abb0236782e","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":22.13,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/communication/notifications","requestId":"b35523c5-1590-40cf-9a5c-c78f488eb4d3","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":53.9,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/v1/guardian/profile","requestId":"8d2efef9-9ae8-4650-9490-fcfaf4777f7f","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":304,"timestamp":"2026-08-18 22:24:46","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/school-info"},"durationMs":529.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/unread-count"},"durationMs":571.4,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications/inbox-count"},"durationMs":576.9,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/dashboard"},"durationMs":879.1,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/communication/notifications"},"durationMs":915.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"method":"GET","status":200,"url":"/guardian/profile"},"durationMs":940.8,"event":"API_RESPONSE","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT API response","path":null,"schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:47","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":9.5,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"978425c5-c460-45f5-af3b-ce06ece0f9d0","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:47","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"data":{"from":"/guardian/profile","href":null,"navId":null,"text":null,"to":"/login"},"durationMs":null,"event":"NAV_PATH_CHANGE","ip":"192.178.11.1","level":"info","message":"CLIENT_EVENT Route path change","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:24:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36 (compatible; Google-Read-Aloud; +https://support.google.com/webmasters/answer/1061943)","userId":null}
{"data":{"from":"/guardian/profile","navId":null,"to":"/login"},"durationMs":null,"event":"NAV_RENDER","ip":"192.178.11.1","level":"info","message":"CLIENT_EVENT Route rendered","path":"/login","schoolId":null,"service":"cbc-sms","timestamp":"2026-08-18 22:24:49","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36 (compatible; Google-Read-Aloud; +https://support.google.com/webmasters/answer/1061943)","userId":null}
{"durationMs":3.12,"ip":"192.178.11.1","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"333360c3-d8e2-47e5-8c1c-bbdc56facba7","schoolId":null,"service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:49","userId":null}
{"data":{"id":null,"label":"Edit Profile","name":null,"type":null},"durationMs":50,"event":"UI_CLICK","ip":"102.0.24.50","level":"info","message":"CLIENT_EVENT Action click","path":"/guardian/profile","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","timestamp":"2026-08-18 22:24:50","userAgent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"durationMs":11.97,"ip":"102.0.24.50","level":"info","message":"HTTP_REQUEST","method":"POST","path":"/api/v1/client-logs","requestId":"07f20adf-f0b8-49c0-b65a-073cb9f0ce82","schoolId":"cmp8gtb7j00008bcnd6vyf567","service":"cbc-sms","status":200,"timestamp":"2026-08-18 22:24:50","userId":"bc68176f-9825-479f-879f-87e565a6b5ed"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:25:00","totalConnections":1}
{"durationMs":1.92,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3c0e0d7c-8cb9-4254-a60d-0401d916946a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 1 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:30:00","totalConnections":1}
{"durationMs":2.6,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c7066a19-8a4f-4b97-9732-82fa6951b335","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:35:00","totalConnections":1}
{"durationMs":1.95,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"450beda9-bc1f-4a45-a53c-17e889f0b597","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:40:00","totalConnections":1}
{"durationMs":1.87,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"024b4b4e-c137-4f39-a51a-c12204ccadca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:45:00","totalConnections":1}
{"durationMs":3.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"57148873-4bdb-4219-999c-686d7c357aad","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:50:00","totalConnections":1}
{"durationMs":2.55,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a1af704c-930f-4f88-b817-d69f12f83819","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 22:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 22:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 22:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 22:55:00","totalConnections":1}
{"durationMs":3.04,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5170f50d-cf85-4697-b416-c9da755a3211","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 22:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 22:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 22:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 22:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 22:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 22:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 22:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 22:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 22:59:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 23:00:00"}
{"durationMs":3,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f6deb2fb-e26f-435f-9b69-ff3720ded4db","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:05:00","totalConnections":1}
{"durationMs":2.27,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2ebb963d-5adc-4713-84fa-1eb89c7dd071","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:10:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4679eb1f-6e35-4ffe-b826-1644a68b8687","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:15:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6f2119a4-e7fb-4477-ba41-b7cb16bb0af5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:19:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:19:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:20:00","totalConnections":1}
{"durationMs":4.98,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ba766128-7218-46c8-8448-4e1a8a734fe5","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:21:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:23:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:25:00","totalConnections":1}
{"durationMs":1.65,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b8d55e23-18ea-453a-8f46-a3d345e1c975","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-18 23:30:00"}
{"durationMs":3.37,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ca8adaea-aee9-41f2-9507-7696dd75547d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:35:00","totalConnections":1}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4ab7584-ac26-4d9f-9182-a5b3fcaff9e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:40:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"1806252d-b776-44c5-a534-46de8dd13a74","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:45:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7060ff37-9ef3-47b8-910e-ef6c03824897","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:45:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:50:00","totalConnections":1}
{"durationMs":1.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"3bc473c7-033c-4bba-95c2-5569e1b2e806","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-18 23:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-18 23:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-18 23:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-18 23:55:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9d1a7b93-75fc-4831-9ea4-3eccdcb8104d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-18 23:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-18 23:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-18 23:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-18 23:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-18 23:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-18 23:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-18 23:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-18 23:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-18 23:59:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:00:00","totalConnections":1}
{"durationMs":2.26,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bdb7e64e-ae9e-41a2-b2a4-655ef06c1bf8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:05:00","totalConnections":1}
{"durationMs":2,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"55f07dca-d486-459f-8622-eefb5367856e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:10:00","totalConnections":1}
{"durationMs":1.47,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"48fe69d9-6212-4477-b3cc-398aa9ce403e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:14:01"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:15:00","totalConnections":1}
{"durationMs":1.77,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"fb6988e7-c91f-4250-af80-f671757c2516","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:19:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:19:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:20:00","totalConnections":1}
{"durationMs":2.15,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"e58d7df5-30f7-4404-bcef-68e769bd35cc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:21:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:23:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:25:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c830ede7-f223-459d-bad4-30ce0e65b6e8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 00:30:00"}
{"durationMs":2.91,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"910f2ea2-1303-48e9-bd91-524672dcbad4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:32:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:35:00","totalConnections":1}
{"durationMs":1.74,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8fcf933c-c844-4daf-871d-f330e4a7b386","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:40:00","totalConnections":1}
{"durationMs":1.56,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"f67adc4f-362e-4ec1-94c8-c6c51639c1af","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:45:00","totalConnections":1}
{"durationMs":2.14,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0431a0e2-dbb1-4b06-a262-906f72e4a07b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:50:00","totalConnections":1}
{"durationMs":3.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cb5cb651-18eb-4216-9bfe-8b5963a212e4","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 00:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 00:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 00:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 00:55:00","totalConnections":1}
{"durationMs":1.94,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8bba77b3-d860-4c10-a740-2f2244e6b568","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 00:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 00:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 00:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 00:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 00:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 00:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 00:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 00:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 00:59:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 01:00:00"}
{"durationMs":2.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ea94331f-ec1b-4272-bf82-f1e6599253ac","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:05:00","totalConnections":1}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b850dd86-1c80-4309-9bb4-2ae83ec87fde","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:09:01"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:10:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4f8ba5e0-fede-4de0-9793-14f94778c7f7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:15:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9bcee48f-5b89-4a2c-a3ea-1f3079e81359","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:19:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:19:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:20:00","totalConnections":1}
{"durationMs":2.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"d90747e0-2dc7-4aaa-aa19-fdceb66d5656","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:21:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:23:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:25:00","totalConnections":1}
{"durationMs":1.54,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a1e74a7a-2332-4c6e-9b40-2d9ca3831228","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:25:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 01:30:00"}
{"durationMs":1.86,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9e9cc096-74ad-414a-8d8d-0a69e13f2abf","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:35:00","totalConnections":1}
{"durationMs":2.42,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"cf11512a-be17-4541-9d9a-85e59944ff19","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:40:00","totalConnections":1}
{"durationMs":1.52,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"c17334fc-0f46-427a-8d34-e1d1e061e73a","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:45:00","totalConnections":1}
{"durationMs":2.08,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"70981c80-0ea5-4baa-a8d8-eb41f0b3ba5e","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:50:00","totalConnections":1}
{"durationMs":1.71,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"abb6eb1a-8a7f-42df-b409-1ef6ef6193d8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:50:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 01:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 01:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 01:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 01:55:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"0eddbbe1-a795-4e21-862f-68f8ea5d5545","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 01:55:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 01:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 01:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 01:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 01:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 01:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 01:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 01:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 01:59:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 02:00:00"}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"192885ca-89f8-4636-9fb0-83679fc61093","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:00:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:02:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:05:00","totalConnections":1}
{"durationMs":1.83,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"4c95ef59-5bba-40b0-b654-ac9b3c82daa0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:10:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7bc52389-9f50-41bc-a000-34a44e1b4164","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:15:00","totalConnections":1}
{"durationMs":2.34,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"7574539b-15cd-4df2-b316-3acd9d2061bd","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:19:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:19:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:20:00","totalConnections":1}
{"durationMs":3.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"94164d9f-8ccd-4f42-904e-13123fdd5ec9","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:20:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:21:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:23:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:25:00","totalConnections":1}
{"durationMs":1.85,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"6d64b53f-966b-43f7-b41d-cd15a28cd1c0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:30:00","totalConnections":1}
{"durationMs":1.57,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bed35d4a-a1a9-41a3-8293-3c94a33a79ff","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:35:00","totalConnections":1}
{"durationMs":2.41,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a24f2218-6310-4042-8a74-b2110c98e9a0","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:40:00","totalConnections":1}
{"durationMs":2.81,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5a07d94b-ea34-422f-be1d-f5c45ca6929b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:40:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:45:00","totalConnections":1}
{"durationMs":2.64,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"854e4466-f60f-43aa-a2b1-fef91cb33d08","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:50:00","totalConnections":1}
{"durationMs":1.51,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"8c3303dc-97f0-417a-982f-8c1805704f02","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 02:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 02:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 02:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 02:55:00","totalConnections":1}
{"durationMs":1.75,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"2aa9815e-2d0d-47d9-9ce0-fedb683b3a9f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 02:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:56:01"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 02:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 02:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 02:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 02:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 02:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 02:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 02:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 02:59:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:00:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 03:00:00"}
{"durationMs":4.1,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"85d79c9b-71ce-4328-9723-194f070b688b","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:05:00","totalConnections":1}
{"durationMs":1.69,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5defe33f-de11-4fdf-8a3a-9f30dce4568d","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:05:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:10:00","totalConnections":1}
{"durationMs":2.28,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a00bc103-8c55-466f-97eb-81e7d1df289f","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:10:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:15:00","totalConnections":1}
{"durationMs":1.97,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"480811a9-2a07-4b24-a895-f950b09cf3c7","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:15:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:19:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:19:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:19:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:19:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:20:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:20:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:20:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:20:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:20:00","totalConnections":1}
{"durationMs":2.36,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b9a670db-1fa7-469d-b46e-9c8974ce7de8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:20:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:21:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:21:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:21:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:21:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:21:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:21:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:21:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:22:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:23:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:23:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:23:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:23:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:23:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:23:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:23:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:24:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:25:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:25:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:25:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:25:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:25:00","totalConnections":1}
{"durationMs":2.06,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"686c97ec-b58c-49de-82f3-c5e3344710dc","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:25:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:25:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:25:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:25:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:25:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:25:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:25:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:26:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:27:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:27:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:27:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:27:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:27:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:27:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:27:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:28:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:29:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:29:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:29:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:29:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:29:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:29:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:29:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:30:00","totalConnections":1}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 03:30:00"}
{"durationMs":2.33,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"64fd45f9-bf29-41dc-8384-7f8b2a99f693","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:30:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:31:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:31:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:31:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:31:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:31:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:31:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:31:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:32:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:33:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:33:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:33:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:33:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:33:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:33:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:33:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:34:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:35:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:35:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:35:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:35:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:35:00","totalConnections":1}
{"durationMs":1.66,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b4e69222-4559-4e90-a49b-efbef9472153","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:35:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:35:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:35:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:35:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:35:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:35:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:35:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:36:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:37:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:37:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:37:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:37:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:37:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:37:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:37:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:38:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:39:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:39:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:39:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:39:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:39:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:39:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:39:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:40:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:40:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:40:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:40:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:40:00","totalConnections":1}
{"durationMs":1.7,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"bb15ed26-502d-400d-9d13-9f9e608200a1","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:40:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:41:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:41:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:41:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:41:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:41:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:41:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:41:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:42:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:43:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:43:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:43:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:43:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:43:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:43:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:43:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:44:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:45:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:45:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:45:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:45:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:45:00","totalConnections":1}
{"durationMs":1.5,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ce176825-4c77-41ee-8cec-0cf0467471e3","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:45:01","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:45:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:45:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:45:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:45:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:45:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:45:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:46:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:47:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:47:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:47:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:47:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:47:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:47:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:47:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:48:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:49:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:49:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:49:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:49:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:49:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:49:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:49:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:50:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:50:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:50:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:50:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:50:00","totalConnections":1}
{"durationMs":1.62,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"9fd3ef11-2364-4789-bbf7-1a44951bc907","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:50:01","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:51:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:51:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:51:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:51:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:51:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:51:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:51:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:52:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:53:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:53:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:53:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:53:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:53:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:53:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:53:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:54:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 03:55:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 03:55:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:55:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 03:55:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 03:55:00","totalConnections":1}
{"durationMs":2.09,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"27900ca8-22ae-4175-938b-7ed5c27637ca","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 03:55:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:55:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:55:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:55:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:55:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:55:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:55:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:56:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:57:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:57:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:57:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:57:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:57:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:57:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:57:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:58:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 03:59:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 03:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 03:59:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 03:59:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 03:59:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 03:59:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 03:59:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 03:59:25"}
{"level":"info","message":"[CRON] M-Pesa reconciliation started","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"[CRON] M-Pesa reconciliation completed. 0 stale marked failed, 0 auto-matched.","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 04:00:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 04:00:00","totalConnections":1}
{"durationMs":3.31,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"b0f636ea-a29a-4229-95e8-18f4f679a198","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 04:00:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:01:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:01:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:01:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:01:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:01:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:01:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:01:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:02:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:03:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:03:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:03:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:03:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:03:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:03:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:03:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:04:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 04:05:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 04:05:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:05:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 04:05:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 04:05:00","totalConnections":1}
{"durationMs":4.19,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"ba7916cc-9d13-4105-8bb7-d0e4e3946818","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 04:05:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:05:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:05:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:05:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:05:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:05:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:05:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:06:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:07:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:07:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:07:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:07:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:07:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:07:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:07:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:08:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:09:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:09:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:09:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:09:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:09:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:09:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:09:25"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 04:10:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 04:10:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:10:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 04:10:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 04:10:00","totalConnections":1}
{"durationMs":3.35,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"5d6ab525-33b5-434a-a570-5545808fbda8","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 04:10:02","userId":null}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:11:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:11:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:11:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:11:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:11:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:11:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:11:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:12:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:13:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:13:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:13:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:13:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:13:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:13:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:13:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:14:00"}
{"level":"info","message":"Integration sync cron job triggered","service":"cbc-sms","timestamp":"2026-08-19 04:15:00"}
{"level":"info","message":"Starting scheduled integration sync job","service":"cbc-sms","timestamp":"2026-08-19 04:15:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:15:00"}
{"level":"info","message":"Found 1 active API_PULL connections","service":"cbc-sms","timestamp":"2026-08-19 04:15:00"}
{"level":"info","message":"Scheduled integration sync job completed","service":"cbc-sms","successCount":0,"syncedCount":0,"timestamp":"2026-08-19 04:15:00","totalConnections":1}
{"durationMs":1.9,"ip":"127.0.0.1","level":"info","message":"HTTP_REQUEST","method":"GET","path":"/api/health","requestId":"a0131aed-4004-4824-bf0f-d34952153f06","schoolId":null,"service":"cbc-sms","status":404,"timestamp":"2026-08-19 04:15:02","userId":null}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:15:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:15:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:15:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:15:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:15:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:15:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:16:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:17:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:17:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:17:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:17:19"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XELQ (2432bac5-ff78-4e32-aa1d-362c95638979)","service":"cbc-sms","timestamp":"2026-08-19 04:17:21"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XHDX (dbbc4a3d-2abb-4568-b03c-a9f4bac1444f)","service":"cbc-sms","timestamp":"2026-08-19 04:17:23"}
{"level":"info","message":"[Payment Email Catch-Up] Finished processing 5 missing payment email(s)","service":"cbc-sms","timestamp":"2026-08-19 04:17:25"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:18:00"}
{"level":"info","message":"[ScheduledMessages] No messages due for delivery","service":"cbc-sms","timestamp":"2026-08-19 04:19:00"}
{"level":"info","message":"[Payment Email Catch-Up] Found 5 payment(s) missing emails","service":"cbc-sms","timestamp":"2026-08-19 04:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIEI38FIO (821ee471-25eb-42a9-bd7d-5da41a421b28)","service":"cbc-sms","timestamp":"2026-08-19 04:19:15"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHIOP2Z57U (009af4b2-6426-40d1-9cda-5cba7b0a6f17)","service":"cbc-sms","timestamp":"2026-08-19 04:19:17"}
{"level":"info","message":"[Payment Email Catch-Up] Queuing email for payment RCPT-UHHOP2XMRJ (28e2d8b6-e4db-44b4-8a66-8c1f3eb75843)","service":"cbc-sms","timestamp":"2026-08-19 04:19:19"}
