End of Day actions in Kwara
Each day at midnight (your organisation's local time) Kwara automatically performs some operations to ensure all account states, days in arrears, penalties, and fees are up to date and in accordance with any transactions posted so far.
These automatic actions are known as “cronjobs” in Kwara, follow a particular sequence, and contains 2 type of jobs: daily and hourly jobs. When the cron runs, if it wasn't already executed on that day, then it runs daily and hourly jobs. Otherwise, it runs only hourly jobs. After both types of jobs have finished, backup jobs are executed.
Daily jobs
are executed if not already in progress or completed. Daily jobs are executed sequentially, exactly in this order:
Account jobs
Early organization jobs
Loan jobs, savings jobs
Account jobs (Yes, account jobs are executed twice. See note below for details.)
Late organization jobs
Account jobs
REDRAW_TRANSFER → make automatic transfers from the Redraw Balance to the loan account. It will automatically pay a loan if there is something in the redraw balance (>0) and if there is any balance to pay (principal + interest + fee + penalty > 0).
AUTOMATED_TRANSFERS → automated transfers from deposit settlement accounts to loan accounts, as per loan account schedule
UPDATE_SAVINGS_WITH_PRODUCT_SETTINGS → update deposits accounts with any changes made to underlying Deposit Product Settings
UPDATE_LOANS_WITH_PRODUCT_SETTINGS → update loan accounts with any changes made to underlying Loan Product Settings
Please Note
As noted above, Account jobs are executed twice as part of the daily jobs. This behaviour is necessary to support certain business scenarios (especially those involving backdated or adjusted transactions), but does result in slightly unexpected behaviour in rare cases. For example, when disbursing a loan where the first repayment date is either in the past or on the current day, Kwara will collect the loan repayment with two transfer transactions rather than just one.
If you have additional questions about Kwara's End of Day actions, please contact us at [email protected]
Early organization jobs
RESET_GL_JOURNAL_ENTRY_SUMMARIES_INFO → reset all the information related to journal entry summary items in order to be able to recreate them from scratch
GENERATE_GL_JOURNAL_ENTRY_SUMMARIES → generate the GL journal entries summary items for the accounting entries logged since the last EOD job was executed
UPDATE_JOURNAL_ENTRIES_FOR_EARLY_INTEREST_ACCRUAL → update the journal entries reflecting accrued interest before the accrual takes place
Detailed description of steps
The accounting summaries for all general ledger entries since the initialization of your Kwara system are automatically regenerated each evening.
Firstly, all the existing summaries are deleted by executing the RESET_GL_JOURNAL_ENTRY_SUMMARIES_INFO
job, then they’re recreated from scratch by executing the GENERATE_GL_JOURNAL_ENTRY_SUMMARIES
process.
The summaries are generated by taking into consideration all the GL Journal Entries logged during the day, grouped in a number of buckets determined by:
The GL Account for which the entries were logged
The Branch of the Loan / Savings account for which the financial transactions triggering the Journal Entries were logged - this is helpful in order to be able to filter by Branch
The type (Debit / Credit)
The entry date of the financial transaction triggering the Journal Entries. This is helpful in order to have a timeline for our Accounting Reports (basically, seeing how the Balance Sheet was looking on a given day).
The balance of a summary is determined by the sum of the amounts logged along with the Journal Entries grouped using the aforementioned buckets. The formula used is Debit - Credit. If the result is positive or zero, the type of the summary will be of Debit, if negative, of Credit.
Loan jobs
AUTO_CLOSE_PAID_OFF_LOANS → automatic closure of loan accounts with zero balances, based on the Loan Product Dormancy settings
AMOUNTS_AMORTIZATION → Fee amortization in accounting
INTEREST_RATE_UPDATE → Update Interest Rate based on Index Interest Rate changes
TAX_RATE_UPDATE → update tax rate based on Tax Rate changes
CREATE_REVOLVING_CREDIT_DUE_REPAYMENTS → create repayment schedule for Revolving Credit loan accounts
LOCK_CAPPING_CHECKER → check if capping constraints have been exceeded and pass the loan account into locked capping state if necessary
LOAN_INTEREST_APPLY → application of interest accrued
LATE_LOANS_CHECKER → set the loan accounts to "In Arrears" state
PENALTIES_APPLY→ application of the penalties
AUTO_LOCK_ARREARS_LOANS → lock the loan accounts that have been in arrears for a specific period of time as defined in Loan Product setup
DUE_AMOUNTS_UPDATE → update all amounts due based on any interest, penalties and fees applied for that day
Savings jobs
SAVINGS_ACCOUNT_APPRAISER: accrue and apply interest (positive and overdraft interest)for saving accounts with Tiered Interest → update Interest Rate and loan transaction if needed update overdraft account state → update account state from Active to Active In Arrears and log activity when Expiry date is met and account's balance is negative
AUTO_DORMANT_INACTIVE_SAVINGS_ACCOUNTS → set deposit accounts as Dormant as defined in Deposit Product Settings
Late organization jobs
UPDATE_JOURNAL_ENTRIES_FOR_LTE_INTEREST_ACCRUAL → update journal entries reflecting the accrued interest after the accrual takes place
END_OF_DAY_CLOSURE → perform end of day accounting closures
UPCOMING_REPAYMENTS_CHECKER → search for all the repayments which are in Pending or Partially Paid state and trigger reminder Notifications using templates (check the due dates equal to today plus a configured number of days (how many days before that due date) and create notifications)
ACCOUNT_IN_ARREARS_CHECKER → triggers notifications after a configured number of days since the account is passed into arrears state
UPCOMING_DISBURSEMENT_CHECKER → triggers notifications for Approved accounts with a configured number of days before the expected disbursement date (loans and tranches)
ENFORCE_USER_PASSWORD_RESET → reset user passwords if the period defined in "Internal Controls" is up
ORGANIZATION_SNAPSHOT → create a snapshot of all indicators for organization
Hourly jobs
are executed after daily jobs and they are:
SEND_QUEUED_NOTIFICATIONS → check for queued notifications and schedule them for sendout
AUTHORIZATION_HOLDS_EXPIRATION→ unlock any balance that was held under an authorization that was not settled before it expired (by default, holds will expire after seven days)
BACKGROUND_PROCESS_EVICTION → clean any background process (technical)
Please Note
SMS notifications are not sent at midnight, but starting at 9:00 AM (your organization's time).
Backup jobs
Are executed after daily and hourly jobs. They are not executed during business hours or if they are already in progress or completed. They are executed on Production systems only, not on any Sandboxes you may have created to test new features. Backup jobs are DATABASE_BACKUP
, which will create a copy for the database at that moment.
Manual End of Day Processing
Kwara also allows manually executing the End of Day processes, instead of having it run automatically every night. Manual execution guarantees that Kwara will not run account appraisals every night, but it will still take the regular database backups every night.
Note that End of Day process need to be run before closing accounting books, to make sure that all the accounts are up to date.
To enable manual End of Day Processing, you must have the feature activated and have your admin switch the processing type to manual from the Kwara Administration section.
Triggering the End of Day Processing can be done from the user interface
Please be Aware: This option can be enabled upon request to Kwara support.
Please Note
Triggering the End of Day processing manually will run both the hourly and daily jobs. If the daily jobs already ran for the day, then only the hourly jobs will run.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article