BNPL | Rule based freeze operations

  • Three freeze operations occurring automatically based on the Days Past Due date.

    • Soft Freeze, Hard Freeze and Soft Unfreeze.

  • The details of whether an account is Soft frozen or Hard frozen is only available in database level.

    • f_credit_account_freeze_detail - Contains details of all currently frozen accounts.

    • f_credit_account_freeze_history - Contains freeze history of accounts.

  • Soft Freeze - Account gets soft frozen after failing to pay amount after x days (Currently set as 3 days in the rule).

  • Hard Freeze - Account gets soft frozen after failing to pay amount after y days (Currently set as 60 days in the rule).

    • Hard frozen accounts can only be unfrozen manually through the UI.

  • Soft Unfreeze - Accounts can get unfrozen if payment is made while the account is soft frozen.

When a Soft frozen account moves to Hard freeze, the soft frozen details are moved to historical table and a fresh new row is added with Hard freeze details.

 

  • Manual Freeze - Accounts get Hard frozen directly from Active or Soft frozen state.

  • Manual Unfreeze - Account gets unfrozen from Hard freeze state.

Soft Frozen account are not allowed to be unfrozen via Manual unfreeze.

 

 

  1. Insert into f_account_arrears_config.

    INSERT INTO `f_account_arrears_config` (`id`, `grace_on_arrears_days`, `version`, `arrear_actions_config`) VALUES (1, 0, 1, '{\n\"freezeTypeRule\": \"AccountFreezeTypeRule\"\n}');
  2. In f_product_config_mapping, update arrears_config_id values to 1.

  3. Insert into f_risk_rule.

    INSERT INTO `f_risk_rule` (`entity_type`, `name`, `uname`, `description`, `default_value`, `value_type`, `possible_outputs`, `expression`, `is_active`, `version`, `definition_type`, `created_on`, `status`) VALUES (4, 'AccountFreezeTypeRule', 'AccountFreezeTypeRule', 'Account Freeze Type Rule', NULL, 0, '[]', '{\n \"inputs\": [\n \"daysPastDue\",\"accountNumber\"\n ],\n \"outputs\": {\n \"operation\": \"STRING\"\n },\n \"outputProvider\": \"BUCKET\",\n \"outputBuckets\": [\n {\n \"label\": \"SoftFreeze if DPD is more than 3 days but less than 60\",\n \"expressions\": [\n \"#daysPastDue>=3 && #daysPastDue<60\"\n ],\n \"output\": {\n \"operation\": \"SOFT_FREEZE\"\n }\n },\n \n \n {\n \"label\": \"HardFreeze if DPD more than 60 days\",\n \"expressions\": [\n \"#daysPastDue>=60\"\n ],\n \"output\": {\n \"operation\": \"HARD_FREEZE\"\n }\n },\n\n {\n \"label\": \"SoftUnfreeze if DPD is less than 3\",\n \"expressions\": [\n \"#daysPastDue<3\"\n ],\n \"output\": {\n \"operation\": \"SOFT_UNFREEZE\"\n }\n },\n {\n \"label\": \"Default\",\n \"expressions\": [\n \"true\"\n ],\n \"output\": {\n \"operation\": \"NONE\"\n }\n }\n ]\n}', 1, 1, 2, NULL, NULL);