У меня есть эта математическая формула, которую я пытался преобразовать в функцию Oracle.Вот как это должно работать, taxableIncome проходит по таблице, она выбирает первую строку таблицы и, если она больше CumulativeAmount , вычитает CumulativeAmount из taxableIncome и сохраняет остаток , он умножает CumulativeAmount и Percentage , чтобы получить значение (x), берет остаток и идетСледующая строка в таблице и вычтите CumulativeAmount из остатка. Когда остаток будет меньше, чем CumulativeAmount , он будет применять 17,5 к остатку. Позже я сложу (x) значения, чтобы получить общую стоимость.Значения рассчитываются неправильно.
CREATE OR REPLACE function CalculateIncomeTax(periodId NVARCHAR2,
employeeId NVARCHAR2,paygroupcode PAYROLL_MASTER.PAY_PAY_GROUP_CODE%type,
taxableIncome NUMBER)
return NUMBER
AS
IncomeTax NUMBER (10,2);
BEGIN
SELECT
coalesce(SUM(
CASE WHEN (taxableIncome > T.TAX_CUMMULATIVE_AMOUNT) THEN (taxableIncome -
T.TAX_CUMMULATIVE_AMOUNT)* (T.TAX_PERCENTAGE/ 100)
ELSE 0.00 END
) ,0)
INTO IncomeTax
FROM TAX_LAW T JOIN PAY_GROUP P ON P.PAY_FORMULA_ID =T.TAX_FORMULA_ID
WHERE P.PAY_CODE = paygroupcode;
return IncomeTax;
end;
/
Например:
taxableIncome= 1000,the function must loop on the first line on the
table CummulativeAmount=261,so 1000-261=739, and 0*739=0,0 is
value(x),
next loop 739>70,739 is the remainder,so 739-70=669, and (5/100)*70
=3.5,3.5 is value(x),
next loop 669>100,669-100=569, (10/100)*100=10,10 is value(x),
now 569 < 2810, so (17.5/100)*569=99.575,99.575 is value(x).
so we sum all x =0+3.5+10+99.575= 113.075
, если taxableIncome = 300,300 больше, чем261 в таблице, поэтому мы будем использовать процент 0 для нее, но мы получим 0.now (300-261) меньше 70, поэтому процент 5 не может быть использован для него, поэтому Incometax равен 0. Но 17,5 будетприменить к (300-261), чтобы получить 6,825, Total IncomeTax - 6,825. Это логика расчетов. Я хочу использовать это в то время, когда выписка о расчете.