MoneyWiseUKSchemeFactory.java
/*
* MoneyWise: Finance Application
* Copyright 2012-2026. Tony Washer
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package io.github.tonywasher.joceanus.moneywise.tax.uk;
import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRate;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKCapitalScheme.MoneyWiseUKCapitalAsIncomeScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKCapitalScheme.MoneyWiseUKCapitalFlatRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKCapitalScheme.MoneyWiseUKCapitalResidentialScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKCapitalScheme.MoneyWiseUKCapitalSplitRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKDividendScheme.MoneyWiseUKDividendAdditionalRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKDividendScheme.MoneyWiseUKDividendAsIncomeScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKDividendScheme.MoneyWiseUKDividendBaseRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKDividendScheme.MoneyWiseUKDividendHigherRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKDividendScheme.MoneyWiseUKDividendLoHigherRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKInterestScheme.MoneyWiseUKInterestAsIncomeScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKInterestScheme.MoneyWiseUKInterestBaseRateScheme;
import io.github.tonywasher.joceanus.moneywise.tax.uk.MoneyWiseUKInterestScheme.MoneyWiseUKInterestLoBaseRateScheme;
/**
* The scheme factory.
*/
public final class MoneyWiseUKSchemeFactory {
/**
* The Dividends asIncome Scheme.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_ASINCOME = new MoneyWiseUKDividendAsIncomeScheme();
/**
* The Dividends TaxCredit Scheme.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_TAXCREDIT = new MoneyWiseUKDividendBaseRateScheme(getRate(20));
/**
* The Dividends Non-refund-able TaxCredit Scheme.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_FIXEDTAXCREDIT = new MoneyWiseUKDividendBaseRateScheme(getRate(20), false);
/**
* The Dividends Low TaxCredit Scheme.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_LOTAXCREDIT = new MoneyWiseUKDividendLoHigherRateScheme(getRate(10), getFractionalRate(325));
/**
* The Dividends Low TaxCredit Scheme Mark 2.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_LOTAXCREDIT2 = new MoneyWiseUKDividendHigherRateScheme(getRate(10), getFractionalRate(325));
/**
* The Dividends Additional Rate Scheme.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_ADDTAXCREDIT = new MoneyWiseUKDividendAdditionalRateScheme(getRate(10),
getFractionalRate(325), getFractionalRate(425));
/**
* The Dividends Additional Rate Scheme Mark 2.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_ADDTAXCREDIT2 = new MoneyWiseUKDividendAdditionalRateScheme(getRate(10),
getFractionalRate(325), getFractionalRate(375));
/**
* The Dividends Additional Rate Scheme with no TaxCredit.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_NOTAXCREDIT = new MoneyWiseUKDividendAdditionalRateScheme(getFractionalRate(75),
getFractionalRate(325), getFractionalRate(381), Boolean.TRUE);
/**
* The Dividends Additional Rate Scheme with no TaxCredit and new rates.
*/
static final MoneyWiseUKDividendScheme DIVIDEND_NOTAXCREDIT1 = new MoneyWiseUKDividendAdditionalRateScheme(getTenthFractionalRate(875),
getTenthFractionalRate(3375), getTenthFractionalRate(3935), Boolean.TRUE);
/**
* The Interest asIncome Scheme.
*/
static final MoneyWiseUKInterestScheme INTEREST_ASINCOME = new MoneyWiseUKInterestAsIncomeScheme();
/**
* The Interest base Scheme.
*/
static final MoneyWiseUKInterestScheme INTEREST_BASE = new MoneyWiseUKInterestBaseRateScheme(getRate(20));
/**
* The LowInterest base Scheme.
*/
static final MoneyWiseUKInterestScheme INTEREST_LOBASE = new MoneyWiseUKInterestLoBaseRateScheme(getRate(20));
/**
* The Old Capital Gains Scheme.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_OLD = new MoneyWiseUKCapitalFlatRateScheme(getRate(30));
/**
* The Capital Gains asIncome Scheme.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_ASINCOME = new MoneyWiseUKCapitalAsIncomeScheme();
/**
* The New Capital Gains Scheme.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_NEW = new MoneyWiseUKCapitalFlatRateScheme(getRate(18));
/**
* The Split Capital Gains Scheme.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_SPLIT = new MoneyWiseUKCapitalSplitRateScheme(getRate(18), getRate(28));
/**
* The Residential Capital Gains Scheme.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_RESIDENTIAL = new MoneyWiseUKCapitalResidentialScheme(getRate(10),
getRate(20), getRate(18), getRate(28));
/**
* The Residential Capital Gains Scheme2.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_RESIDENTIAL2 = new MoneyWiseUKCapitalResidentialScheme(getRate(10),
getRate(20), getRate(18), getRate(24));
/**
* The Split Capital Gains Scheme2.
*/
static final MoneyWiseUKCapitalScheme CAPITAL_SPLIT2 = new MoneyWiseUKCapitalSplitRateScheme(getRate(18), getRate(24));
/**
* Constructor.
*/
private MoneyWiseUKSchemeFactory() {
}
/**
* Create a rate.
*
* @param pUnits the number of whole units
* @return the amount
*/
private static OceanusRate getRate(final int pUnits) {
return MoneyWiseUKTaxBandsFactory.getRate(pUnits);
}
/**
* Create a fractional rate.
*
* @param pUnits the number of whole units
* @return the amount
*/
private static OceanusRate getFractionalRate(final int pUnits) {
return OceanusRate.getWholePermille(pUnits);
}
/**
* Create a fractional rate.
*
* @param pUnits the number of tenth units
* @return the amount
*/
private static OceanusRate getTenthFractionalRate(final int pUnits) {
return OceanusRate.getTenthPermille(pUnits);
}
}