[2026-09-17 00:00:15] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 00:07:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:09:07] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:19:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:21:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:21:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:22:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:35:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:35:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:46:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:46:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:46:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:46:33] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:48:03] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 00:48:35] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 00:52:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:54:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:58:44] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:58:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 00:59:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:04:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:04:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:05:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:08:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:09:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:11:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:12:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:14:08] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 01:14:38] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 01:15:24] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 01:18:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:20:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:23:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:24:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:24:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:25:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:30:11] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:39:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:41:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:47:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:47:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:48:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:48:39] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 01:50:19] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 01:52:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 02:01:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:02:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:06:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:07:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:07:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:07:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:14:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:15:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:21:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:22:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:22:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:28:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:30:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:30:06] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:30:17] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:30:34] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:31:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:31:06] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:31:17] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:32:08] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:32:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:32:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 02:33:43] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:34:14] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 02:38:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:42:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:43:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:44:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:44:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:45:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:46:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:47:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 02:49:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:12:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:14:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:14:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:15:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:16:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:16:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:16:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:16:39] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:19:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:20:44] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:20:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:22:06] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 03:22:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 03:24:55] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 03:29:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:31:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:42:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:43:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:43:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:43:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:44:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:46:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:46:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:47:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 03:49:55] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 04:01:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:01:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:03:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:07:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:07:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:07:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:08:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:08:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:13:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:25:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:26:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:30:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 04:31:32] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 04:33:42] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 04:34:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 04:39:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:46:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:51:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:52:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:52:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:52:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:52:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:53:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 04:56:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:16:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:25:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:26:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:28:53] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 05:29:57] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 05:30:27] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 05:30:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 05:32:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:32:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:33:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:33:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:33:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:33:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:33:34] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:38:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:42:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:44:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:44:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:48:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:51:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:51:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:54:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 05:59:31] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 06:00:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:02:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:02:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:02:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:02:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:03:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:04:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:06:44] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:07:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:08:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:14:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:14:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:15:51] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 06:16:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 06:17:31] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 06:20:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:21:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:26:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:28:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:31:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:43:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:43:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:45:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:46:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:48:44] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:48:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:49:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:51:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 06:54:29] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 06:54:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:55:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:57:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 06:57:34] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:00:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:03:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:04:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:04:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:04:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:05:07] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:26:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:26:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:27:25] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): SSL: Handshake timed out  
[2026-09-17 07:27:55] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:28:25] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:30:40] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:31:17] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:31:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:31:47] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:32:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:38:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:40:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:41:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:41:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:41:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:42:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:42:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:44:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:46:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:47:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:51:09] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:51:39] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:51:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 07:53:33] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:53:38] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:54:03] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:54:03] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:54:40] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:55:10] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 07:56:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:56:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:56:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:56:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 07:58:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:05:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:12:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:14:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:14:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:15:35] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 08:15:45] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 08:15:45] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 08:15:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",43,"opening_stock","opening_stock"]} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2808300.28400000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 08:15:45] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 08:15:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",43]} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"4707610.28240000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 08:15:45] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 08:15:45] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 08:15:45] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 08:15:45] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 08:15:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",43,"opening_stock","opening_stock"]} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"5083230.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 08:15:45] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 08:15:45] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 08:15:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",43]} 
[2026-09-17 08:15:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"7628282.50000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 08:20:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:25:45] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 08:26:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:27:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:27:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:28:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:31:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:32:37] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:35:55] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 08:36:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:36:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:40:05] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:40:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:40:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:40:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:40:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:41:04] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:41:09] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:41:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:41:15] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:44:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:44:39] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:44:54] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:45:48] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:45:51] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 08:45:57] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:46:10] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:46:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:47:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:48:33] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 08:48:59] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:49:03] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 08:49:04] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:49:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 08:50:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:50:40] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:50:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:51:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:52:07] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:52:17] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:52:24] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:53:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:53:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:54:36] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 08:54:36] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 08:54:36] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 08:54:36] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 08:54:36] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"1174796.00000000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 08:54:36] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 08:54:36] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 08:54:36] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",45]} 
[2026-09-17 08:54:36] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"1174796.00000000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 08:54:37] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 08:54:58] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 08:55:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:55:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 08:55:37] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 08:56:00] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 08:56:23] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 08:56:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:56:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 08:59:45] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 08:59:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:00:02] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:02:11] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":410,"request_units":[{"actual_name":"Packet","unit_id":"342","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1625"}],"page_batch_id":"20260917_085959_7908"} 
[2026-09-17 09:02:11] live.INFO: === saveProductNewUnitRelationships START === {"product_id":410,"product_name":"Golden Drop Vegetable Oil 5l"} 
[2026-09-17 09:02:11] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"342","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1625"}],"count":1} 
[2026-09-17 09:02:11] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"342","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1625"}} 
[2026-09-17 09:02:11] live.INFO: Unit found by ID {"unit_id":342,"actual_name":"Packet"} 
[2026-09-17 09:02:11] live.INFO: Unit lookup result {"found":"yes","unit_id":342,"method":"by_id"} 
[2026-09-17 09:02:11] live.INFO: Updating existing unit {"unit_id":342} 
[2026-09-17 09:02:11] live.INFO: Updated unit_price {"new_price":1625.0} 
[2026-09-17 09:02:11] live.INFO: Unit updated successfully  
[2026-09-17 09:02:11] live.INFO: Setting as BASE unit {"unit_id":342} 
[2026-09-17 09:02:11] live.INFO: Base unit saved {"base_unit_id":342} 
[2026-09-17 09:02:11] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":342} 
[2026-09-17 09:02:11] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:02:11] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:02:11] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:02:12] live.INFO: OpeningStockController::add - Location Data {"product_id":"410","business_id":45,"locations":{"Illuminate\\Support\\Collection":{"41":"TAF LTD (BL0001)"}},"available_locations":[41]} 
[2026-09-17 09:02:12] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"410","business_id":45,"has_serial_numbers":{"41":false},"total_locations_with_serial":0} 
[2026-09-17 09:02:14] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:02:26] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:02:30] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:02:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:03:54] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":411,"request_units":[{"actual_name":"Packet","unit_id":"344","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1089"}],"page_batch_id":"20260917_090228_0200"} 
[2026-09-17 09:03:54] live.INFO: === saveProductNewUnitRelationships START === {"product_id":411,"product_name":"Golden Drop Vegetable Oil 3L"} 
[2026-09-17 09:03:54] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"344","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1089"}],"count":1} 
[2026-09-17 09:03:54] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"344","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"1089"}} 
[2026-09-17 09:03:54] live.INFO: Unit found by ID {"unit_id":344,"actual_name":"Packet"} 
[2026-09-17 09:03:54] live.INFO: Unit lookup result {"found":"yes","unit_id":344,"method":"by_id"} 
[2026-09-17 09:03:54] live.INFO: Updating existing unit {"unit_id":344} 
[2026-09-17 09:03:54] live.INFO: Updated unit_price {"new_price":1089.0} 
[2026-09-17 09:03:54] live.INFO: Unit updated successfully  
[2026-09-17 09:03:54] live.INFO: Setting as BASE unit {"unit_id":344} 
[2026-09-17 09:03:54] live.INFO: Base unit saved {"base_unit_id":344} 
[2026-09-17 09:03:54] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":344} 
[2026-09-17 09:03:54] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:03:54] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:03:54] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:03:55] live.INFO: OpeningStockController::add - Location Data {"product_id":"411","business_id":45,"locations":{"Illuminate\\Support\\Collection":{"41":"TAF LTD (BL0001)"}},"available_locations":[41]} 
[2026-09-17 09:03:55] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"411","business_id":45,"has_serial_numbers":{"41":false},"total_locations_with_serial":0} 
[2026-09-17 09:03:57] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:04:06] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:04:09] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:05:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:05:27] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":412,"request_units":[{"actual_name":"Packet","unit_id":"345","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"575"}],"page_batch_id":"20260917_090407_4377"} 
[2026-09-17 09:05:27] live.INFO: === saveProductNewUnitRelationships START === {"product_id":412,"product_name":"Dr Chia Seeds 300g"} 
[2026-09-17 09:05:27] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"345","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"575"}],"count":1} 
[2026-09-17 09:05:27] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"345","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"575"}} 
[2026-09-17 09:05:27] live.INFO: Unit found by ID {"unit_id":345,"actual_name":"Packet"} 
[2026-09-17 09:05:27] live.INFO: Unit lookup result {"found":"yes","unit_id":345,"method":"by_id"} 
[2026-09-17 09:05:27] live.INFO: Updating existing unit {"unit_id":345} 
[2026-09-17 09:05:27] live.INFO: Updated unit_price {"new_price":575.0} 
[2026-09-17 09:05:27] live.INFO: Unit updated successfully  
[2026-09-17 09:05:27] live.INFO: Setting as BASE unit {"unit_id":345} 
[2026-09-17 09:05:27] live.INFO: Base unit saved {"base_unit_id":345} 
[2026-09-17 09:05:27] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":345} 
[2026-09-17 09:05:27] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:05:27] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:05:27] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:05:27] live.INFO: OpeningStockController::add - Location Data {"product_id":"412","business_id":45,"locations":{"Illuminate\\Support\\Collection":{"41":"TAF LTD (BL0001)"}},"available_locations":[41]} 
[2026-09-17 09:05:27] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"412","business_id":45,"has_serial_numbers":{"41":false},"total_locations_with_serial":0} 
[2026-09-17 09:05:29] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:05:39] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:05:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:05:43] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:06:00] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:07:33] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":413,"request_units":[{"actual_name":"Packet","unit_id":"346","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"699"}],"page_batch_id":"20260917_090540_8274"} 
[2026-09-17 09:07:33] live.INFO: === saveProductNewUnitRelationships START === {"product_id":413,"product_name":"Naturalli Chia Seeds 300g"} 
[2026-09-17 09:07:33] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"346","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"699"}],"count":1} 
[2026-09-17 09:07:33] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"346","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"699"}} 
[2026-09-17 09:07:33] live.INFO: Unit found by ID {"unit_id":346,"actual_name":"Packet"} 
[2026-09-17 09:07:33] live.INFO: Unit lookup result {"found":"yes","unit_id":346,"method":"by_id"} 
[2026-09-17 09:07:33] live.INFO: Updating existing unit {"unit_id":346} 
[2026-09-17 09:07:33] live.INFO: Updated unit_price {"new_price":699.0} 
[2026-09-17 09:07:33] live.INFO: Unit updated successfully  
[2026-09-17 09:07:33] live.INFO: Setting as BASE unit {"unit_id":346} 
[2026-09-17 09:07:33] live.INFO: Base unit saved {"base_unit_id":346} 
[2026-09-17 09:07:33] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":346} 
[2026-09-17 09:07:33] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:07:33] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:07:33] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:07:34] live.INFO: OpeningStockController::add - Location Data {"product_id":"413","business_id":45,"locations":{"Illuminate\\Support\\Collection":{"41":"TAF LTD (BL0001)"}},"available_locations":[41]} 
[2026-09-17 09:07:34] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"413","business_id":45,"has_serial_numbers":{"41":false},"total_locations_with_serial":0} 
[2026-09-17 09:07:36] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:07:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:07:49] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:07:53] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:07:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:08:04] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:08:11] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:08:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:08:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:08:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:08:31] live.INFO: === saveProductUnitRelationships START === {"product_id":392,"product_name":"1 kg White Sugar (Economy"} 
[2026-09-17 09:08:31] live.INFO: Units data received {"units_data":[{"actual_name":"323","unit_id":"323","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"0"}],"count":1} 
[2026-09-17 09:08:31] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"323","unit_id":"323","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"0"}} 
[2026-09-17 09:08:31] live.INFO: Unit found by ID {"unit_id":323,"actual_name":"Packet"} 
[2026-09-17 09:08:31] live.WARNING: Skipping actual_name update - value looks like an ID {"actual_name":"323","unit_id":323} 
[2026-09-17 09:08:31] live.INFO: Setting as BASE unit {"unit_id":323} 
[2026-09-17 09:08:31] live.INFO: Unit saved {"unit_id":323,"unit_name":"Packet","is_base":true} 
[2026-09-17 09:08:31] live.INFO: First pass complete {"created_units_count":1,"unit_ids_to_keep":[323],"base_unit_id":323} 
[2026-09-17 09:08:31] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:08:31] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:08:31] live.INFO: === Cleaning up unused units === {"unit_ids_to_keep":[323],"base_unit_id":323,"page_batch_id":"20260916_104213_8330"} 
[2026-09-17 09:08:31] live.INFO: Units to delete {"count":0,"unit_ids":[]} 
[2026-09-17 09:08:31] live.INFO: === saveProductUnitRelationships END ===  
[2026-09-17 09:08:31] live.INFO: OpeningStockController::add - Location Data {"product_id":"392","business_id":45,"locations":{"Illuminate\\Support\\Collection":{"41":"TAF LTD (BL0001)"}},"available_locations":[41]} 
[2026-09-17 09:08:31] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"392","business_id":45,"has_serial_numbers":{"41":false},"total_locations_with_serial":0} 
[2026-09-17 09:08:33] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:08:42] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:08:48] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:08:49] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:09:00] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:09:45] live.INFO: filterProduct method called {"business_id":45,"search_term":"ch","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:09:45] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:09:45] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:09:45] live.DEBUG: Applying search filters {"search_term":"ch","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:09:45] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:09:45] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:09:45] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"ch"} 
[2026-09-17 09:09:47] live.INFO: filterProduct method called {"business_id":45,"search_term":"chi","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:09:47] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:09:47] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:09:47] live.DEBUG: Applying search filters {"search_term":"chi","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:09:47] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:09:47] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:09:47] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"chi"} 
[2026-09-17 09:09:48] live.INFO: Product Row Debug - RELOADED {"product_id":413,"product_name":"Naturalli Chia Seeds 300g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":699.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"346":{"unit_id":346,"unit_name":"Packet","unit_price":699.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:09:55] live.INFO: filterProduct method called {"business_id":45,"search_term":"am","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:09:55] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:09:55] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:09:55] live.DEBUG: Applying search filters {"search_term":"am","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:09:55] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:09:55] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:09:55] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":45,"search_term":"am"} 
[2026-09-17 09:09:55] live.INFO: Product Row Debug - RELOADED {"product_id":391,"product_name":"Amaize Premium Maize Meal 2Kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":210.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"322":{"unit_id":322,"unit_name":"Packet","unit_price":210.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:10:03] live.INFO: filterProduct method called {"business_id":45,"search_term":"golde","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:10:03] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:10:03] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 09:10:03] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 09:10:03] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 09:10:03] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 09:10:03] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:10:03] live.DEBUG: Applying search filters {"search_term":"golde","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 09:10:03] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 09:10:03] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:10:03] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 09:10:03] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"golde"} 
[2026-09-17 09:10:05] live.INFO: Product Row Debug - RELOADED {"product_id":410,"product_name":"Golden Drop Vegetable Oil 5l","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1625.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"342":{"unit_id":342,"unit_name":"Packet","unit_price":1625.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:10:07] live.INFO: Digitax upload skipped: No tax number provided {"contact_id":909,"contact_name":"Mama Mboga","contact_type":"supplier"} 
[2026-09-17 09:10:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:10:17] live.INFO: filterProduct method called {"business_id":45,"search_term":"ajab","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:10:17] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:10:17] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:10:17] live.DEBUG: Applying search filters {"search_term":"ajab","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:10:17] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:10:17] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:10:17] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"ajab"} 
[2026-09-17 09:10:19] live.INFO: Product Row Debug - RELOADED {"product_id":371,"product_name":"Ajab Self Raising White Wheat Flour 1KG","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":210.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"302":{"unit_id":302,"unit_name":"Packet","unit_price":210.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:10:24] live.INFO: filterProduct method called {"business_id":45,"search_term":"ajab","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:10:24] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:10:24] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:10:24] live.DEBUG: Applying search filters {"search_term":"ajab","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:10:24] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:10:24] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:10:24] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"ajab"} 
[2026-09-17 09:10:26] live.INFO: Product Row Debug - RELOADED {"product_id":373,"product_name":"Ajab Maize Flour 2kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":196.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"304":{"unit_id":304,"unit_name":"Packet","unit_price":196.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:10:31] live.INFO: filterProduct method called {"business_id":45,"search_term":"sta","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:10:31] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:10:31] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:10:31] live.DEBUG: Applying search filters {"search_term":"sta","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:10:31] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:10:31] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:10:31] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"sta"} 
[2026-09-17 09:10:36] live.INFO: Product Row Debug - RELOADED {"product_id":385,"product_name":"Sta Soft Aromatherapy Passion 2l","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":780.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"316":{"unit_id":316,"unit_name":"Packet","unit_price":780.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:10:36] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:10:51] live.INFO: Digitax upload skipped: No tax number provided {"contact_id":910,"contact_name":"Mama Fua","contact_type":"supplier"} 
[2026-09-17 09:11:01] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:06] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:11:23] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:36] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:11:38] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:44] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:53] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:11:58] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:12:06] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:13:16] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:13:19] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":414,"request_units":[{"actual_name":"Packet","unit_id":"347","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"page_batch_id":"20260917_091156_0056"} 
[2026-09-17 09:13:19] live.INFO: === saveProductNewUnitRelationships START === {"product_id":414,"product_name":"Milk 500l"} 
[2026-09-17 09:13:19] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"347","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"count":1} 
[2026-09-17 09:13:19] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"347","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}} 
[2026-09-17 09:13:19] live.INFO: Unit found by ID {"unit_id":347,"actual_name":"Packet"} 
[2026-09-17 09:13:19] live.INFO: Unit lookup result {"found":"yes","unit_id":347,"method":"by_id"} 
[2026-09-17 09:13:19] live.INFO: Updating existing unit {"unit_id":347} 
[2026-09-17 09:13:19] live.INFO: Updated unit_price {"new_price":60.0} 
[2026-09-17 09:13:19] live.INFO: Unit updated successfully  
[2026-09-17 09:13:19] live.INFO: Setting as BASE unit {"unit_id":347} 
[2026-09-17 09:13:19] live.INFO: Base unit saved {"base_unit_id":347} 
[2026-09-17 09:13:19] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":347} 
[2026-09-17 09:13:19] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:13:19] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:13:19] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:13:19] live.INFO: OpeningStockController::add - Location Data {"product_id":"414","business_id":44,"locations":{"Illuminate\\Support\\Collection":{"40":"BEM LTD (BL0001)"}},"available_locations":[40]} 
[2026-09-17 09:13:19] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"414","business_id":44,"has_serial_numbers":{"40":false},"total_locations_with_serial":0} 
[2026-09-17 09:13:21] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:13:36] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:13:46] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 09:14:14] live.INFO: filterProduct method called {"business_id":45,"search_term":"pri","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:14:14] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:14:14] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:14:14] live.DEBUG: Applying search filters {"search_term":"pri","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:14:14] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:14:14] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:14:14] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"pri"} 
[2026-09-17 09:14:15] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:14:15] live.INFO: filterProduct method called {"business_id":45,"search_term":"prin","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 09:14:15] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 09:14:15] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 09:14:15] live.DEBUG: Applying search filters {"search_term":"prin","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 09:14:15] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 09:14:15] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 09:14:15] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"prin"} 
[2026-09-17 09:14:17] live.INFO: Product Row Debug - RELOADED {"product_id":409,"product_name":"themal printer 80mm","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"341":{"unit_id":341,"unit_name":"Packet","unit_price":1000.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 09:14:53] live.INFO: Credit Limit Check Started {"contact_id":"903","status":"final","final_total":"5419.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 09:14:53] live.DEBUG: Payment Calculation {"final_total":5419.0,"curr_total_payment":5419.0,"is_credit_sale":false,"payment_count":2} 
[2026-09-17 09:14:53] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":5419.0,"curr_total_payment":5419.0} 
[2026-09-17 09:14:53] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 09:14:53] live.INFO: is_mpesa_sale value: true  
[2026-09-17 09:14:53] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1982} 
[2026-09-17 09:14:53] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"custom_pay_1","mpesa_transaction_id":null,"transaction_id":1982} 
[2026-09-17 09:14:53] live.INFO: Journal Entry Case: PARTIAL PAYMENT {"transaction_id":1982,"final_total":5419.0,"amount_paid":3000.0,"balance_due":2419.0} 
[2026-09-17 09:14:53] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1982,"entries":[{"transaction_id":1982,"created_by_id":364,"transaction_number":"TRX-6aab855d87d4a7.78624076","payment_detail_id":1378,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53","chart_of_account_id":15471,"debit":null,"credit":5419.0},{"transaction_id":1982,"created_by_id":364,"transaction_number":"TRX-6aab855d87d4a7.78624076","payment_detail_id":1378,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53","chart_of_account_id":15475,"debit":3000.0,"credit":null},{"transaction_id":1982,"created_by_id":364,"transaction_number":"TRX-6aab855d87d4a7.78624076","payment_detail_id":1378,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53","chart_of_account_id":15470,"debit":2419.0,"credit":null}]} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1256,"purchase_line_id":1658,"quantity":2.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":4219.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1257,"purchase_line_id":1629,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":4039.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1258,"purchase_line_id":1655,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":3139.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1259,"purchase_line_id":1610,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2959.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1260,"purchase_line_id":1612,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2803.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1261,"purchase_line_id":1623,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2123.0} 
[2026-09-17 09:14:53] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1262,"purchase_line_id":1649,"quantity":1.0,"created_at":"2026-09-17 09:14:53","updated_at":"2026-09-17 09:14:53"}]} 
[2026-09-17 09:14:53] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 09:14:53] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1143.0} 
[2026-09-17 09:14:53] live.ERROR: ETIMS settings not found for business ID: 45  
[2026-09-17 09:14:53] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1982  
[2026-09-17 09:15:25] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":415,"request_units":[{"actual_name":"Packet","unit_id":"349","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"page_batch_id":"20260917_091413_4046"} 
[2026-09-17 09:15:25] live.INFO: === saveProductNewUnitRelationships START === {"product_id":415,"product_name":"Milk 500l"} 
[2026-09-17 09:15:25] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"349","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"count":1} 
[2026-09-17 09:15:25] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"349","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}} 
[2026-09-17 09:15:25] live.INFO: Unit found by ID {"unit_id":349,"actual_name":"Packet"} 
[2026-09-17 09:15:25] live.INFO: Unit lookup result {"found":"yes","unit_id":349,"method":"by_id"} 
[2026-09-17 09:15:25] live.INFO: Updating existing unit {"unit_id":349} 
[2026-09-17 09:15:25] live.INFO: Updated unit_price {"new_price":60.0} 
[2026-09-17 09:15:25] live.INFO: Unit updated successfully  
[2026-09-17 09:15:25] live.INFO: Setting as BASE unit {"unit_id":349} 
[2026-09-17 09:15:25] live.INFO: Base unit saved {"base_unit_id":349} 
[2026-09-17 09:15:25] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":349} 
[2026-09-17 09:15:25] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:15:25] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:15:25] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:15:25] live.INFO: OpeningStockController::add - Location Data {"product_id":"415","business_id":44,"locations":{"Illuminate\\Support\\Collection":{"40":"BEM LTD (BL0001)"}},"available_locations":[40]} 
[2026-09-17 09:15:25] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"415","business_id":44,"has_serial_numbers":{"40":false},"total_locations_with_serial":0} 
[2026-09-17 09:15:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:15:27] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:15:39] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:15:50] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:15:51] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:15:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:15:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:15:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:16:06] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:16:14] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:16:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:16:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:18:08] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":416,"request_units":[{"actual_name":"Packet","unit_id":"350","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"page_batch_id":"20260917_091550_2612"} 
[2026-09-17 09:18:08] live.INFO: === saveProductNewUnitRelationships START === {"product_id":416,"product_name":"Milk 500l"} 
[2026-09-17 09:18:08] live.INFO: Units data received {"units_data":[{"actual_name":"Packet","unit_id":"350","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}],"count":1} 
[2026-09-17 09:18:08] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packet","unit_id":"350","short_name":"Pkt","relation_unit_id":null,"relation_qty":"1","price":"60"}} 
[2026-09-17 09:18:08] live.INFO: Unit found by ID {"unit_id":350,"actual_name":"Packet"} 
[2026-09-17 09:18:08] live.INFO: Unit lookup result {"found":"yes","unit_id":350,"method":"by_id"} 
[2026-09-17 09:18:08] live.INFO: Updating existing unit {"unit_id":350} 
[2026-09-17 09:18:08] live.INFO: Updated unit_price {"new_price":60.0} 
[2026-09-17 09:18:08] live.INFO: Unit updated successfully  
[2026-09-17 09:18:08] live.INFO: Setting as BASE unit {"unit_id":350} 
[2026-09-17 09:18:08] live.INFO: Base unit saved {"base_unit_id":350} 
[2026-09-17 09:18:08] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":350} 
[2026-09-17 09:18:08] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:18:08] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:18:08] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:18:09] live.INFO: OpeningStockController::add - Location Data {"product_id":"416","business_id":44,"locations":{"Illuminate\\Support\\Collection":{"40":"BEM LTD (BL0001)"}},"available_locations":[40]} 
[2026-09-17 09:18:09] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"416","business_id":44,"has_serial_numbers":{"40":false},"total_locations_with_serial":0} 
[2026-09-17 09:18:10] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:18:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:19:52] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:20:27] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:21:48] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:22:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:25:50] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:26:14] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:30:48] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 09:30:48] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 09:30:48] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 09:30:48] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 09:30:48] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"785790.00000000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 09:30:48] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 09:30:48] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 09:30:48] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",44]} 
[2026-09-17 09:30:48] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"785790.00000000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 09:30:50] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:31:56] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 09:31:56] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 09:31:56] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 09:31:56] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 09:31:56] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"785790.00000000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 09:31:56] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 09:31:56] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 09:31:56] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",44]} 
[2026-09-17 09:31:56] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"785790.00000000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 09:31:58] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:33:39] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 09:33:39] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 09:33:39] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 09:33:39] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 09:33:39] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2066260.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 09:33:39] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 09:33:39] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 09:33:39] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 09:33:39] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2436520.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 09:33:40] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:33:40] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 09:33:40] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 09:33:40] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 09:33:40] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 09:33:40] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 09:33:40] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2076720.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 09:33:40] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 09:33:40] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 09:33:40] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 09:33:40] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 09:33:40] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2092489.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 09:34:07] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:34:08] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:34:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:35:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:37:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:40:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:44:07] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:44:08] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:45:59] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:48:32] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2025-12-31","location_id":"39","is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 09:48:32] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 09:48:32] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 09:48:32] live.DEBUG: Applied location filter {"location_id":"39"} 
[2026-09-17 09:48:32] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31')) and `purchase`.`location_id` = ?","bindings":["purchase_order",43,"opening_stock","opening_stock","39"]} 
[2026-09-17 09:48:32] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2808300.28400000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 09:48:32] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2026-12-31","location_id":"39","is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 09:48:32] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 09:48:32] live.DEBUG: Applied location filter {"location_id":"39"} 
[2026-09-17 09:48:32] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31' and `purchase`.`location_id` = ?","bindings":["purchase_order",43,"39"]} 
[2026-09-17 09:48:32] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"4707610.28240000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 09:48:33] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2025-12-31","location_id":"39","is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 09:48:33] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 09:48:33] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 09:48:33] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 09:48:33] live.DEBUG: Applied location filter {"location_id":"39"} 
[2026-09-17 09:48:33] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31')) and `purchase`.`location_id` = ?","bindings":["purchase_order",43,"opening_stock","opening_stock","39"]} 
[2026-09-17 09:48:33] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"5083230.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 09:48:33] live.INFO: === getOpeningClosingStock START === {"business_id":43,"date":"2026-12-31","location_id":"39","is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 09:48:33] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 09:48:33] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 09:48:33] live.DEBUG: Applied location filter {"location_id":"39"} 
[2026-09-17 09:48:33] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31' and `purchase`.`location_id` = ?","bindings":["purchase_order",43,"39"]} 
[2026-09-17 09:48:33] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"7628282.50000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 09:49:44] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:50:01] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:50:29] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:51:12] live.INFO: Digitax upload skipped: No tax number provided {"contact_id":911,"contact_name":"Jireh","contact_type":"customer"} 
[2026-09-17 09:52:04] live.WARNING: Digitax upload failed: ETIMS settings not configured {"business_id":45,"contact_id":912} 
[2026-09-17 09:52:39] live.WARNING: Digitax upload failed: ETIMS settings not configured {"business_id":45,"contact_id":913} 
[2026-09-17 09:53:16] live.INFO: Digitax upload skipped: No tax number provided {"contact_id":914,"contact_name":"Yehovah","contact_type":"customer"} 
[2026-09-17 09:53:24] live.INFO: === About to call saveProductNewUnitRelationships === {"product_id":417,"request_units":[{"actual_name":"Packets","unit_id":"351","short_name":"pkt","relation_unit_id":null,"relation_qty":"1","price":"120"}],"page_batch_id":"20260917_093404_5095"} 
[2026-09-17 09:53:24] live.INFO: === saveProductNewUnitRelationships START === {"product_id":417,"product_name":"Yoghurt 500ml"} 
[2026-09-17 09:53:24] live.INFO: Units data received {"units_data":[{"actual_name":"Packets","unit_id":"351","short_name":"pkt","relation_unit_id":null,"relation_qty":"1","price":"120"}],"count":1} 
[2026-09-17 09:53:24] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"Packets","unit_id":"351","short_name":"pkt","relation_unit_id":null,"relation_qty":"1","price":"120"}} 
[2026-09-17 09:53:24] live.INFO: Unit found by ID {"unit_id":351,"actual_name":"Packets"} 
[2026-09-17 09:53:24] live.INFO: Unit lookup result {"found":"yes","unit_id":351,"method":"by_id"} 
[2026-09-17 09:53:24] live.INFO: Updating existing unit {"unit_id":351} 
[2026-09-17 09:53:24] live.INFO: Updated unit_price {"new_price":120.0} 
[2026-09-17 09:53:24] live.INFO: Unit updated successfully  
[2026-09-17 09:53:24] live.INFO: Setting as BASE unit {"unit_id":351} 
[2026-09-17 09:53:24] live.INFO: Base unit saved {"base_unit_id":351} 
[2026-09-17 09:53:24] live.INFO: First pass complete {"created_units_count":1,"base_unit_id":351} 
[2026-09-17 09:53:24] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 09:53:24] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 09:53:24] live.INFO: === saveProductNewUnitRelationships END ===  
[2026-09-17 09:53:24] live.INFO: OpeningStockController::add - Location Data {"product_id":"417","business_id":44,"locations":{"Illuminate\\Support\\Collection":{"40":"BEM LTD (BL0001)"}},"available_locations":[40]} 
[2026-09-17 09:53:24] live.INFO: OpeningStockController::add - Serial Numbers Check {"product_id":"417","business_id":44,"has_serial_numbers":{"40":false},"total_locations_with_serial":0} 
[2026-09-17 09:53:45] live.WARNING: Digitax upload failed: ETIMS settings not configured {"business_id":45,"contact_id":915} 
[2026-09-17 09:54:11] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:54:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:54:22] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:54:31] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:54:42] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:54:58] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:55:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:55:33] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:55:38] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 09:55:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 09:57:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 09:57:43] live.INFO: Purchases array from request {"purchases":[{"product_id":"415","variation_id":"420","quantity":"10","product_unit_id":"349","sub_unit_id":"349","pp_without_discount":"50.00","discount_percent":"0.00","purchase_price":"50.00","purchase_line_tax_id":null,"item_tax":"0.00","purchase_price_inc_tax":"50.00","profit_percent":"20.00","default_sell_price":"60.00","imei_numbers":"[]","imei_count":"0"}],"purchases_json":"[{\"product_id\":\"415\",\"variation_id\":\"420\",\"quantity\":\"10\",\"product_unit_id\":\"349\",\"sub_unit_id\":\"349\",\"pp_without_discount\":\"50.00\",\"discount_percent\":\"0.00\",\"purchase_price\":\"50.00\",\"purchase_line_tax_id\":null,\"item_tax\":\"0.00\",\"purchase_price_inc_tax\":\"50.00\",\"profit_percent\":\"20.00\",\"default_sell_price\":\"60.00\",\"imei_numbers\":\"[]\",\"imei_count\":\"0\"}]"} 
[2026-09-17 09:57:43] live.ERROR: ETIMS settings not found for business ID: 44  
[2026-09-17 09:57:43] live.INFO: Purchase lines created {"transaction_id":1986,"purchase_lines_count":1,"purchase_lines":[{"id":1663,"transaction_id":1986,"product_id":415,"variation_id":420,"quantity":10.0,"secondary_unit_quantity":"0.0000","pp_without_discount":"50.0000","discount_percent":"0.00","purchase_price":"50.0000","purchase_price_inc_tax":"50.0000","item_tax":"0.0000","tax_id":null,"purchase_requisition_line_id":null,"purchase_order_line_id":null,"quantity_sold":"0.0000","quantity_adjusted":"0.0000","quantity_returned":"0.0000","po_quantity_purchased":"0.0000","mfg_quantity_used":"0.0000","mfg_date":null,"exp_date":null,"lot_number":null,"sub_unit_id":null,"created_at":"2026-09-17T06:57:43.000000Z","updated_at":"2026-09-17T06:57:43.000000Z"}]} 
[2026-09-17 09:57:43] live.INFO: Processing purchase row - 0 {"row_index":0,"product_id":"415","variation_id":"420","quantity":"10","has_imei":true,"imei_raw":"[]","purchase_data_keys":["product_id","variation_id","quantity","product_unit_id","sub_unit_id","pp_without_discount","discount_percent","purchase_price","purchase_line_tax_id","item_tax","purchase_price_inc_tax","profit_percent","default_sell_price","imei_numbers","imei_count"]} 
[2026-09-17 09:57:43] live.INFO: IMEI Data - Parsed for row 0 {"row_index":0,"imei_count":0,"imei_data":[],"imei_json":"[]"} 
[2026-09-17 09:57:43] live.INFO: IMEI data is empty or invalid for row 0 {"imeiData":[]} 
[2026-09-17 09:57:43] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":false,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1986} 
[2026-09-17 09:57:43] live.INFO: Purchase created successfully with IMEI data {"transaction_id":1986,"ref_no":"PO2026/0002","final_total":500.0} 
[2026-09-17 09:57:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:58:03] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:58:43] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:59:36] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:59:55] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 09:59:59] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:00:54] live.INFO: Purchases array from request {"purchases":[{"product_id":"415","variation_id":"420","quantity":"10","product_unit_id":"349","sub_unit_id":"349","pp_without_discount":"50.00","discount_percent":"0.00","purchase_price":"50.00","purchase_line_tax_id":null,"item_tax":"0.00","purchase_price_inc_tax":"50.00","profit_percent":"20.00","default_sell_price":"60.00","imei_numbers":"[]","imei_count":"0"}],"purchases_json":"[{\"product_id\":\"415\",\"variation_id\":\"420\",\"quantity\":\"10\",\"product_unit_id\":\"349\",\"sub_unit_id\":\"349\",\"pp_without_discount\":\"50.00\",\"discount_percent\":\"0.00\",\"purchase_price\":\"50.00\",\"purchase_line_tax_id\":null,\"item_tax\":\"0.00\",\"purchase_price_inc_tax\":\"50.00\",\"profit_percent\":\"20.00\",\"default_sell_price\":\"60.00\",\"imei_numbers\":\"[]\",\"imei_count\":\"0\"}]"} 
[2026-09-17 10:00:54] live.ERROR: ETIMS settings not found for business ID: 44  
[2026-09-17 10:00:54] live.INFO: Purchase lines created {"transaction_id":1987,"purchase_lines_count":1,"purchase_lines":[{"id":1664,"transaction_id":1987,"product_id":415,"variation_id":420,"quantity":10.0,"secondary_unit_quantity":"0.0000","pp_without_discount":"50.0000","discount_percent":"0.00","purchase_price":"50.0000","purchase_price_inc_tax":"50.0000","item_tax":"0.0000","tax_id":null,"purchase_requisition_line_id":null,"purchase_order_line_id":null,"quantity_sold":"0.0000","quantity_adjusted":"0.0000","quantity_returned":"0.0000","po_quantity_purchased":"0.0000","mfg_quantity_used":"0.0000","mfg_date":null,"exp_date":null,"lot_number":null,"sub_unit_id":null,"created_at":"2026-09-17T07:00:54.000000Z","updated_at":"2026-09-17T07:00:54.000000Z"}]} 
[2026-09-17 10:00:54] live.INFO: Processing purchase row - 0 {"row_index":0,"product_id":"415","variation_id":"420","quantity":"10","has_imei":true,"imei_raw":"[]","purchase_data_keys":["product_id","variation_id","quantity","product_unit_id","sub_unit_id","pp_without_discount","discount_percent","purchase_price","purchase_line_tax_id","item_tax","purchase_price_inc_tax","profit_percent","default_sell_price","imei_numbers","imei_count"]} 
[2026-09-17 10:00:54] live.INFO: IMEI Data - Parsed for row 0 {"row_index":0,"imei_count":0,"imei_data":[],"imei_json":"[]"} 
[2026-09-17 10:00:54] live.INFO: IMEI data is empty or invalid for row 0 {"imeiData":[]} 
[2026-09-17 10:00:54] live.INFO: Purchase created successfully with IMEI data {"transaction_id":1987,"ref_no":"PO2026/0003","final_total":500.0} 
[2026-09-17 10:00:57] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:02:33] live.INFO: filterProduct method called {"business_id":44,"search_term":"milk","location_id":"40","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:02:33] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:02:33] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:02:33] live.DEBUG: Applying search filters {"search_term":"milk","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:02:33] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:02:33] live.DEBUG: Applying location filter {"location_id":"40"} 
[2026-09-17 10:02:33] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":44,"search_term":"milk"} 
[2026-09-17 10:02:48] live.INFO: Product Row Debug - RELOADED {"product_id":415,"product_name":"Milk 500l","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":60.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"349":{"unit_id":349,"unit_name":"Packet","unit_price":60.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 10:03:20] live.INFO: Credit Limit Check Started {"contact_id":"886","status":"final","final_total":"1200.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:03:20] live.DEBUG: Payment Calculation {"final_total":1200.0,"curr_total_payment":1200.0,"is_credit_sale":false,"payment_count":2} 
[2026-09-17 10:03:20] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":1200.0,"curr_total_payment":1200.0} 
[2026-09-17 10:03:20] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 10:03:20] live.INFO: is_mpesa_sale value: true  
[2026-09-17 10:03:20] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1988} 
[2026-09-17 10:03:20] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"card","mpesa_transaction_id":null,"transaction_id":1988} 
[2026-09-17 10:03:20] live.INFO: Journal Entry Case: PARTIAL PAYMENT {"transaction_id":1988,"final_total":1200.0,"amount_paid":1000.0,"balance_due":200.0} 
[2026-09-17 10:03:20] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1988,"entries":[{"transaction_id":1988,"created_by_id":363,"transaction_number":"TRX-6aab90b8c0c274.68055081","payment_detail_id":1380,"location_id":"40","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:03:20","updated_at":"2026-09-17 10:03:20","chart_of_account_id":15456,"debit":null,"credit":1200.0},{"transaction_id":1988,"created_by_id":363,"transaction_number":"TRX-6aab90b8c0c274.68055081","payment_detail_id":1380,"location_id":"40","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:03:20","updated_at":"2026-09-17 10:03:20","chart_of_account_id":15460,"debit":1000.0,"credit":null},{"transaction_id":1988,"created_by_id":363,"transaction_number":"TRX-6aab90b8c0c274.68055081","payment_detail_id":1380,"location_id":"40","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:03:20","updated_at":"2026-09-17 10:03:20","chart_of_account_id":15455,"debit":200.0,"credit":null}]} 
[2026-09-17 10:03:20] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1263,"purchase_line_id":1660,"quantity":20.0,"created_at":"2026-09-17 10:03:20","updated_at":"2026-09-17 10:03:20"}]} 
[2026-09-17 10:03:20] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:03:20] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":200.0} 
[2026-09-17 10:03:20] live.ERROR: ETIMS settings not found for business ID: 44  
[2026-09-17 10:03:20] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1988  
[2026-09-17 10:03:41] live.INFO: filterProduct method called {"business_id":44,"search_term":"milk","location_id":"40","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:03:41] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:03:41] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:03:41] live.DEBUG: Applying search filters {"search_term":"milk","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:03:41] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:03:41] live.DEBUG: Applying location filter {"location_id":"40"} 
[2026-09-17 10:03:41] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":44,"search_term":"milk"} 
[2026-09-17 10:05:39] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:05:58] live.INFO: filterProduct method called {"business_id":44,"search_term":"you","location_id":"40","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:05:58] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:05:58] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:05:58] live.DEBUG: Applying search filters {"search_term":"you","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:05:58] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:05:58] live.DEBUG: Applying location filter {"location_id":"40"} 
[2026-09-17 10:05:58] live.INFO: filterProduct completed successfully {"result_count":0,"business_id":44,"search_term":"you"} 
[2026-09-17 10:05:59] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 10:06:01] live.INFO: filterProduct method called {"business_id":44,"search_term":"ghurt","location_id":"40","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:06:01] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:06:01] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:06:01] live.DEBUG: Serial numbers filtered by location {"location_id":"40"} 
[2026-09-17 10:06:01] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:06:01] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:06:01] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:06:01] live.DEBUG: Applying search filters {"search_term":"ghurt","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:06:01] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:06:01] live.DEBUG: Applying location filter {"location_id":"40"} 
[2026-09-17 10:06:01] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:06:01] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":44,"search_term":"ghurt"} 
[2026-09-17 10:06:01] live.INFO: Product Row Debug - RELOADED {"product_id":417,"product_name":"Yoghurt 500ml","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":120.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"351":{"unit_id":351,"unit_name":"Packets","unit_price":120.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 10:06:16] live.INFO: Credit Limit Check Started {"contact_id":"886","status":"final","final_total":"600.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:06:16] live.DEBUG: Payment Calculation {"final_total":600.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:06:16] live.DEBUG: Contact Credit Limit Retrieved {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000"} 
[2026-09-17 10:06:16] live.INFO: Credit Limit Check - Current Transaction Only {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000","final_total":600.0,"curr_total_payment":0.0,"current_due":600.0,"will_exceed_limit":true} 
[2026-09-17 10:06:16] live.WARNING: Credit Limit Exceeded for Current Transaction {"contact_id":"886","contact_name":"Walk-In Customer","current_due":600.0,"credit_limit":"0.0000","exceeded_by":600.0} 
[2026-09-17 10:06:22] live.INFO: Credit Limit Check Started {"contact_id":"886","status":"final","final_total":"600.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:06:22] live.DEBUG: Payment Calculation {"final_total":600.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:06:22] live.DEBUG: Contact Credit Limit Retrieved {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000"} 
[2026-09-17 10:06:22] live.INFO: Credit Limit Check - Current Transaction Only {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000","final_total":600.0,"curr_total_payment":0.0,"current_due":600.0,"will_exceed_limit":true} 
[2026-09-17 10:06:22] live.WARNING: Credit Limit Exceeded for Current Transaction {"contact_id":"886","contact_name":"Walk-In Customer","current_due":600.0,"credit_limit":"0.0000","exceeded_by":600.0} 
[2026-09-17 10:06:27] live.INFO: Credit Limit Check Started {"contact_id":"886","status":"final","final_total":"600.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:06:27] live.DEBUG: Payment Calculation {"final_total":600.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:06:27] live.DEBUG: Contact Credit Limit Retrieved {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000"} 
[2026-09-17 10:06:27] live.INFO: Credit Limit Check - Current Transaction Only {"contact_id":"886","contact_name":"Walk-In Customer","credit_limit":"0.0000","final_total":600.0,"curr_total_payment":0.0,"current_due":600.0,"will_exceed_limit":true} 
[2026-09-17 10:06:27] live.WARNING: Credit Limit Exceeded for Current Transaction {"contact_id":"886","contact_name":"Walk-In Customer","current_due":600.0,"credit_limit":"0.0000","exceeded_by":600.0} 
[2026-09-17 10:06:41] live.INFO: filterProduct method called {"business_id":44,"search_term":"yo","location_id":"40","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:06:41] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:06:41] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:06:41] live.DEBUG: Applying search filters {"search_term":"yo","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:06:41] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:06:41] live.DEBUG: Applying location filter {"location_id":"40"} 
[2026-09-17 10:06:41] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":44,"search_term":"yo"} 
[2026-09-17 10:06:41] live.INFO: Product Row Debug - RELOADED {"product_id":417,"product_name":"Yoghurt 500ml","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":120.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"351":{"unit_id":351,"unit_name":"Packets","unit_price":120.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 10:06:49] live.INFO: Credit Limit Check Started {"contact_id":"886","status":"final","final_total":"600.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:06:49] live.DEBUG: Payment Calculation {"final_total":600.0,"curr_total_payment":600.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:06:49] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":600.0,"curr_total_payment":600.0} 
[2026-09-17 10:06:49] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 10:06:49] live.INFO: is_mpesa_sale value: true  
[2026-09-17 10:06:49] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1989} 
[2026-09-17 10:06:49] live.INFO: Journal Entry Case: FULL CASH PAYMENT {"transaction_id":1989,"final_total":600.0,"amount_paid":600.0,"balance_due":0} 
[2026-09-17 10:06:49] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1989,"entries":[{"transaction_id":1989,"created_by_id":363,"transaction_number":"TRX-6aab91897956e4.82592877","payment_detail_id":1381,"location_id":"40","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:06:49","updated_at":"2026-09-17 10:06:49","chart_of_account_id":15456,"debit":null,"credit":600.0},{"transaction_id":1989,"created_by_id":363,"transaction_number":"TRX-6aab91897956e4.82592877","payment_detail_id":1381,"location_id":"40","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:06:49","updated_at":"2026-09-17 10:06:49","chart_of_account_id":15460,"debit":600.0,"credit":null}]} 
[2026-09-17 10:06:49] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1264,"purchase_line_id":1662,"quantity":5.0,"created_at":"2026-09-17 10:06:49","updated_at":"2026-09-17 10:06:49"}]} 
[2026-09-17 10:06:49] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:06:49] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":125.0} 
[2026-09-17 10:06:49] live.ERROR: ETIMS settings not found for business ID: 44  
[2026-09-17 10:06:49] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1989  
[2026-09-17 10:06:52] live.INFO: Purchases array from request {"purchases":[{"product_id":"385","variation_id":"390","quantity":"1.00","product_unit_id":"316","sub_unit_id":"316","pp_without_discount":"680.00","discount_percent":"0.00","purchase_price":"680.00","purchase_line_tax_id":null,"item_tax":"0.00","purchase_price_inc_tax":"680.00","profit_percent":"14.71","default_sell_price":"780.00","imei_numbers":"[]","imei_count":"0"},{"product_id":"410","variation_id":"415","quantity":"1.00","product_unit_id":"342","sub_unit_id":"342","pp_without_discount":"900.00","discount_percent":"0.00","purchase_price":"900.00","purchase_line_tax_id":null,"item_tax":"0.00","purchase_price_inc_tax":"900.00","profit_percent":"80.56","default_sell_price":"1,625.00","imei_numbers":"[]","imei_count":"0"},{"product_id":"410","variation_id":"415","quantity":"1.00","product_unit_id":"342","sub_unit_id":"342","pp_without_discount":"900.00","discount_percent":"0.00","purchase_price":"900.00","purchase_line_tax_id":null,"item_tax":"0.00","purchase_price_inc_tax":"900.00","profit_percent":"80.56","default_sell_price":"1,625.00","imei_numbers":"[]","imei_count":"0"}],"purchases_json":"[{\"product_id\":\"385\",\"variation_id\":\"390\",\"quantity\":\"1.00\",\"product_unit_id\":\"316\",\"sub_unit_id\":\"316\",\"pp_without_discount\":\"680.00\",\"discount_percent\":\"0.00\",\"purchase_price\":\"680.00\",\"purchase_line_tax_id\":null,\"item_tax\":\"0.00\",\"purchase_price_inc_tax\":\"680.00\",\"profit_percent\":\"14.71\",\"default_sell_price\":\"780.00\",\"imei_numbers\":\"[]\",\"imei_count\":\"0\"},{\"product_id\":\"410\",\"variation_id\":\"415\",\"quantity\":\"1.00\",\"product_unit_id\":\"342\",\"sub_unit_id\":\"342\",\"pp_without_discount\":\"900.00\",\"discount_percent\":\"0.00\",\"purchase_price\":\"900.00\",\"purchase_line_tax_id\":null,\"item_tax\":\"0.00\",\"purchase_price_inc_tax\":\"900.00\",\"profit_percent\":\"80.56\",\"default_sell_price\":\"1,625.00\",\"imei_numbers\":\"[]\",\"imei_count\":\"0\"},{\"product_id\":\"410\",\"variation_id\":\"415\",\"quantity\":\"1.00\",\"product_unit_id\":\"342\",\"sub_unit_id\":\"342\",\"pp_without_discount\":\"900.00\",\"discount_percent\":\"0.00\",\"purchase_price\":\"900.00\",\"purchase_line_tax_id\":null,\"item_tax\":\"0.00\",\"purchase_price_inc_tax\":\"900.00\",\"profit_percent\":\"80.56\",\"default_sell_price\":\"1,625.00\",\"imei_numbers\":\"[]\",\"imei_count\":\"0\"}]"} 
[2026-09-17 10:06:52] live.ERROR: ETIMS settings not found for business ID: 45  
[2026-09-17 10:06:52] live.ERROR: ETIMS settings not found for business ID: 45  
[2026-09-17 10:06:52] live.ERROR: ETIMS settings not found for business ID: 45  
[2026-09-17 10:06:52] live.INFO: Purchase lines created {"transaction_id":1990,"purchase_lines_count":3,"purchase_lines":[{"id":1665,"transaction_id":1990,"product_id":385,"variation_id":390,"quantity":1.0,"secondary_unit_quantity":"0.0000","pp_without_discount":"680.0000","discount_percent":"0.00","purchase_price":"680.0000","purchase_price_inc_tax":"680.0000","item_tax":"0.0000","tax_id":null,"purchase_requisition_line_id":null,"purchase_order_line_id":null,"quantity_sold":"0.0000","quantity_adjusted":"0.0000","quantity_returned":"0.0000","po_quantity_purchased":"0.0000","mfg_quantity_used":"0.0000","mfg_date":null,"exp_date":null,"lot_number":null,"sub_unit_id":null,"created_at":"2026-09-17T07:06:52.000000Z","updated_at":"2026-09-17T07:06:52.000000Z"},{"id":1666,"transaction_id":1990,"product_id":410,"variation_id":415,"quantity":1.0,"secondary_unit_quantity":"0.0000","pp_without_discount":"900.0000","discount_percent":"0.00","purchase_price":"900.0000","purchase_price_inc_tax":"900.0000","item_tax":"0.0000","tax_id":null,"purchase_requisition_line_id":null,"purchase_order_line_id":null,"quantity_sold":"0.0000","quantity_adjusted":"0.0000","quantity_returned":"0.0000","po_quantity_purchased":"0.0000","mfg_quantity_used":"0.0000","mfg_date":null,"exp_date":null,"lot_number":null,"sub_unit_id":null,"created_at":"2026-09-17T07:06:52.000000Z","updated_at":"2026-09-17T07:06:52.000000Z"},{"id":1667,"transaction_id":1990,"product_id":410,"variation_id":415,"quantity":1.0,"secondary_unit_quantity":"0.0000","pp_without_discount":"900.0000","discount_percent":"0.00","purchase_price":"900.0000","purchase_price_inc_tax":"900.0000","item_tax":"0.0000","tax_id":null,"purchase_requisition_line_id":null,"purchase_order_line_id":null,"quantity_sold":"0.0000","quantity_adjusted":"0.0000","quantity_returned":"0.0000","po_quantity_purchased":"0.0000","mfg_quantity_used":"0.0000","mfg_date":null,"exp_date":null,"lot_number":null,"sub_unit_id":null,"created_at":"2026-09-17T07:06:52.000000Z","updated_at":"2026-09-17T07:06:52.000000Z"}]} 
[2026-09-17 10:06:52] live.INFO: Processing purchase row - 0 {"row_index":0,"product_id":"385","variation_id":"390","quantity":"1.00","has_imei":true,"imei_raw":"[]","purchase_data_keys":["product_id","variation_id","quantity","product_unit_id","sub_unit_id","pp_without_discount","discount_percent","purchase_price","purchase_line_tax_id","item_tax","purchase_price_inc_tax","profit_percent","default_sell_price","imei_numbers","imei_count"]} 
[2026-09-17 10:06:52] live.INFO: IMEI Data - Parsed for row 0 {"row_index":0,"imei_count":0,"imei_data":[],"imei_json":"[]"} 
[2026-09-17 10:06:52] live.INFO: IMEI data is empty or invalid for row 0 {"imeiData":[]} 
[2026-09-17 10:06:52] live.INFO: Processing purchase row - 1 {"row_index":1,"product_id":"410","variation_id":"415","quantity":"1.00","has_imei":true,"imei_raw":"[]","purchase_data_keys":["product_id","variation_id","quantity","product_unit_id","sub_unit_id","pp_without_discount","discount_percent","purchase_price","purchase_line_tax_id","item_tax","purchase_price_inc_tax","profit_percent","default_sell_price","imei_numbers","imei_count"]} 
[2026-09-17 10:06:52] live.INFO: IMEI Data - Parsed for row 1 {"row_index":1,"imei_count":0,"imei_data":[],"imei_json":"[]"} 
[2026-09-17 10:06:52] live.INFO: IMEI data is empty or invalid for row 1 {"imeiData":[]} 
[2026-09-17 10:06:52] live.INFO: Processing purchase row - 2 {"row_index":2,"product_id":"410","variation_id":"415","quantity":"1.00","has_imei":true,"imei_raw":"[]","purchase_data_keys":["product_id","variation_id","quantity","product_unit_id","sub_unit_id","pp_without_discount","discount_percent","purchase_price","purchase_line_tax_id","item_tax","purchase_price_inc_tax","profit_percent","default_sell_price","imei_numbers","imei_count"]} 
[2026-09-17 10:06:52] live.INFO: IMEI Data - Parsed for row 2 {"row_index":2,"imei_count":0,"imei_data":[],"imei_json":"[]"} 
[2026-09-17 10:06:52] live.INFO: IMEI data is empty or invalid for row 2 {"imeiData":[]} 
[2026-09-17 10:06:52] live.INFO: Purchase created successfully with IMEI data {"transaction_id":1990,"ref_no":"PO2026/0002","final_total":2480.0} 
[2026-09-17 10:06:54] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:07:08] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:07:15] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:07:20] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:07:20] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:07:20] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:07:20] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:07:20] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"877850.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:07:20] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:07:20] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:07:20] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:07:20] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"790065.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:07:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:07:21] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:07:21] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:07:21] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:07:21] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:07:21] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:07:21] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"1086100.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:07:21] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:07:21] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:07:21] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:07:21] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:07:21] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"980580.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:07:33] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:07:44] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:07:59] live.INFO: === STOCK UNITS REPORT - View Load ===  
[2026-09-17 10:07:59] live.INFO: Business ID: 45  
[2026-09-17 10:07:59] live.INFO: Default page entries: 25  
[2026-09-17 10:07:59] live.INFO: Business Locations count: 1  
[2026-09-17 10:07:59] live.INFO: Categories count: 20  
[2026-09-17 10:08:01] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:08:01] live.INFO: === STOCK UNITS REPORT - AJAX Request ===  
[2026-09-17 10:08:01] live.INFO: Parameters - Business ID: 45, Location ID: ALL, Category ID: ALL  
[2026-09-17 10:08:01] live.INFO: Products found: 24  
[2026-09-17 10:08:01] live.INFO: Location data processed  
[2026-09-17 10:08:01] live.INFO: Stock data processed  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 413, Stock: 298.0000, Price: 699.0000, Value: 208302  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 412, Stock: 20.0000, Price: 575.0000, Value: 11500  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 411, Stock: 200.0000, Price: 1089.0000, Value: 217800  
[2026-09-17 10:08:01] live.INFO: convertStockToUnit - Stock: 200.0000, Base: Pkt, Target: Pkt  
[2026-09-17 10:08:01] live.INFO: Starting multi-level conversion  
[2026-09-17 10:08:01] live.INFO: Fallback conversion - Multiplier: 1.0000, Result: 200  
[2026-09-17 10:08:01] live.INFO: Unit has own price - Unit: Pkt, Stock in unit: 200, Unit Price: 1089.0000, Calculated Value: 217800  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 410, Stock: 201.0000, Price: 1625.0000, Value: 326625  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 409, Stock: 1.0000, Price: 1000.0000, Value: 1000  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 407, Stock: 100.0000, Price: 319.0000, Value: 31900  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 406, Stock: 98.0000, Price: 1799.0000, Value: 176302  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 405, Stock: 198.0000, Price: 85.0000, Value: 16830  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 395, Stock: 180.0000, Price: 305.0000, Value: 54900  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 393, Stock: 200.0000, Price: 300.0000, Value: 60000  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 392, Stock: 200.0000, Price: 200.0000, Value: 40000  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 391, Stock: 476.0000, Price: 210.0000, Value: 99960  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 389, Stock: 35.0000, Price: 380.0000, Value: 13300  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 387, Stock: 36.0000, Price: 360.0000, Value: 12960  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 386, Stock: 24.0000, Price: 340.0000, Value: 8160  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 385, Stock: 22.0000, Price: 780.0000, Value: 17160  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 383, Stock: 298.0000, Price: 269.0000, Value: 80162  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 381, Stock: 600.0000, Price: 542.0000, Value: 325200  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 379, Stock: 56.0000, Price: 1450.0000, Value: 81200  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 377, Stock: 49.0000, Price: 1150.0000, Value: 56350  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 376, Stock: 91.0000, Price: 580.0000, Value: 52780  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 373, Stock: 388.0000, Price: 196.0000, Value: 76048  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 371, Stock: 298.0000, Price: 210.0000, Value: 62580  
[2026-09-17 10:08:01] live.INFO: Stock value calculation - Product: 369, Stock: 238.0000, Price: 250.0000, Value: 59500  
[2026-09-17 10:08:01] live.INFO: Final formatted data count: 24  
[2026-09-17 10:08:01] live.INFO: DataTables response generated successfully  
[2026-09-17 10:08:49] live.INFO: === STOCK UNITS REPORT - View Load ===  
[2026-09-17 10:08:49] live.INFO: Business ID: 44  
[2026-09-17 10:08:49] live.INFO: Default page entries: 25  
[2026-09-17 10:08:49] live.INFO: Business Locations count: 1  
[2026-09-17 10:08:49] live.INFO: Categories count: 7  
[2026-09-17 10:08:51] live.INFO: === STOCK UNITS REPORT - AJAX Request ===  
[2026-09-17 10:08:51] live.INFO: Parameters - Business ID: 44, Location ID: ALL, Category ID: ALL  
[2026-09-17 10:08:51] live.INFO: Products found: 20  
[2026-09-17 10:08:51] live.INFO: Location data processed  
[2026-09-17 10:08:51] live.INFO: Stock data processed  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 417, Stock: 45.0000, Price: 120.0000, Value: 5400  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 416, Stock: 300.0000, Price: 60.0000, Value: 18000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 415, Stock: 500.0000, Price: 60.0000, Value: 30000  
[2026-09-17 10:08:51] live.INFO: convertStockToUnit - Stock: 500.0000, Base: Pkt, Target: Pkt  
[2026-09-17 10:08:51] live.INFO: Starting multi-level conversion  
[2026-09-17 10:08:51] live.INFO: Fallback conversion - Multiplier: 1.0000, Result: 500  
[2026-09-17 10:08:51] live.INFO: Unit has own price - Unit: Pkt, Stock in unit: 500, Unit Price: 60.0000, Calculated Value: 30000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 414, Stock: 200.0000, Price: 60.0000, Value: 12000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 408, Stock: 8.0000, Price: 10000.0000, Value: 80000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 404, Stock: 937.0000, Price: 80.0000, Value: 74960  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 403, Stock: 18.0000, Price: 550.0000, Value: 9900  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 399, Stock: 10.0000, Price: 300.0000, Value: 3000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 398, Stock: 3.0000, Price: 4500.0000, Value: 13500  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 397, Stock: 5.0000, Price: 1700.0000, Value: 8500  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 396, Stock: 70.0000, Price: 230.0000, Value: 16100  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 394, Stock: 10.0000, Price: 1200.0000, Value: 12000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 390, Stock: 9.0000, Price: 1500.0000, Value: 13500  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 388, Stock: 2.0000, Price: 25000.0000, Value: 50000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 384, Stock: 298.0000, Price: 70.0000, Value: 20860  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 382, Stock: 500.0000, Price: 250.0000, Value: 125000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 375, Stock: 13.0000, Price: 2500.0000, Value: 32500  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 374, Stock: 9.0000, Price: 40000.0000, Value: 360000  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 372, Stock: 216.0000, Price: 210.0000, Value: 45360  
[2026-09-17 10:08:51] live.INFO: Stock value calculation - Product: 370, Stock: 200.0000, Price: 250.0000, Value: 50000  
[2026-09-17 10:08:51] live.INFO: Final formatted data count: 20  
[2026-09-17 10:08:51] live.INFO: DataTables response generated successfully  
[2026-09-17 10:08:52] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:09:32] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:09:32] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:09:32] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:09:32] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:09:32] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"877850.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:09:32] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:09:32] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:09:32] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:09:32] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"790065.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:09:32] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:09:33] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:09:33] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:09:33] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:09:33] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:09:33] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:09:33] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"1086100.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:09:33] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:09:33] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:09:33] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:09:33] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:09:33] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"980580.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:14:07] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:14:09] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:14:38] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:15:34] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:15:34] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:15:34] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2066260.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:15:34] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:15:34] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2439000.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:15:34] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:15:34] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:15:34] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:15:34] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:15:34] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2076720.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:15:34] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:15:34] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:15:34] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 10:15:34] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2096519.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:15:37] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:15:37] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:15:37] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:15:37] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:15:37] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"877850.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:15:37] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:15:37] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:15:37] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:15:37] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"790065.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:15:37] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:15:38] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:15:38] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:15:38] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:15:38] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:15:38] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",44,"opening_stock","opening_stock"]} 
[2026-09-17 10:15:38] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"1086100.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:15:38] live.INFO: === getOpeningClosingStock START === {"business_id":44,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":true,"filters":"all","permitted_locations":null} 
[2026-09-17 10:15:38] live.DEBUG: Using sale price instead of purchase price {"price_query_part":"v.sell_price_inc_tax"} 
[2026-09-17 10:15:38] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:15:38] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * v.sell_price_inc_tax
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",44]} 
[2026-09-17 10:15:38] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"980580.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:15:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 10:19:32] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:19:34] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:19:45] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:19:50] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:20:08] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:20:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:20:45] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:21:33] live.INFO: filterProduct method called {"business_id":45,"search_term":"gold","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:21:33] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:21:33] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:21:33] live.DEBUG: Applying search filters {"search_term":"gold","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:21:33] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:21:33] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:21:33] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"gold"} 
[2026-09-17 10:21:35] live.INFO: Product Row Debug - RELOADED {"product_id":411,"product_name":"Golden Drop Vegetable Oil 3L","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1089.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"344":{"unit_id":344,"unit_name":"Packet","unit_price":1089.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:21:44] live.INFO: filterProduct method called {"business_id":45,"search_term":"ajab","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:21:44] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:21:44] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:21:44] live.DEBUG: Applying search filters {"search_term":"ajab","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:21:44] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:21:44] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:21:44] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"ajab"} 
[2026-09-17 10:21:46] live.INFO: Product Row Debug - RELOADED {"product_id":373,"product_name":"Ajab Maize Flour 2kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":196.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"304":{"unit_id":304,"unit_name":"Packet","unit_price":196.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:21:56] live.INFO: filterProduct method called {"business_id":45,"search_term":"sta","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:21:56] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:21:56] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:21:56] live.DEBUG: Applying search filters {"search_term":"sta","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:21:56] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:21:56] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:21:56] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"sta"} 
[2026-09-17 10:21:59] live.INFO: Product Row Debug - RELOADED {"product_id":385,"product_name":"Sta Soft Aromatherapy Passion 2l","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":780.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"316":{"unit_id":316,"unit_name":"Packet","unit_price":780.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:22:05] live.INFO: filterProduct method called {"business_id":45,"search_term":"aja","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:22:05] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:22:05] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:22:05] live.DEBUG: Applying search filters {"search_term":"aja","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:22:05] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:22:05] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:22:05] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"aja"} 
[2026-09-17 10:22:08] live.INFO: Product Row Debug - RELOADED {"product_id":369,"product_name":"Ajab Self Raising White Wheat Flour 2KG","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":250.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"300":{"unit_id":300,"unit_name":"Packet","unit_price":250.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:22:17] live.INFO: filterProduct method called {"business_id":45,"search_term":"chia","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:22:17] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:22:17] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:22:17] live.DEBUG: Applying search filters {"search_term":"chia","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:22:17] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:22:17] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:22:17] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"chia"} 
[2026-09-17 10:22:23] live.INFO: Product Row Debug - RELOADED {"product_id":413,"product_name":"Naturalli Chia Seeds 300g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":699.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"346":{"unit_id":346,"unit_name":"Packet","unit_price":699.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:22:50] live.INFO: filterProduct method called {"business_id":45,"search_term":"eg","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:22:50] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:22:50] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:22:50] live.DEBUG: Applying search filters {"search_term":"eg","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:22:50] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:22:50] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:22:50] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"eg"} 
[2026-09-17 10:22:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:22:54] live.INFO: filterProduct method called {"business_id":45,"search_term":"omo","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:22:54] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:22:54] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:22:54] live.DEBUG: Applying search filters {"search_term":"omo","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:22:54] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:22:54] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:22:54] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"omo"} 
[2026-09-17 10:22:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:22:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:22:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:22:59] live.INFO: Product Row Debug - RELOADED {"product_id":381,"product_name":"Omo Handwashing Powder 500g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":542.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"312":{"unit_id":312,"unit_name":"Packet","unit_price":542.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:23:05] live.INFO: filterProduct method called {"business_id":45,"search_term":"nuv","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:23:05] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:23:05] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:23:05] live.DEBUG: Applying search filters {"search_term":"nuv","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:23:05] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:23:05] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:23:05] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"nuv"} 
[2026-09-17 10:23:08] live.INFO: Product Row Debug - RELOADED {"product_id":407,"product_name":"NuVita Oat Digestive Biscuit 400g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":319.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"339":{"unit_id":339,"unit_name":"Packet","unit_price":319.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:23:32] live.INFO: Credit Limit Check Started {"contact_id":"913","status":"final","final_total":"17170.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:23:32] live.DEBUG: Payment Calculation {"final_total":17170.0,"curr_total_payment":17170.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:23:32] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":17170.0,"curr_total_payment":17170.0} 
[2026-09-17 10:23:32] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 10:23:32] live.INFO: is_mpesa_sale value: true  
[2026-09-17 10:23:32] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1991} 
[2026-09-17 10:23:32] live.INFO: Journal Entry Case: FULL CASH PAYMENT {"transaction_id":1991,"final_total":17170.0,"amount_paid":17170.0,"balance_due":0} 
[2026-09-17 10:23:32] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1991,"entries":[{"transaction_id":1991,"created_by_id":365,"transaction_number":"TRX-6aab957473d1e5.92198898","payment_detail_id":1383,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32","chart_of_account_id":15471,"debit":null,"credit":17170.0},{"transaction_id":1991,"created_by_id":365,"transaction_number":"TRX-6aab957473d1e5.92198898","payment_detail_id":1383,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32","chart_of_account_id":15475,"debit":17170.0,"credit":null}]} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1265,"purchase_line_id":1656,"quantity":3.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":14470.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1266,"purchase_line_id":1612,"quantity":6.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":13534.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1267,"purchase_line_id":1623,"quantity":5.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":10134.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1268,"purchase_line_id":1609,"quantity":5.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":9134.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1269,"purchase_line_id":1658,"quantity":5.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":6134.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1270,"purchase_line_id":1619,"quantity":4.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":4178.0} 
[2026-09-17 10:23:32] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1271,"purchase_line_id":1647,"quantity":6.0,"created_at":"2026-09-17 10:23:32","updated_at":"2026-09-17 10:23:32"}]} 
[2026-09-17 10:23:32] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:23:32] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2378.0} 
[2026-09-17 10:25:29] live.INFO: filterProduct method called {"business_id":45,"search_term":"nu","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:25:29] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:25:29] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:25:29] live.DEBUG: Applying search filters {"search_term":"nu","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:25:29] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:25:29] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:25:29] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"nu"} 
[2026-09-17 10:25:31] live.INFO: filterProduct method called {"business_id":45,"search_term":"nuvi","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:25:31] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:25:31] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:25:31] live.DEBUG: Applying search filters {"search_term":"nuvi","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:25:31] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:25:31] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:25:31] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"nuvi"} 
[2026-09-17 10:25:33] live.INFO: Product Row Debug - RELOADED {"product_id":405,"product_name":"NuVita Digestive Biscuits 200g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":85.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"336":{"unit_id":336,"unit_name":"Packet","unit_price":85.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:25:37] live.INFO: filterProduct method called {"business_id":45,"search_term":"nuv","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:25:37] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:25:37] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:25:37] live.DEBUG: Applying search filters {"search_term":"nuv","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:25:37] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:25:37] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:25:37] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"nuv"} 
[2026-09-17 10:25:38] live.INFO: Offline not allowed - triggering cleanup {"user_id":363,"business_id":44} 
[2026-09-17 10:25:39] live.INFO: Product Row Debug - RELOADED {"product_id":406,"product_name":"Nuvita Digestive Biscuits 1Kg.","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1799.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"338":{"unit_id":338,"unit_name":"Packet","unit_price":1799.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:25:43] live.INFO: filterProduct method called {"business_id":45,"search_term":"nuv","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:25:43] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:25:43] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:25:43] live.DEBUG: Applying search filters {"search_term":"nuv","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:25:43] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:25:43] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:25:43] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"nuv"} 
[2026-09-17 10:25:44] live.INFO: Product Row Debug - RELOADED {"product_id":407,"product_name":"NuVita Oat Digestive Biscuit 400g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":319.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"339":{"unit_id":339,"unit_name":"Packet","unit_price":319.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:25:49] live.INFO: filterProduct method called {"business_id":45,"search_term":"am","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:25:49] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:25:49] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:25:49] live.DEBUG: Applying search filters {"search_term":"am","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:25:49] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:25:49] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:25:49] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":45,"search_term":"am"} 
[2026-09-17 10:25:49] live.INFO: Product Row Debug - RELOADED {"product_id":391,"product_name":"Amaize Premium Maize Meal 2Kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":210.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"322":{"unit_id":322,"unit_name":"Packet","unit_price":210.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:26:01] live.INFO: filterProduct method called {"business_id":45,"search_term":"washi","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:26:01] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:26:01] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:26:01] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:26:01] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:26:01] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:26:01] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:26:01] live.DEBUG: Applying search filters {"search_term":"washi","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:01] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:01] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:26:01] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:26:01] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":45,"search_term":"washi"} 
[2026-09-17 10:26:02] live.INFO: filterProduct method called {"business_id":45,"search_term":"washing","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:26:02] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:26:02] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:26:02] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:26:02] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:26:02] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:26:02] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:26:02] live.DEBUG: Applying search filters {"search_term":"washing","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:02] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:02] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:26:02] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:26:02] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":45,"search_term":"washing"} 
[2026-09-17 10:26:09] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 10:26:11] live.INFO: Product Row Debug - RELOADED {"product_id":389,"product_name":"Sunlight 2 In 1 Hand Washing Powder Tropical 1kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":380.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"320":{"unit_id":320,"unit_name":"Packet","unit_price":380.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:26:27] live.INFO: filterProduct method called {"business_id":45,"search_term":"was","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:26:27] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:26:27] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:26:27] live.DEBUG: Applying search filters {"search_term":"was","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:26:27] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:26:27] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:26:27] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":45,"search_term":"was"} 
[2026-09-17 10:26:29] live.INFO: filterProduct method called {"business_id":45,"search_term":"washi","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:26:29] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:26:29] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:26:29] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:26:29] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:26:29] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:26:29] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:26:29] live.DEBUG: Applying search filters {"search_term":"washi","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:29] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:26:29] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:26:29] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:26:29] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":45,"search_term":"washi"} 
[2026-09-17 10:26:35] live.INFO: Product Row Debug - RELOADED {"product_id":381,"product_name":"Omo Handwashing Powder 500g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":542.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"312":{"unit_id":312,"unit_name":"Packet","unit_price":542.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:26:39] live.INFO: filterProduct method called {"business_id":45,"search_term":"was","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:26:39] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:26:39] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:26:39] live.DEBUG: Applying search filters {"search_term":"was","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:26:39] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:26:39] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:26:39] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":45,"search_term":"was"} 
[2026-09-17 10:26:46] live.INFO: Product Row Debug - RELOADED {"product_id":383,"product_name":"Omo Regukar Washing powder 250g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":269.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"314":{"unit_id":314,"unit_name":"Packet","unit_price":269.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:26:51] live.INFO: Credit Limit Check Started {"contact_id":"914","status":"final","final_total":"3604.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:26:51] live.DEBUG: Payment Calculation {"final_total":3604.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:26:51] live.INFO: Credit Limit Check Skipped - No Credit Limit Set {"contact_id":"914","contact_name":"Yehovah"} 
[2026-09-17 10:26:51] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 10:26:51] live.INFO: is_mpesa_sale value: true  
[2026-09-17 10:26:52] live.INFO: Journal Entry Case: FULL CREDIT SALE {"transaction_id":1992,"final_total":3604.0,"amount_paid":0.0,"balance_due":3604.0} 
[2026-09-17 10:26:52] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1992,"entries":[{"transaction_id":1992,"created_by_id":365,"transaction_number":"TRX-6aab963c144802.74604572","payment_detail_id":1384,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52","chart_of_account_id":15471,"debit":null,"credit":3604.0},{"transaction_id":1992,"created_by_id":365,"transaction_number":"TRX-6aab963c144802.74604572","payment_detail_id":1384,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52","chart_of_account_id":15470,"debit":3604.0,"credit":null}]} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1272,"purchase_line_id":1645,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":3529.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1273,"purchase_line_id":1646,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1930.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1274,"purchase_line_id":1647,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1630.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1275,"purchase_line_id":1629,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1450.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1276,"purchase_line_id":1627,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1090.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1277,"purchase_line_id":1619,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":601.0} 
[2026-09-17 10:26:52] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1278,"purchase_line_id":1621,"quantity":1.0,"created_at":"2026-09-17 10:26:52","updated_at":"2026-09-17 10:26:52"}]} 
[2026-09-17 10:26:52] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:26:52] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":361.0} 
[2026-09-17 10:27:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:27:30] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:27:36] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:27:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:28:01] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:28:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:28:08] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:29:22] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 10:29:22] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 10:29:22] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 10:29:22] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 10:29:22] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2080796.00000000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 10:29:22] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 10:29:22] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 10:29:22] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",45]} 
[2026-09-17 10:29:22] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2420965.00000000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 10:29:22] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:29:38] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:32:19] live.INFO: filterProduct method called {"business_id":45,"search_term":"sug","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:32:19] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:32:19] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:32:19] live.DEBUG: Applying search filters {"search_term":"sug","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:32:19] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:32:19] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:32:19] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"sug"} 
[2026-09-17 10:32:21] live.INFO: Product Row Debug - RELOADED {"product_id":393,"product_name":"2 kg White Sugar (Economy","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":300.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"325":{"unit_id":325,"unit_name":"Packet","unit_price":300.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:32:27] live.INFO: filterProduct method called {"business_id":45,"search_term":"rice","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:32:27] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:32:27] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:32:27] live.DEBUG: Applying search filters {"search_term":"rice","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:32:27] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:32:27] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:32:27] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"rice"} 
[2026-09-17 10:32:29] live.INFO: Product Row Debug - RELOADED {"product_id":379,"product_name":"Dawaat Pishori Rice 5kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1450.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"310":{"unit_id":310,"unit_name":"Packet","unit_price":1450.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:32:36] live.INFO: filterProduct method called {"business_id":45,"search_term":"fabr","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:32:36] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:32:36] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:32:36] live.DEBUG: Applying search filters {"search_term":"fabr","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:32:36] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:32:36] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:32:36] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"fabr"} 
[2026-09-17 10:32:42] live.INFO: Product Row Debug - RELOADED {"product_id":376,"product_name":"StaSoft Lavender Fabric Softener 2l","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":580.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"307":{"unit_id":307,"unit_name":"Packet","unit_price":580.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:32:47] live.INFO: filterProduct method called {"business_id":45,"search_term":"omo","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:32:47] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:32:47] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:32:47] live.DEBUG: Applying search filters {"search_term":"omo","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:32:47] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:32:47] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:32:47] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"omo"} 
[2026-09-17 10:32:50] live.INFO: Product Row Debug - RELOADED {"product_id":383,"product_name":"Omo Regukar Washing powder 250g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":269.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"314":{"unit_id":314,"unit_name":"Packet","unit_price":269.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:32:58] live.INFO: filterProduct method called {"business_id":45,"search_term":"ama","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:32:58] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:32:58] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:32:58] live.DEBUG: Applying search filters {"search_term":"ama","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:32:58] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:32:58] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:32:58] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":45,"search_term":"ama"} 
[2026-09-17 10:32:59] live.INFO: Product Row Debug - RELOADED {"product_id":391,"product_name":"Amaize Premium Maize Meal 2Kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":210.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"322":{"unit_id":322,"unit_name":"Packet","unit_price":210.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:33:05] live.INFO: filterProduct method called {"business_id":45,"search_term":"idr","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:05] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:05] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:05] live.DEBUG: Applying search filters {"search_term":"idr","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:33:05] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:33:05] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:05] live.INFO: filterProduct completed successfully {"result_count":0,"business_id":45,"search_term":"idr"} 
[2026-09-17 10:33:08] live.INFO: filterProduct method called {"business_id":45,"search_term":"dr","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:08] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:08] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:08] live.DEBUG: Applying search filters {"search_term":"dr","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:33:08] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:33:08] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:08] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"dr"} 
[2026-09-17 10:33:13] live.INFO: filterProduct method called {"business_id":45,"search_term":"dr","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:13] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:13] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:13] live.DEBUG: Applying search filters {"search_term":"dr","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:33:13] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:33:13] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:13] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"dr"} 
[2026-09-17 10:33:15] live.INFO: filterProduct method called {"business_id":45,"search_term":"dr ch","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:15] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:15] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:15] live.DEBUG: Applying search filters {"search_term":"dr ch","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 10:33:15] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 10:33:15] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:15] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":45,"search_term":"dr ch"} 
[2026-09-17 10:33:15] live.INFO: Product Row Debug - RELOADED {"product_id":412,"product_name":"Dr Chia Seeds 300g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":575.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"345":{"unit_id":345,"unit_name":"Packet","unit_price":575.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:33:31] live.INFO: filterProduct method called {"business_id":45,"search_term":"adige","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:31] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:31] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:33:31] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:33:31] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:33:31] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:33:31] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:31] live.DEBUG: Applying search filters {"search_term":"adige","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:31] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:31] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:31] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:33:31] live.INFO: No products found {"search_term":"adige","business_id":45,"location_id":"41"} 
[2026-09-17 10:33:31] live.INFO: filterProduct completed successfully {"result_count":0,"business_id":45,"search_term":"adige"} 
[2026-09-17 10:33:38] live.INFO: filterProduct method called {"business_id":45,"search_term":"digestiv","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:38] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:38] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:33:38] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:33:38] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:33:38] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:33:38] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:38] live.DEBUG: Applying search filters {"search_term":"digestiv","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:38] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:38] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:38] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:33:38] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"digestiv"} 
[2026-09-17 10:33:42] live.INFO: filterProduct method called {"business_id":45,"search_term":"digestive","location_id":"41","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","serial_number"],"check_qty":false,"search_type":"like"} 
[2026-09-17 10:33:42] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 10:33:42] live.DEBUG: Joining product_serial_numbers table for serial number search  
[2026-09-17 10:33:42] live.DEBUG: Serial numbers filtered by location {"location_id":"41"} 
[2026-09-17 10:33:42] live.DEBUG: Joining transaction_sell_lines and transactions to check if serial number is sold  
[2026-09-17 10:33:42] live.DEBUG: Added condition: keep products without serial numbers OR with available quantity > 0  
[2026-09-17 10:33:42] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 10:33:42] live.DEBUG: Applying search filters {"search_term":"digestive","search_type":"like","search_fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:42] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","serial_number"]} 
[2026-09-17 10:33:42] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 10:33:42] live.DEBUG: Added serial number, quantity, and transaction sell line fields with quantity details to select  
[2026-09-17 10:33:42] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"digestive"} 
[2026-09-17 10:33:47] live.INFO: Product Row Debug - RELOADED {"product_id":406,"product_name":"Nuvita Digestive Biscuits 1Kg.","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1799.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"338":{"unit_id":338,"unit_name":"Packet","unit_price":1799.0,"multiplier":1,"has_price":true}},"has_price_group":true,"price_group_id":"NaN"} 
[2026-09-17 10:37:07] live.INFO: Credit Limit Check Started {"contact_id":"915","status":"final","final_total":"11568.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 10:37:07] live.DEBUG: Payment Calculation {"final_total":11568.0,"curr_total_payment":11568.0,"is_credit_sale":false,"payment_count":2} 
[2026-09-17 10:37:07] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":11568.0,"curr_total_payment":11568.0} 
[2026-09-17 10:37:07] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 10:37:07] live.INFO: is_mpesa_sale value: true  
[2026-09-17 10:37:07] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1993} 
[2026-09-17 10:37:07] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"custom_pay_2","mpesa_transaction_id":null,"transaction_id":1993} 
[2026-09-17 10:37:08] live.INFO: Journal Entry Case: PARTIAL PAYMENT {"transaction_id":1993,"final_total":11568.0,"amount_paid":4000.0,"balance_due":7568.0} 
[2026-09-17 10:37:08] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1993,"entries":[{"transaction_id":1993,"created_by_id":365,"transaction_number":"TRX-6aab98a4024346.07554210","payment_detail_id":1385,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08","chart_of_account_id":15471,"debit":null,"credit":11568.0},{"transaction_id":1993,"created_by_id":365,"transaction_number":"TRX-6aab98a4024346.07554210","payment_detail_id":1385,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08","chart_of_account_id":15475,"debit":4000.0,"credit":null},{"transaction_id":1993,"created_by_id":365,"transaction_number":"TRX-6aab98a4024346.07554210","payment_detail_id":1385,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08","chart_of_account_id":15470,"debit":7568.0,"credit":null}]} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1279,"purchase_line_id":1617,"quantity":2.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":8928.0} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1280,"purchase_line_id":1615,"quantity":2.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":8168.0} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1281,"purchase_line_id":1621,"quantity":5.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":6968.0} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1282,"purchase_line_id":1629,"quantity":4.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":6248.0} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1283,"purchase_line_id":1657,"quantity":3.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":5348.0} 
[2026-09-17 10:37:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1284,"purchase_line_id":1646,"quantity":2.0,"created_at":"2026-09-17 10:37:08","updated_at":"2026-09-17 10:37:08"}]} 
[2026-09-17 10:37:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 10:37:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2150.0} 
[2026-09-17 10:37:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:39:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:39:51] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:40:19] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:40:24] live.INFO: Credit Limit Check Started {"contact_id":"914","status":"final","final_total":"3604.00","is_credit_sale":"0","exclude_transaction_id":"1992"} 
[2026-09-17 10:40:24] live.DEBUG: Payment Calculation {"final_total":3604.0,"curr_total_payment":3604.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:40:24] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":3604.0,"curr_total_payment":3604.0} 
[2026-09-17 10:40:24] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":false,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1992} 
[2026-09-17 10:40:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:40:48] live.INFO: Credit Limit Check Started {"contact_id":"901","status":"final","final_total":"196.00","is_credit_sale":"0","exclude_transaction_id":"1952"} 
[2026-09-17 10:40:48] live.DEBUG: Payment Calculation {"final_total":196.0,"curr_total_payment":196.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:40:48] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":196.0,"curr_total_payment":196.0} 
[2026-09-17 10:40:48] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":false,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1952} 
[2026-09-17 10:41:32] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 10:41:33] live.INFO: Offline not allowed - triggering cleanup {"user_id":365,"business_id":45} 
[2026-09-17 10:41:36] live.INFO: Credit Limit Check Started {"contact_id":"901","status":"final","final_total":"580.00","is_credit_sale":"0","exclude_transaction_id":"1950"} 
[2026-09-17 10:41:36] live.DEBUG: Payment Calculation {"final_total":580.0,"curr_total_payment":580.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 10:41:36] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":580.0,"curr_total_payment":580.0} 
[2026-09-17 10:41:36] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":false,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1950} 
[2026-09-17 10:41:37] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 10:41:56] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 10:41:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 10:42:05] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 10:43:16] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:43:28] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:43:58] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:44:26] live.INFO: === saveProductUnitRelationships START === {"product_id":393,"product_name":"2 kg White Sugar (Economy"} 
[2026-09-17 10:44:26] live.INFO: Units data received {"units_data":[{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"300.0000"}],"count":1} 
[2026-09-17 10:44:26] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"300.0000"}} 
[2026-09-17 10:44:26] live.INFO: Unit found by ID {"unit_id":325,"actual_name":"Packet"} 
[2026-09-17 10:44:26] live.WARNING: Skipping actual_name update - value looks like an ID {"actual_name":"325","unit_id":325} 
[2026-09-17 10:44:26] live.INFO: Setting as BASE unit {"unit_id":325} 
[2026-09-17 10:44:26] live.INFO: Unit saved {"unit_id":325,"unit_name":"Packet","is_base":true} 
[2026-09-17 10:44:26] live.INFO: First pass complete {"created_units_count":1,"unit_ids_to_keep":[325],"base_unit_id":325} 
[2026-09-17 10:44:26] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 10:44:26] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 10:44:26] live.INFO: === Cleaning up unused units === {"unit_ids_to_keep":[325],"base_unit_id":325,"page_batch_id":"20260916_104337_5094"} 
[2026-09-17 10:44:26] live.INFO: Units to delete {"count":0,"unit_ids":[]} 
[2026-09-17 10:44:26] live.INFO: === saveProductUnitRelationships END ===  
[2026-09-17 10:44:28] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:44:54] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:45:10] live.INFO: === saveProductUnitRelationships START === {"product_id":393,"product_name":"2 kg White Sugar (Economy"} 
[2026-09-17 10:45:10] live.INFO: Units data received {"units_data":[{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"300.0000"}],"count":1} 
[2026-09-17 10:45:10] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"300.0000"}} 
[2026-09-17 10:45:10] live.INFO: Unit found by ID {"unit_id":325,"actual_name":"Packet"} 
[2026-09-17 10:45:10] live.WARNING: Skipping actual_name update - value looks like an ID {"actual_name":"325","unit_id":325} 
[2026-09-17 10:45:10] live.INFO: Setting as BASE unit {"unit_id":325} 
[2026-09-17 10:45:10] live.INFO: Unit saved {"unit_id":325,"unit_name":"Packet","is_base":true} 
[2026-09-17 10:45:10] live.INFO: First pass complete {"created_units_count":1,"unit_ids_to_keep":[325],"base_unit_id":325} 
[2026-09-17 10:45:10] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 10:45:10] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 10:45:10] live.INFO: === Cleaning up unused units === {"unit_ids_to_keep":[325],"base_unit_id":325,"page_batch_id":"20260916_104337_5094"} 
[2026-09-17 10:45:10] live.INFO: Units to delete {"count":0,"unit_ids":[]} 
[2026-09-17 10:45:10] live.INFO: === saveProductUnitRelationships END ===  
[2026-09-17 10:45:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:45:32] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:45:51] live.INFO: === saveProductUnitRelationships START === {"product_id":393,"product_name":"2 kg White Sugar (Economy"} 
[2026-09-17 10:45:51] live.INFO: Units data received {"units_data":[{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"400"}],"count":1} 
[2026-09-17 10:45:51] live.INFO: Processing unit index: 0 {"unit_data":{"actual_name":"325","unit_id":"325","short_name":"Pkt","allow_decimal":"1","relation_unit_id":null,"relation_qty":"1","price":"400"}} 
[2026-09-17 10:45:51] live.INFO: Unit found by ID {"unit_id":325,"actual_name":"Packet"} 
[2026-09-17 10:45:51] live.INFO: Updated unit_price {"new_price":400.0} 
[2026-09-17 10:45:51] live.WARNING: Skipping actual_name update - value looks like an ID {"actual_name":"325","unit_id":325} 
[2026-09-17 10:45:51] live.INFO: Setting as BASE unit {"unit_id":325} 
[2026-09-17 10:45:51] live.INFO: Unit saved {"unit_id":325,"unit_name":"Packet","is_base":true} 
[2026-09-17 10:45:51] live.INFO: First pass complete {"created_units_count":1,"unit_ids_to_keep":[325],"base_unit_id":325} 
[2026-09-17 10:45:51] live.INFO: === SECOND PASS: Setting relations first ===  
[2026-09-17 10:45:51] live.INFO: === SECOND PASS: Calculating cumulative multipliers ===  
[2026-09-17 10:45:51] live.INFO: === Cleaning up unused units === {"unit_ids_to_keep":[325],"base_unit_id":325,"page_batch_id":"20260916_104337_5094"} 
[2026-09-17 10:45:51] live.INFO: Units to delete {"count":0,"unit_ids":[]} 
[2026-09-17 10:45:51] live.INFO: === saveProductUnitRelationships END ===  
[2026-09-17 10:45:54] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:47:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 10:55:26] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:55:34] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:55:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:56:53] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 10:58:19] live.INFO: === BALANCE SHEET REQUEST ===  
[2026-09-17 10:58:19] live.INFO: Business ID: 45  
[2026-09-17 10:58:19] live.INFO: Fiscal Year: 2026  
[2026-09-17 10:58:19] live.INFO: As Of Date: 2026-12-31  
[2026-09-17 10:58:19] live.INFO: Location ID: All  
[2026-09-17 10:58:19] live.INFO: --- Starting getBalanceSheetData ---  
[2026-09-17 10:58:19] live.INFO: Permitted locations: all  
[2026-09-17 10:58:19] live.INFO: Fiscal Year: 2026  
[2026-09-17 10:58:19] live.INFO: Fiscal Year Start: 2026-01-01  
[2026-09-17 10:58:19] live.INFO: As Of Date: 2026-12-31  
[2026-09-17 10:58:19] live.INFO: --- Getting Non-Current Assets ---  
[2026-09-17 10:58:19] live.INFO: Querying assets table for business_id: 45 with purchase_date <= 2026-12-31  
[2026-09-17 10:58:19] live.INFO: Found 0 assets purchased on or before 2026-12-31  
[2026-09-17 10:58:19] live.INFO: Non-Current Assets Count: 0  
[2026-09-17 10:58:19] live.INFO: Non-Current Assets Total: 0  
[2026-09-17 10:58:19] live.INFO: --- Getting Current Assets ---  
[2026-09-17 10:58:19] live.INFO: --- Getting Method Balances ---  
[2026-09-17 10:58:19] live.INFO: Getting method balances up to date: 2026-12-31 (converted to: 2026-12-31)  
[2026-09-17 10:58:19] live.INFO: Found 22 payment records  
[2026-09-17 10:58:19] live.INFO: Method Balances:  {"Cash":8666.0,"Send Money":11048.0,"Paybill":2799.0,"Card":880.0} 
[2026-09-17 10:58:19] live.INFO: Added Current Asset - Method: Cash, Balance: 8666  
[2026-09-17 10:58:19] live.INFO: Added Current Asset - Method: Send Money, Balance: 11048  
[2026-09-17 10:58:19] live.INFO: Added Current Asset - Method: Paybill, Balance: 2799  
[2026-09-17 10:58:19] live.INFO: Added Current Asset - Method: Card, Balance: 880  
[2026-09-17 10:58:19] live.INFO: --- Getting Receivables ---  
[2026-09-17 10:58:19] live.INFO: Calculating receivables up to date: 2026-12-31  
[2026-09-17 10:58:19] live.INFO: Total Receivables: 0  
[2026-09-17 10:58:19] live.INFO: Accounts Receivable: 0  
[2026-09-17 10:58:19] live.INFO: --- Getting Inventory Closing Stock Value as of 2026-12-31 ---  
[2026-09-17 10:58:19] live.INFO: Calculating closing stock value as of: 2026-12-31  
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":[],"permitted_locations":"all"} 
[2026-09-17 10:58:19] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:58:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2411547.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:58:19] live.INFO: Closing Stock Value (by purchase price): 2411547.00000000  
[2026-09-17 10:58:19] live.INFO: Inventory Closing Stock Value: 2411547  
[2026-09-17 10:58:19] live.INFO: --- Getting Opening Stock Equity as of 2026-01-01 ---  
[2026-09-17 10:58:19] live.INFO: Calculating opening stock value as of: 2026-01-01  
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":[],"permitted_locations":"all"} 
[2026-09-17 10:58:19] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2025-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:58:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2025-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":0,"is_opening":false,"date":"2025-12-31"} 
[2026-09-17 10:58:19] live.INFO: Opening Stock Value (as of 2025-12-31): 0  
[2026-09-17 10:58:19] live.INFO: Opening Stock Equity: 0  
[2026-09-17 10:58:19] live.INFO: --- Getting Profit/Loss Details from TransactionUtil for Period ---  
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:58:19] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 10:58:19] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 10:58:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2066260.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 10:58:19] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 10:58:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 10:58:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2411547.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 10:58:19] live.INFO: Net Profit for Period 2026-01-01 to 2026-12-31: 8680  
[2026-09-17 10:58:19] live.INFO: Added to Equity - Retained Earnings: 8680  
[2026-09-17 10:58:19] live.INFO: --- Getting Payables ---  
[2026-09-17 10:58:19] live.INFO: Calculating payables up to date: 2026-12-31  
[2026-09-17 10:58:19] live.INFO: Total Payables: 0  
[2026-09-17 10:58:19] live.INFO: Accounts Payable: 0  
[2026-09-17 10:58:19] live.INFO: === FINAL TOTALS ===  
[2026-09-17 10:58:19] live.INFO: Total Non-Current Assets: 0  
[2026-09-17 10:58:19] live.INFO: Total Current Assets: 2434940  
[2026-09-17 10:58:19] live.INFO: Total Assets: 2434940  
[2026-09-17 10:58:19] live.INFO: Total Equity: 8680  
[2026-09-17 10:58:19] live.INFO: Total Liabilities: 0  
[2026-09-17 10:58:19] live.INFO: Total Equity + Liabilities: 8680  
[2026-09-17 10:58:19] live.INFO: Difference: 2426260  
[2026-09-17 10:58:19] live.INFO: Is Balanced: No  
[2026-09-17 10:58:19] live.INFO: === BALANCE SHEET RESPONSE ===  
[2026-09-17 10:58:19] live.INFO: Total Assets: 2434940  
[2026-09-17 10:58:19] live.INFO: Total Equity: 8680  
[2026-09-17 10:58:19] live.INFO: Total Liabilities: 0  
[2026-09-17 10:58:19] live.INFO: Is Balanced: No  
[2026-09-17 10:58:19] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:05:50] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 11:08:21] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:10:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:14:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:17:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:20:56] live.INFO: === PROFIT & LOSS REQUEST ===  
[2026-09-17 11:20:56] live.INFO: Business ID: 45  
[2026-09-17 11:20:56] live.INFO: Fiscal Year: 2026  
[2026-09-17 11:20:56] live.INFO: As Of Date: 2026-12-31  
[2026-09-17 11:20:56] live.INFO: Location ID: All  
[2026-09-17 11:20:56] live.INFO: Calculating Profit & Loss for Fiscal Year: 2026 as of: 2026-12-31  
[2026-09-17 11:20:56] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2025-12-31","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 11:20:56] live.INFO: Opening stock calculation - including all transactions {"date":"2025-12-31"} 
[2026-09-17 11:20:56] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2025-12-31')"} 
[2026-09-17 11:20:56] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2025-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2025-12-31'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 11:20:56] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2066260.00000000","is_opening":true,"date":"2025-12-31"} 
[2026-09-17 11:20:56] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-12-31","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":"all"} 
[2026-09-17 11:20:56] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-12-31' (includes all types except purchase_order)"} 
[2026-09-17 11:20:56] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-12-31') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-12-31'","bindings":["purchase_order",45]} 
[2026-09-17 11:20:56] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2411547.00000000","is_opening":false,"date":"2026-12-31"} 
[2026-09-17 11:20:56] live.INFO: Profit/Loss Details from TransactionUtil: {"opening_stock":"2066260.00000000","closing_stock":"2411547.00000000","total_purchase":"35080.0000","total_sell":"59673.0000","gross_profit":"9880.00000000","net_profit":8680.0,"total_expense":1200.0} 
[2026-09-17 11:20:56] live.INFO: === BREAKDOWN OF total_expense ===  
[2026-09-17 11:20:56] live.INFO: From TransactionUtil total_expense: 1200  
[2026-09-17 11:20:56] live.INFO: From TransactionUtil total_adjustment: 0.0000  
[2026-09-17 11:20:56] live.INFO: === FINAL P&L CALCULATION ===  
[2026-09-17 11:20:56] live.INFO: Total Income: 59673  
[2026-09-17 11:20:56] live.INFO: Total COGS: -310207  
[2026-09-17 11:20:56] live.INFO: Total Expenses: 1200  
[2026-09-17 11:20:56] live.INFO: Gross Profit: 9880.00000000  
[2026-09-17 11:20:56] live.INFO: Net Profit: 8680  
[2026-09-17 11:20:56] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:21:15] live.INFO: === GENERAL LEDGER REQUEST ===  
[2026-09-17 11:21:15] live.INFO: Start Date: 2026-09-17  
[2026-09-17 11:21:15] live.INFO: End Date: 2026-09-17  
[2026-09-17 11:21:15] live.INFO: Location ID: All  
[2026-09-17 11:21:15] live.INFO: Account Filter: All  
[2026-09-17 11:21:15] live.INFO: Per Page: 25  
[2026-09-17 11:21:15] live.INFO: Current Page: 1  
[2026-09-17 11:21:15] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:22:23] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:22:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:22:52] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 11:31:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:32:52] live.INFO: filterProduct method called {"business_id":45,"search_term":"sug","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:32:52] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:32:52] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:32:52] live.DEBUG: Applying search filters {"search_term":"sug","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:32:52] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:32:52] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:32:52] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"sug"} 
[2026-09-17 11:32:54] live.INFO: Product Row Debug - RELOADED {"product_id":393,"product_name":"2 kg White Sugar (Economy","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":400.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"325":{"unit_id":325,"unit_name":"Packet","unit_price":400.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 11:33:01] live.INFO: filterProduct method called {"business_id":45,"search_term":"gol","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:33:01] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:33:01] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:33:01] live.DEBUG: Applying search filters {"search_term":"gol","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:33:01] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:33:01] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:33:01] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"gol"} 
[2026-09-17 11:33:03] live.INFO: Product Row Debug - RELOADED {"product_id":411,"product_name":"Golden Drop Vegetable Oil 3L","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1089.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"344":{"unit_id":344,"unit_name":"Packet","unit_price":1089.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 11:33:19] live.INFO: filterProduct method called {"business_id":45,"search_term":"aja","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:33:19] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:33:19] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:33:19] live.DEBUG: Applying search filters {"search_term":"aja","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:33:19] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:33:19] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:33:19] live.INFO: filterProduct completed successfully {"result_count":3,"business_id":45,"search_term":"aja"} 
[2026-09-17 11:33:22] live.INFO: Product Row Debug - RELOADED {"product_id":373,"product_name":"Ajab Maize Flour 2kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":196.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"304":{"unit_id":304,"unit_name":"Packet","unit_price":196.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 11:34:00] live.INFO: filterProduct method called {"business_id":45,"search_term":"ri","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:34:00] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:34:00] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:34:00] live.DEBUG: Applying search filters {"search_term":"ri","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:34:00] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:34:00] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:34:00] live.INFO: filterProduct completed successfully {"result_count":5,"business_id":45,"search_term":"ri"} 
[2026-09-17 11:34:01] live.INFO: filterProduct method called {"business_id":45,"search_term":"rice","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:34:01] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:34:01] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:34:01] live.DEBUG: Applying search filters {"search_term":"rice","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:34:01] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:34:01] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:34:01] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"rice"} 
[2026-09-17 11:34:05] live.INFO: Product Row Debug - RELOADED {"product_id":379,"product_name":"Dawaat Pishori Rice 5kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1450.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"310":{"unit_id":310,"unit_name":"Packet","unit_price":1450.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 11:34:21] live.INFO: filterProduct method called {"business_id":45,"search_term":"chia","location_id":"41","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku"],"check_qty":false,"search_type":"like"} 
[2026-09-17 11:34:21] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 11:34:21] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 11:34:21] live.DEBUG: Applying search filters {"search_term":"chia","search_type":"like","search_fields":["name","sku"]} 
[2026-09-17 11:34:21] live.DEBUG: LIKE search conditions applied {"fields":["name","sku"]} 
[2026-09-17 11:34:21] live.DEBUG: Applying location filter {"location_id":"41"} 
[2026-09-17 11:34:21] live.INFO: filterProduct completed successfully {"result_count":2,"business_id":45,"search_term":"chia"} 
[2026-09-17 11:34:24] live.INFO: Product Row Debug - RELOADED {"product_id":412,"product_name":"Dr Chia Seeds 300g","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":575.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"345":{"unit_id":345,"unit_name":"Packet","unit_price":575.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 11:35:08] live.INFO: Credit Limit Check Started {"contact_id":"912","status":"final","final_total":"47734.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 11:35:08] live.DEBUG: Payment Calculation {"final_total":47734.0,"curr_total_payment":47734.0,"is_credit_sale":false,"payment_count":3} 
[2026-09-17 11:35:08] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":47734.0,"curr_total_payment":47734.0} 
[2026-09-17 11:35:08] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 11:35:08] live.INFO: is_mpesa_sale value: true  
[2026-09-17 11:35:08] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1994} 
[2026-09-17 11:35:08] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"bank_transfer","mpesa_transaction_id":null,"transaction_id":1994} 
[2026-09-17 11:35:08] live.INFO: Journal Entry Case: PARTIAL PAYMENT {"transaction_id":1994,"final_total":47734.0,"amount_paid":15000.0,"balance_due":32734.0} 
[2026-09-17 11:35:08] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1994,"entries":[{"transaction_id":1994,"created_by_id":364,"transaction_number":"TRX-6aaba63cad57b4.71876545","payment_detail_id":1386,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08","chart_of_account_id":15471,"debit":null,"credit":47734.0},{"transaction_id":1994,"created_by_id":364,"transaction_number":"TRX-6aaba63cad57b4.71876545","payment_detail_id":1386,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08","chart_of_account_id":15475,"debit":15000.0,"credit":null},{"transaction_id":1994,"created_by_id":364,"transaction_number":"TRX-6aaba63cad57b4.71876545","payment_detail_id":1386,"location_id":"41","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08","chart_of_account_id":15470,"debit":32734.0,"credit":null}]} 
[2026-09-17 11:35:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1285,"purchase_line_id":1631,"quantity":17.0,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08"}]} 
[2026-09-17 11:35:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 11:35:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":41614.0} 
[2026-09-17 11:35:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1286,"purchase_line_id":1656,"quantity":6.0,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08"}]} 
[2026-09-17 11:35:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 11:35:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":36214.0} 
[2026-09-17 11:35:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1287,"purchase_line_id":1612,"quantity":25.0,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08"}]} 
[2026-09-17 11:35:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 11:35:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":32314.0} 
[2026-09-17 11:35:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1288,"purchase_line_id":1617,"quantity":14.0,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08"}]} 
[2026-09-17 11:35:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 11:35:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":13834.0} 
[2026-09-17 11:35:08] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1289,"purchase_line_id":1657,"quantity":16.0,"created_at":"2026-09-17 11:35:08","updated_at":"2026-09-17 11:35:08"}]} 
[2026-09-17 11:35:08] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 11:35:08] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":9034.0} 
[2026-09-17 11:35:08] live.ERROR: ETIMS settings not found for business ID: 45  
[2026-09-17 11:35:08] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1994  
[2026-09-17 11:38:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:38:30] live.ERROR: SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `system` where `key` = crm_version limit 1) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `system` where `key` = crm_version limit 1) at /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php:760)
[stacktrace]
#0 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(899): Illuminate\\Database\\Connection->runQueryCallback('select * from `...', Array, Object(Closure))
#1 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(878): Illuminate\\Database\\Connection->tryAgainIfCausedByLostConnection(Object(Illuminate\\Database\\QueryException), 'select * from `...', Array, Object(Closure))
#2 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(722): Illuminate\\Database\\Connection->handleQueryException(Object(Illuminate\\Database\\QueryException), 'select * from `...', Array, Object(Closure))
#3 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(405): Illuminate\\Database\\Connection->run('select * from `...', Array, Object(Closure))
#4 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2705): Illuminate\\Database\\Connection->select('select * from `...', Array, true)
#5 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2694): Illuminate\\Database\\Query\\Builder->runSelect()
#6 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3230): Illuminate\\Database\\Query\\Builder->Illuminate\\Database\\Query\\{closure}()
#7 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2693): Illuminate\\Database\\Query\\Builder->onceWithColumns(Array, Object(Closure))
#8 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(710): Illuminate\\Database\\Query\\Builder->get(Array)
#9 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(694): Illuminate\\Database\\Eloquent\\Builder->getModels(Array)
#10 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php(296): Illuminate\\Database\\Eloquent\\Builder->get(Array)
#11 /home/risetactiv/live.risetactiv.com/app/System.php(39): Illuminate\\Database\\Eloquent\\Builder->first()
#12 /home/risetactiv/live.risetactiv.com/app/Utils/ModuleUtil.php(28): App\\System::getProperty('crm_version')
#13 /home/risetactiv/live.risetactiv.com/Modules/Crm/Providers/CrmServiceProvider.php(172): App\\Utils\\ModuleUtil->isModuleInstalled('Crm')
#14 /home/risetactiv/live.risetactiv.com/Modules/Crm/Providers/CrmServiceProvider.php(39): Modules\\Crm\\Providers\\CrmServiceProvider->registerScheduleCommands()
#15 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Modules\\Crm\\Providers\\CrmServiceProvider->boot()
#16 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#17 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#18 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#19 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/Container.php(661): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#20 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(929): Illuminate\\Container\\Container->call(Array)
#21 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(910): Illuminate\\Foundation\\Application->bootProvider(Object(Modules\\Crm\\Providers\\CrmServiceProvider))
#22 [internal function]: Illuminate\\Foundation\\Application->Illuminate\\Foundation\\{closure}(Object(Modules\\Crm\\Providers\\CrmServiceProvider), 59)
#23 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(909): array_walk(Array, Object(Closure))
#24 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\\Foundation\\Application->boot()
#25 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(242): Illuminate\\Foundation\\Bootstrap\\BootProviders->bootstrap(Object(Illuminate\\Foundation\\Application))
#26 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Foundation\\Application->bootstrapWith(Array)
#27 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(160): Illuminate\\Foundation\\Http\\Kernel->bootstrap()
#28 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#29 /home/risetactiv/live.risetactiv.com/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#30 {main}

[previous exception] [object] (PDOException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory at /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)
[stacktrace]
#0 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct('mysql:host=loca...', 'risetactiv_live', Object(SensitiveParameterValue), Array)
#1 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(100): Illuminate\\Database\\Connectors\\Connector->createPdoConnection('mysql:host=loca...', 'risetactiv_live', 'Riset2190$1000', Array)
#2 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(49): Illuminate\\Database\\Connectors\\Connector->tryAgainIfCausedByLostConnection(Object(PDOException), 'mysql:host=loca...', 'risetactiv_live', 'Riset2190$1000', Array)
#3 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection('mysql:host=loca...', Array, Array)
#4 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect(Array)
#5 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#6 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1181): call_user_func(Object(Closure))
#7 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1217): Illuminate\\Database\\Connection->getPdo()
#8 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(486): Illuminate\\Database\\Connection->getReadPdo()
#9 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(414): Illuminate\\Database\\Connection->getPdoForSelect(true)
#10 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}('select * from `...', Array)
#11 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(899): Illuminate\\Database\\Connection->runQueryCallback('select * from `...', Array, Object(Closure))
#12 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(878): Illuminate\\Database\\Connection->tryAgainIfCausedByLostConnection(Object(Illuminate\\Database\\QueryException), 'select * from `...', Array, Object(Closure))
#13 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(722): Illuminate\\Database\\Connection->handleQueryException(Object(Illuminate\\Database\\QueryException), 'select * from `...', Array, Object(Closure))
#14 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(405): Illuminate\\Database\\Connection->run('select * from `...', Array, Object(Closure))
#15 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2705): Illuminate\\Database\\Connection->select('select * from `...', Array, true)
#16 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2694): Illuminate\\Database\\Query\\Builder->runSelect()
#17 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3230): Illuminate\\Database\\Query\\Builder->Illuminate\\Database\\Query\\{closure}()
#18 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2693): Illuminate\\Database\\Query\\Builder->onceWithColumns(Array, Object(Closure))
#19 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(710): Illuminate\\Database\\Query\\Builder->get(Array)
#20 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(694): Illuminate\\Database\\Eloquent\\Builder->getModels(Array)
#21 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php(296): Illuminate\\Database\\Eloquent\\Builder->get(Array)
#22 /home/risetactiv/live.risetactiv.com/app/System.php(39): Illuminate\\Database\\Eloquent\\Builder->first()
#23 /home/risetactiv/live.risetactiv.com/app/Utils/ModuleUtil.php(28): App\\System::getProperty('crm_version')
#24 /home/risetactiv/live.risetactiv.com/Modules/Crm/Providers/CrmServiceProvider.php(172): App\\Utils\\ModuleUtil->isModuleInstalled('Crm')
#25 /home/risetactiv/live.risetactiv.com/Modules/Crm/Providers/CrmServiceProvider.php(39): Modules\\Crm\\Providers\\CrmServiceProvider->registerScheduleCommands()
#26 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Modules\\Crm\\Providers\\CrmServiceProvider->boot()
#27 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#28 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#29 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#30 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Container/Container.php(661): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#31 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(929): Illuminate\\Container\\Container->call(Array)
#32 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(910): Illuminate\\Foundation\\Application->bootProvider(Object(Modules\\Crm\\Providers\\CrmServiceProvider))
#33 [internal function]: Illuminate\\Foundation\\Application->Illuminate\\Foundation\\{closure}(Object(Modules\\Crm\\Providers\\CrmServiceProvider), 59)
#34 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(909): array_walk(Array, Object(Closure))
#35 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\\Foundation\\Application->boot()
#36 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(242): Illuminate\\Foundation\\Bootstrap\\BootProviders->bootstrap(Object(Illuminate\\Foundation\\Application))
#37 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Foundation\\Application->bootstrapWith(Array)
#38 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(160): Illuminate\\Foundation\\Http\\Kernel->bootstrap()
#39 /home/risetactiv/live.risetactiv.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/risetactiv/live.risetactiv.com/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} 
[2026-09-17 11:41:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 11:43:34] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 11:44:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 11:45:59] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 11:47:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:05:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:05:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:07:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:08:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:08:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:08:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:09:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:09:39] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:09:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:09:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:10:56] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 12:11:25] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 12:12:18] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 12:13:24] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 12:16:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:17:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:18:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:20:33] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:37:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:40:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:42:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:43:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:43:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 12:46:37] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 12:47:09] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:01:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:04:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 13:04:55] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 13:07:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 13:07:34] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 13:10:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:10:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:11:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:12:34] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:12:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:13:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:13:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:13:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:13:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:14:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:15:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:16:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:20:36] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 13:30:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:31:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:33:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:35:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:36:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:47:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:50:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:50:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:50:35] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:50:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:54:11] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:54:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:54:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 13:58:13] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 13:58:48] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 14:00:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:02:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:09:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:12:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:12:33] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:19:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:24:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:25:41] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:25:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:25:48] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:25:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:25:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:26:04] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:27:17] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:28:11] live.INFO: Calculating receivables listing from: 2026-09-17 to: 2026-09-17  
[2026-09-17 14:28:11] live.INFO: Calculating payables listing from: 2026-09-17 to: 2026-09-17  
[2026-09-17 14:28:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:29:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:29:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 14:29:19] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 14:29:19] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 14:29:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",45,"opening_stock","opening_stock"]} 
[2026-09-17 14:29:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2080796.00000000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 14:29:19] live.INFO: === getOpeningClosingStock START === {"business_id":45,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 14:29:19] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 14:29:19] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",45]} 
[2026-09-17 14:29:19] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"2372847.00000000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 14:29:19] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:30:59] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 14:31:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 14:33:10] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 14:34:00] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 14:34:26] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 14:35:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:35:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:36:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:37:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:37:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:37:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:38:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:39:19] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:43:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:44:09] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 14:46:39] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:48:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:49:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:52:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:54:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:57:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 14:58:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 14:59:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:01:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 15:06:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:07:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:07:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:08:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:09:21] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:10:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:11:30] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:11:30] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 15:11:30] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 15:11:30] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",8,"opening_stock","opening_stock"]} 
[2026-09-17 15:11:30] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 15:11:30] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:11:30] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 15:11:30] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",8]} 
[2026-09-17 15:11:30] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 15:11:51] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:11:51] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 15:11:51] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 15:11:51] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",8,"opening_stock","opening_stock"]} 
[2026-09-17 15:11:51] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 15:11:51] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:11:51] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 15:11:51] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",8]} 
[2026-09-17 15:11:51] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 15:12:37] live.INFO: filterProduct method called {"business_id":8,"search_term":"ce","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:12:37] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:12:37] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:12:37] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:12:37] live.DEBUG: Applying search filters {"search_term":"ce","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:12:37] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:12:37] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:12:37] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:12:37] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"ce"} 
[2026-09-17 15:12:53] live.INFO: filterProduct method called {"business_id":8,"search_term":"milk","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:12:53] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:12:53] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:12:53] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:12:53] live.DEBUG: Applying search filters {"search_term":"milk","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:12:53] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:12:53] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:12:53] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:12:53] live.INFO: filterProduct completed successfully {"result_count":0,"business_id":8,"search_term":"milk"} 
[2026-09-17 15:13:06] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:13:06] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:13:06] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:13:06] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:13:06] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:13:06] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:13:06] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:13:06] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:13:06] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:13:06] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:13:07] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:13:07] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:13:23] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:13:23] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:14:17] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:14:17] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:14:17] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:14:17] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:14:17] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:14:17] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:14:17] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:14:17] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:14:17] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:14:18] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:14:19] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:14:19] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:14:23] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:14:23] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:14:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:15:58] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:15:58] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:15:58] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:15:58] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:15:58] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:15:58] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:15:58] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:15:58] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:15:58] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:15:58] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:15:59] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:15:59] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:17:10] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:17:10] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:17:10] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:17:10] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:17:11] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:17:11] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:17:11] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:17:11] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:17:12] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:17:12] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:18:12] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:18:18] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:18:18] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:18:18] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:18:18] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:18:18] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:18:18] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:18:18] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:18:18] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:18:18] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:18:19] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:18:19] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:18:19] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:18:46] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:18:46] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:18:46] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:18:46] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:18:46] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:18:46] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:18:46] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:18:46] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:18:46] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:18:47] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:18:47] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:18:47] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:19:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:20:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:21:07] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:21:22] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:21:22] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:21:22] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:21:22] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:21:22] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:21:22] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:21:22] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:21:22] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:21:22] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:21:23] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:21:24] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:21:24] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:22:45] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-16","location_id":null,"is_opening":true,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:22:45] live.INFO: Opening stock calculation - including all transactions {"date":"2026-09-16"} 
[2026-09-17 15:22:45] live.INFO: Applied opening stock condition {"condition":"purchase.type = 'opening_stock' OR (purchase.type != 'opening_stock' AND date(transaction_date) <= '2026-09-16')"} 
[2026-09-17 15:22:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-16') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and (`purchase`.`type` = ? or (`purchase`.`type` != ? and date(transaction_date) <= '2026-09-16'))","bindings":["purchase_order",8,"opening_stock","opening_stock"]} 
[2026-09-17 15:22:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":true,"date":"2026-09-16"} 
[2026-09-17 15:22:45] live.INFO: === getOpeningClosingStock START === {"business_id":8,"date":"2026-09-17","location_id":null,"is_opening":false,"by_sale_price":false,"filters":{"user_id":null},"permitted_locations":null} 
[2026-09-17 15:22:45] live.INFO: Applied closing stock condition {"condition":"date(transaction_date) <= '2026-09-17' (includes all types except purchase_order)"} 
[2026-09-17 15:22:45] live.DEBUG: Final SQL Query {"sql":"select SUM((purchase_lines.quantity - purchase_lines.quantity_returned - purchase_lines.quantity_adjusted -
                        (SELECT COALESCE(SUM(tspl.quantity - tspl.qty_returned), 0) FROM 
                        transaction_sell_lines_purchase_lines AS tspl
                        JOIN transaction_sell_lines as tsl ON 
                        tspl.sell_line_id=tsl.id 
                        JOIN transactions as sale ON 
                        tsl.transaction_id=sale.id 
                        WHERE tspl.purchase_line_id = purchase_lines.id AND 
                        date(sale.transaction_date) <= '2026-09-17') ) * (purchase_lines.purchase_price + 
                        COALESCE(purchase_lines.item_tax, 0))
                    ) as stock from `purchase_lines` inner join `transactions` as `purchase` on `purchase_lines`.`transaction_id` = `purchase`.`id` left join `variations` as `v` on `v`.`id` = `purchase_lines`.`variation_id` left join `products` as `p` on `p`.`id` = `purchase_lines`.`product_id` where `purchase`.`type` != ? and `purchase`.`business_id` = ? and date(transaction_date) <= '2026-09-17'","bindings":["purchase_order",8]} 
[2026-09-17 15:22:45] live.INFO: === getOpeningClosingStock RESULT === {"calculated_stock":"129199625.81040000","is_opening":false,"date":"2026-09-17"} 
[2026-09-17 15:25:26] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"10","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:25:26] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:25:26] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:25:26] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:25:26] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:25:26] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:25:26] live.DEBUG: Applying location filter {"location_id":"10"} 
[2026-09-17 15:25:26] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:25:26] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:25:27] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:25:28] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:25:28] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:25:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:26:32] live.INFO: filterProduct method called {"business_id":8,"search_term":"re","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:26:32] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:26:32] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:26:32] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:26:32] live.DEBUG: Applying search filters {"search_term":"re","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:26:32] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:26:32] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:26:32] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:26:32] live.INFO: filterProduct completed successfully {"result_count":8,"business_id":8,"search_term":"re"} 
[2026-09-17 15:26:33] live.INFO: Product Row Debug - RELOADED {"product_id":66,"product_name":"Break Fluid 1 Liter","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":1550.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null} 
[2026-09-17 15:26:34] live.INFO: Fetching tax rate for product ID: 66  
[2026-09-17 15:26:34] live.INFO: Product ID 66 has no tax assigned.  
[2026-09-17 15:28:13] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:29:20] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:31:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:34:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:34:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:38:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:39:21] live.INFO: filterProduct method called {"business_id":8,"search_term":"tes","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:39:21] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:39:21] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:39:21] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:39:21] live.DEBUG: Applying search filters {"search_term":"tes","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:39:21] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:39:21] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:39:21] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:39:21] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":8,"search_term":"tes"} 
[2026-09-17 15:39:22] live.INFO: Product Row Debug - RELOADED {"product_id":365,"product_name":"Original Hostes Wheat Flour 2kg","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":245.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"292":{"unit_id":292,"unit_name":"Pkt","unit_price":245.0,"multiplier":1,"has_price":true},"293":{"unit_id":293,"unit_name":"Bale","unit_price":2300.0,"multiplier":"12.0000","has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:39:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:39:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:40:26] live.INFO: filterProduct method called {"business_id":8,"search_term":"tes","location_id":"9","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:40:26] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:40:26] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:40:26] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:40:26] live.DEBUG: Applying search filters {"search_term":"tes","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:40:26] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:40:26] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:40:26] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:40:26] live.INFO: filterProduct completed successfully {"result_count":4,"business_id":8,"search_term":"tes"} 
[2026-09-17 15:40:41] live.INFO: filterProduct method called {"business_id":8,"search_term":"er","location_id":"9","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:40:41] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:40:41] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:40:41] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:40:41] live.DEBUG: Applying search filters {"search_term":"er","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:40:41] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:40:41] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:40:41] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:40:41] live.INFO: filterProduct completed successfully {"result_count":14,"business_id":8,"search_term":"er"} 
[2026-09-17 15:41:01] live.INFO: filterProduct method called {"business_id":8,"search_term":"er","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:41:01] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:41:01] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:41:01] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:41:01] live.DEBUG: Applying search filters {"search_term":"er","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:41:01] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:41:01] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:41:01] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:41:01] live.INFO: filterProduct completed successfully {"result_count":14,"business_id":8,"search_term":"er"} 
[2026-09-17 15:41:04] live.INFO: Product Row Debug - RELOADED {"product_id":331,"product_name":"Elephant Sculputers","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":2000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"242":{"unit_id":242,"unit_name":"Pc","unit_price":2000.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:41:13] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"5000.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 15:41:13] live.DEBUG: Payment Calculation {"final_total":5000.0,"curr_total_payment":5000.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:41:13] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":5000.0,"curr_total_payment":5000.0} 
[2026-09-17 15:41:13] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 15:41:13] live.INFO: is_mpesa_sale value: true  
[2026-09-17 15:41:13] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1995} 
[2026-09-17 15:41:13] live.INFO: Journal Entry Case: FULL CASH PAYMENT {"transaction_id":1995,"final_total":5000.0,"amount_paid":5000.0,"balance_due":0} 
[2026-09-17 15:41:13] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1995,"entries":[{"transaction_id":1995,"created_by_id":229,"transaction_number":"TRX-6aabdfe9b4e112.93981109","payment_detail_id":1387,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:41:13","updated_at":"2026-09-17 15:41:13","chart_of_account_id":23,"debit":null,"credit":5000.0},{"transaction_id":1995,"created_by_id":229,"transaction_number":"TRX-6aabdfe9b4e112.93981109","payment_detail_id":1387,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:41:13","updated_at":"2026-09-17 15:41:13","chart_of_account_id":27,"debit":5000.0,"credit":null}]} 
[2026-09-17 15:41:13] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1290,"purchase_line_id":1555,"quantity":2.5,"created_at":"2026-09-17 15:41:13","updated_at":"2026-09-17 15:41:13"}]} 
[2026-09-17 15:41:13] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:41:13] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":2500.0} 
[2026-09-17 15:41:13] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1995,"contact_id":94,"customer_name":"Walk-In Customer","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:41:13] live.ERROR: ETIMS: Missing item_id for product {"product_id":331} 
[2026-09-17 15:41:13] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:41:13] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1995  
[2026-09-17 15:41:22] live.INFO: filterProduct method called {"business_id":8,"search_term":"er","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:41:22] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:41:22] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:41:22] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:41:22] live.DEBUG: Applying search filters {"search_term":"er","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:41:22] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:41:22] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:41:22] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:41:22] live.INFO: filterProduct completed successfully {"result_count":14,"business_id":8,"search_term":"er"} 
[2026-09-17 15:41:25] live.INFO: Product Row Debug - RELOADED {"product_id":334,"product_name":"tusker can 330ml","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":200.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"245":{"unit_id":245,"unit_name":"pcs","unit_price":200.0,"multiplier":1,"has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:41:37] live.INFO: filterProduct method called {"business_id":8,"search_term":"meet","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:41:37] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:41:37] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:41:37] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:41:37] live.DEBUG: Applying search filters {"search_term":"meet","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:41:37] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:41:37] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:41:37] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:41:37] live.INFO: filterProduct completed successfully {"result_count":0,"business_id":8,"search_term":"meet"} 
[2026-09-17 15:42:08] live.INFO: filterProduct method called {"business_id":8,"search_term":"di","location_id":"9","not_for_selling":"0","price_group_id":null,"product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:42:08] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:42:08] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:42:08] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:42:08] live.DEBUG: Applying search filters {"search_term":"di","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:42:08] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:42:08] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:42:08] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:42:08] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"di"} 
[2026-09-17 15:42:08] live.INFO: Product Row Debug - RELOADED {"product_id":347,"product_name":"DefaultEdit","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":150.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"277":{"unit_id":277,"unit_name":"T1","unit_price":150.0,"multiplier":1,"has_price":true},"278":{"unit_id":278,"unit_name":"T2","unit_price":1350.0,"multiplier":"12.0000","has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:42:26] live.INFO: filterProduct method called {"business_id":8,"search_term":"di","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:42:26] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:42:26] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:42:26] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:42:26] live.DEBUG: Applying search filters {"search_term":"di","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:42:26] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:42:26] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:42:26] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:42:26] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"di"} 
[2026-09-17 15:42:26] live.INFO: Product Row Debug - RELOADED {"product_id":347,"product_name":"DefaultEdit","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":150.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"277":{"unit_id":277,"unit_name":"T1","unit_price":150.0,"multiplier":1,"has_price":true},"278":{"unit_id":278,"unit_name":"T2","unit_price":1350.0,"multiplier":"12.0000","has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:42:36] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"1860.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 15:42:36] live.DEBUG: Payment Calculation {"final_total":1860.0,"curr_total_payment":1860.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:42:36] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":1860.0,"curr_total_payment":1860.0} 
[2026-09-17 15:42:36] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 15:42:36] live.INFO: is_mpesa_sale value: true  
[2026-09-17 15:42:36] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1996} 
[2026-09-17 15:42:36] live.INFO: Journal Entry Case: FULL CASH PAYMENT {"transaction_id":1996,"final_total":1860.0,"amount_paid":1860.0,"balance_due":0} 
[2026-09-17 15:42:36] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1996,"entries":[{"transaction_id":1996,"created_by_id":229,"transaction_number":"TRX-6aabe03c90fa00.12355312","payment_detail_id":1388,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:42:36","updated_at":"2026-09-17 15:42:36","chart_of_account_id":23,"debit":null,"credit":1860.0},{"transaction_id":1996,"created_by_id":229,"transaction_number":"TRX-6aabe03c90fa00.12355312","payment_detail_id":1388,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:42:36","updated_at":"2026-09-17 15:42:36","chart_of_account_id":27,"debit":1860.0,"credit":null}]} 
[2026-09-17 15:42:36] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1291,"purchase_line_id":1563,"quantity":3.79999999999999982236431605997495353221893310546875,"created_at":"2026-09-17 15:42:36","updated_at":"2026-09-17 15:42:36"}]} 
[2026-09-17 15:42:36] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:42:36] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1290.0} 
[2026-09-17 15:42:36] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1292,"purchase_line_id":1584,"quantity":7.3300000000000000710542735760100185871124267578125,"created_at":"2026-09-17 15:42:36","updated_at":"2026-09-17 15:42:36"}]} 
[2026-09-17 15:42:36] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:42:36] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":644.9600000000000363797880709171295166015625} 
[2026-09-17 15:42:36] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1996,"contact_id":94,"customer_name":"Walk-In Customer","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:42:36] live.ERROR: ETIMS: Missing item_id for product {"product_id":334} 
[2026-09-17 15:42:36] live.ERROR: ETIMS: Missing item_id for product {"product_id":347} 
[2026-09-17 15:42:36] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:42:36] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1996  
[2026-09-17 15:43:44] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"2460.00","is_credit_sale":"0","exclude_transaction_id":"1996"} 
[2026-09-17 15:43:44] live.DEBUG: Payment Calculation {"final_total":2460.0,"curr_total_payment":2460.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:43:44] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":2460.0,"curr_total_payment":2460.0} 
[2026-09-17 15:43:44] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1292,"purchase_line_id":1584,"quantity":4.0,"created_at":"2026-09-17 15:43:44","updated_at":"2026-09-17 15:43:44"}]} 
[2026-09-17 15:43:44] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:43:44] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":892.9600000000000363797880709171295166015625} 
[2026-09-17 15:43:44] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1996,"contact_id":94,"customer_name":"Walk-In Customer","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:43:44] live.ERROR: ETIMS: Missing item_id for product {"product_id":334} 
[2026-09-17 15:43:44] live.ERROR: ETIMS: Missing item_id for product {"product_id":347} 
[2026-09-17 15:43:44] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:43:44] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1996  
[2026-09-17 15:46:37] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"3500.00","is_credit_sale":"0","exclude_transaction_id":"1996"} 
[2026-09-17 15:46:37] live.DEBUG: Payment Calculation {"final_total":3500.0,"curr_total_payment":3500.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:46:37] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":3500.0,"curr_total_payment":3500.0} 
[2026-09-17 15:46:37] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1291,"purchase_line_id":1563,"quantity":6.20000000000000017763568394002504646778106689453125,"created_at":"2026-09-17 15:46:37","updated_at":"2026-09-17 15:46:37"}]} 
[2026-09-17 15:46:37] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:46:37] live.INFO: Inserted Retained Earnings (profit) entries {"count":1,"total_profit":1120.0} 
[2026-09-17 15:46:37] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1996,"contact_id":94,"customer_name":"Walk-In Customer","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:46:37] live.ERROR: ETIMS: Missing item_id for product {"product_id":334} 
[2026-09-17 15:46:37] live.ERROR: ETIMS: Missing item_id for product {"product_id":347} 
[2026-09-17 15:46:37] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:46:37] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1996  
[2026-09-17 15:46:52] live.INFO: filterProduct method called {"business_id":8,"search_term":"re","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:46:52] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:46:52] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:46:52] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:46:52] live.DEBUG: Applying search filters {"search_term":"re","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:46:52] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:46:52] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:46:52] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:46:52] live.INFO: filterProduct completed successfully {"result_count":8,"business_id":8,"search_term":"re"} 
[2026-09-17 15:46:53] live.INFO: Product Row Debug - RELOADED {"product_id":287,"product_name":"Pastureziar","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"71":{"unit_id":71,"unit_name":"Kg","unit_price":null,"multiplier":1,"has_price":false}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:47:03] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"130.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 15:47:03] live.DEBUG: Payment Calculation {"final_total":130.0,"curr_total_payment":130.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:47:03] live.INFO: Credit Limit Check Skipped - Fully Paid {"final_total":130.0,"curr_total_payment":130.0} 
[2026-09-17 15:47:03] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 15:47:03] live.INFO: is_mpesa_sale value: true  
[2026-09-17 15:47:03] live.INFO: M-Pesa sale evaluation {"is_mpesa_sale_raw":true,"is_valid_mpesa_sale":false,"payment_method_input":"cash","mpesa_transaction_id":null,"transaction_id":1997} 
[2026-09-17 15:47:03] live.INFO: Journal Entry Case: FULL CASH PAYMENT {"transaction_id":1997,"final_total":130.0,"amount_paid":130.0,"balance_due":0} 
[2026-09-17 15:47:03] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1997,"entries":[{"transaction_id":1997,"created_by_id":229,"transaction_number":"TRX-6aabe147479752.20681210","payment_detail_id":1389,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:47:03","updated_at":"2026-09-17 15:47:03","chart_of_account_id":23,"debit":null,"credit":130.0},{"transaction_id":1997,"created_by_id":229,"transaction_number":"TRX-6aabe147479752.20681210","payment_detail_id":1389,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:47:03","updated_at":"2026-09-17 15:47:03","chart_of_account_id":27,"debit":130.0,"credit":null}]} 
[2026-09-17 15:47:03] live.INFO: Inserted purchase sell mapping {"count":1,"data":[{"sell_line_id":1293,"purchase_line_id":1481,"quantity":3.25,"created_at":"2026-09-17 15:47:03","updated_at":"2026-09-17 15:47:03"}]} 
[2026-09-17 15:47:03] live.INFO: Inserted COGS → Inventory journal entries {"count":2} 
[2026-09-17 15:47:03] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1997,"contact_id":94,"customer_name":"Walk-In Customer","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:47:03] live.ERROR: ETIMS: Missing item_id for product {"product_id":287} 
[2026-09-17 15:47:03] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:47:03] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1997  
[2026-09-17 15:47:18] live.INFO: filterProduct method called {"business_id":8,"search_term":"re","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:47:18] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:47:18] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:47:18] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:47:18] live.DEBUG: Applying search filters {"search_term":"re","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:47:18] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:47:18] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:47:18] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:47:18] live.INFO: filterProduct completed successfully {"result_count":8,"business_id":8,"search_term":"re"} 
[2026-09-17 15:47:19] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:47:20] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:20] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:43] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:43] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:44] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:44] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:44] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:44] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:45] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:45] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:45] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:45] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:46] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:46] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:46] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:46] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:47] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:47] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:47] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:47] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:48] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:48] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:48] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:48] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:47:49] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:47:49] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:48:05] live.INFO: filterProduct method called {"business_id":8,"search_term":"hp","location_id":"9","not_for_selling":"0","price_group_id":"0","product_types":[],"search_fields":["name","sku","lot"],"check_qty":false,"search_type":"like"} 
[2026-09-17 15:48:05] live.DEBUG: Initial query built with joins {"has_location":true} 
[2026-09-17 15:48:05] live.DEBUG: Filtering by not_for_selling {"not_for_selling":"0"} 
[2026-09-17 15:48:05] live.DEBUG: Joining purchase_lines for lot number search  
[2026-09-17 15:48:05] live.DEBUG: Applying search filters {"search_term":"hp","search_type":"like","search_fields":["name","sku","lot"]} 
[2026-09-17 15:48:05] live.DEBUG: LIKE search conditions applied {"fields":["name","sku","lot"]} 
[2026-09-17 15:48:05] live.DEBUG: Applying location filter {"location_id":"9"} 
[2026-09-17 15:48:05] live.DEBUG: Added lot number fields to select  
[2026-09-17 15:48:05] live.INFO: filterProduct completed successfully {"result_count":1,"business_id":8,"search_term":"hp"} 
[2026-09-17 15:48:05] live.INFO: Product Row Debug - RELOADED {"product_id":153,"product_name":"Hp Spectre New 8gb / 256gb ssd","discount_allowed":false,"has_global_discount":false,"global_discount_type":"fixed","global_discount_amount":0,"discounts_count":0,"discounts":[],"base_price":40000.0,"discounts_json":"[]","multiplier":1,"unit_prices":{"1":{"unit_id":1,"unit_name":"Pc","unit_price":4000.0,"multiplier":1,"has_price":true},"64":{"unit_id":64,"unit_name":"CTN","unit_price":11000.0,"multiplier":"4.0000","has_price":true}},"has_price_group":false,"price_group_id":null,"subtotal_editable":true} 
[2026-09-17 15:48:06] live.INFO: Fetching tax rate for product ID: 153  
[2026-09-17 15:48:06] live.INFO: Product ID 153 has no tax assigned.  
[2026-09-17 15:48:33] live.INFO: Credit Limit Check Started {"contact_id":"94","status":"final","final_total":"8000.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 15:48:33] live.DEBUG: Payment Calculation {"final_total":8000.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:48:33] live.DEBUG: Contact Credit Limit Retrieved {"contact_id":"94","contact_name":"Walk-In Customer","credit_limit":"0.0000"} 
[2026-09-17 15:48:33] live.INFO: Credit Limit Check - Current Transaction Only {"contact_id":"94","contact_name":"Walk-In Customer","credit_limit":"0.0000","final_total":8000.0,"curr_total_payment":0.0,"current_due":8000.0,"will_exceed_limit":true} 
[2026-09-17 15:48:33] live.WARNING: Credit Limit Exceeded for Current Transaction {"contact_id":"94","contact_name":"Walk-In Customer","current_due":8000.0,"credit_limit":"0.0000","exceeded_by":8000.0} 
[2026-09-17 15:48:41] live.INFO: Credit Limit Check Started {"contact_id":"866","status":"final","final_total":"8000.00","is_credit_sale":"0","exclude_transaction_id":null} 
[2026-09-17 15:48:41] live.DEBUG: Payment Calculation {"final_total":8000.0,"curr_total_payment":0.0,"is_credit_sale":false,"payment_count":1} 
[2026-09-17 15:48:41] live.INFO: Credit Limit Check Skipped - No Credit Limit Set {"contact_id":"866","contact_name":""} 
[2026-09-17 15:48:41] live.INFO: mpesa_transaction_id value: NULL  
[2026-09-17 15:48:41] live.INFO: is_mpesa_sale value: true  
[2026-09-17 15:48:41] live.INFO: Journal Entry Case: FULL CREDIT SALE {"transaction_id":1998,"final_total":8000.0,"amount_paid":0.0,"balance_due":8000.0} 
[2026-09-17 15:48:41] live.INFO: Journal Entries Inserted Successfully {"transaction_id":1998,"entries":[{"transaction_id":1998,"created_by_id":229,"transaction_number":"TRX-6aabe1a9a82858.78053003","payment_detail_id":1390,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:48:41","updated_at":"2026-09-17 15:48:41","chart_of_account_id":23,"debit":null,"credit":8000.0},{"transaction_id":1998,"created_by_id":229,"transaction_number":"TRX-6aabe1a9a82858.78053003","payment_detail_id":1390,"location_id":"9","currency_id":133,"transaction_type":"sell","date":"2026-09-17","month":9,"year":2026,"active":1,"reversed":0,"reversible":1,"manual_entry":1,"created_at":"2026-09-17 15:48:41","updated_at":"2026-09-17 15:48:41","chart_of_account_id":19,"debit":8000.0,"credit":null}]} 
[2026-09-17 15:48:41] live.INFO: ETIMS: Customer details retrieved {"transaction_id":1998,"contact_id":866,"customer_name":"test x1","has_tin":false,"has_digitax_id":false} 
[2026-09-17 15:48:41] live.ERROR: ETIMS: Missing item_id for product {"product_id":153} 
[2026-09-17 15:48:41] live.ERROR: ETIMS: No valid items to submit after filtering  
[2026-09-17 15:48:41] live.WARNING: ETIMS WAIT: Timed out after 2 attempts for transaction ID: 1998  
[2026-09-17 15:48:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:49:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:51:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:52:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:56:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 15:58:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 15:59:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:08:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:09:47] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:19:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:19:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:20:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:20:33] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:20:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:25:02] live.INFO: Offline not allowed - triggering cleanup {"user_id":293,"business_id":43} 
[2026-09-17 16:28:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:29:18] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:30:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:32:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:33:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:33:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:36:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 16:38:11] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 16:38:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:39:46] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:51:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:52:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:53:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 16:57:21] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 16:57:24] live.INFO: Offline not allowed - triggering cleanup {"user_id":364,"business_id":45} 
[2026-09-17 17:03:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:03:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:07:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:15:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:16:04] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:26:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:26:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:29:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:39:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 17:45:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 17:59:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:03:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:03:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:03:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:04:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:06:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:14:07] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:14:17] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:14:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:16:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:20:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:21:48] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 18:23:31] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 18:28:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:32:37] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:34:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:36:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:37:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:40:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:41:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:41:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 18:42:11] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:00:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:00:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:00:55] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:00:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:02:59] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:03:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 19:03:29] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:04:29] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:04:43] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:05:00] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:05:39] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:06:00] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:06:30] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:06:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:06:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:06:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:06:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:10] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:07:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:16:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:24:26] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:30:41] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:35:53] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:36:24] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:42:17] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 19:51:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:51:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 19:51:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:10:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:19:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:21:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:22:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:23:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:28:16] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:29:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:31:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:32:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:42:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:42:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 20:44:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:02:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 21:04:57] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:06:19] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:06:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:08:34] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:35:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:36:11] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:36:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:36:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:36:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:40:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:40:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:40:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:40:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:41:46] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:42:19] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:42:53] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:43:23] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:43:53] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:44:23] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:45:09] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 21:45:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:46:05] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:46:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:47:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:47:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:47:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:47:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:50:58] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:55:48] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 21:56:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:04:02] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:04:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:05:58] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:06:28] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:06:30] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 22:06:58] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:07:28] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:07:58] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:08:28] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:08:58] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:09:28] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:09:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:09:53] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:09:59] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:10:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:10:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:11:25] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:11:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:11:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:12:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:12:29] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:12:39] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:12:49] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:12:59] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:14:16] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:14:46] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:15:34] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:16:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:16:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:17:04] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:17:32] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:17:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:17:53] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:18:05] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:18:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:18:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:18:46] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:18:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:20] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:24] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:28] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:32] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:36] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:40] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:20:45] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:22:37] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:22:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 22:23:00] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:23:10] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:23:40] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:24:10] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:24:41] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:25:13] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:25:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:25:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:25:35] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:25:41] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:26:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:12] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:13] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:26:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:23] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:27] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:47] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:50] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:26:57] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:28:00] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:28:13] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:29:44] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:30:15] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Connection to "ssl://mail.risetsystems.com:465" timed out.".  
[2026-09-17 22:30:16] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:30:46] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:31:16] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:32:31] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:32:39] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 22:48:01] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:49:07] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 22:49:31] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:01:06] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:01:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:02:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:08:22] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:08:34] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:08:38] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:08:42] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:18:59] live.ERROR: Failed to send error alert email: Connection could not be established with host "ssl://mail.risetsystems.com:465": stream_socket_client(): Unable to connect to ssl://mail.risetsystems.com:465 (Connection timed out)  
[2026-09-17 23:19:21] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:32:43] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:32:52] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:43:51] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:44:18] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:54:54] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:56:56] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:59:03] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
[2026-09-17 23:59:14] live.ERROR: Failed to send error alert email: Failed to authenticate on SMTP server with username "support@risetsystems.com" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".". Authenticator "PLAIN" returned "Expected response code "235" but got code "535", with message "535 Incorrect authentication data".".  
