Credit Limit Check Rounding Problem (Doc ID 1167376.1)

Last updated on SEPTEMBER 21, 2016

Applies to:

Oracle Communications Billing and Revenue Management - Version 7.3.0.0.1 and later
Information in this document applies to any platform.
***Checked for relevance on 06-JUNE-2014***
***Checked for relevance on 16-November-2015***

Goal

Credit limit check(CLC) rounding problem

CLC module returns not rounded values for quantity and charged amount in case when balance is too low to charge full unit and defined price per minute is such that deriven price per second (price per minute/60) is not number with finite number of decimal places. In case elaborated here price per minute is 0.08, therefore price per second is 0.001333333... (number with infinite number of decimal places).

To Reproduce:

1. Open prepaid account
2. Purchase tariff plan with defined price per minute as 0.08, unit is 60sec.

Case I – charged amount and charged quantity are correct (duration 3 sec)
3. Set account balance to 0.004. This is enough for 3 sec call.
4. Rate call 3 sec long. Result is: rating status 24 (credit limit exceeded), charged amount is correct (0.004), charged quantity is correct (3).

Case II - charged amount is correct and charged quantity is not correct (duration 9 sec)
A:
5. Set account balance to 0.012. This is enough for 9 sec call.
6. Rate call 9 sec long. Result is: rating status 24 (credit limit exceeded), charged amount is correct (0.012), charged quantity is NOT correct (9,000000000000022).

B:
Similar result is for duration 3 sec longer then one minute (duration 63 sec), different then for 3 sec:
7. Set account balance to 0.084. This is enough for 63 sec call.
8. Rate call 63 sec long. Result is: rating status 24 (credit limit exceeded), charged amount is correct (0.084), charged quantity is NOT correct (63,00000000000001).
Increasing duration we have cases when charged amount is not correctly rounded, in fact prepaid crosses 0 balance (credit limit).

Case III - charged amount and charged quantity are NOT correct
9. Set account balance to 0.916. This is enough for 687 sec call.
10. Rate call 687 sec long. Result is: rating status 24 (credit limit exceeded), charged amount is NOT correct (0.916000000000002), charged quantity is NOT correct (687,0000000000017).

This causes that charged amount is higher then account's balance (in Case III account has only 0.916 available to use) which for prepaid accounts means going into "negative" balance for currency resources (resource amount after such call is 0.000000000000002). This further causes that prepaid accounts having available free minutes cannot make any call (the system generate error because currency resource is less then 0).

Three different cases are just examples to detail the problem.

How can these rounding issues in charge and quantity be fixed?

Solution

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms