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:

  1. Account jobs
  2. Early organization jobs
  3. Loan jobs, savings jobs
  4. Account jobs (Yes, account jobs are executed twice. See note below for details.)
  5. 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 support@kwara.com

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.

                                                         

Did this answer your question?