MoneyWiseUKTaxBandsFactory.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.OceanusMoney;
import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRate;
import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxBandSet;
import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxBandSet.MoneyWiseTaxBand;

/**
 * The taxBands factory.
 */
public final class MoneyWiseUKTaxBandsFactory {
    /**
     * The 1981-82 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1981_82 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(11250), getRate(30)),
            new MoneyWiseTaxBand(getAmount(2000), getRate(40)),
            new MoneyWiseTaxBand(getAmount(3500), getRate(45)),
            new MoneyWiseTaxBand(getAmount(5500), getRate(50)),
            new MoneyWiseTaxBand(getAmount(5500), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1983 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1983 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(12800), getRate(30)),
            new MoneyWiseTaxBand(getAmount(2300), getRate(40)),
            new MoneyWiseTaxBand(getAmount(4000), getRate(45)),
            new MoneyWiseTaxBand(getAmount(6200), getRate(50)),
            new MoneyWiseTaxBand(getAmount(6200), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1984 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1984 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(14600), getRate(30)),
            new MoneyWiseTaxBand(getAmount(2600), getRate(40)),
            new MoneyWiseTaxBand(getAmount(4600), getRate(45)),
            new MoneyWiseTaxBand(getAmount(7100), getRate(50)),
            new MoneyWiseTaxBand(getAmount(7100), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1985 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1985 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(15400), getRate(30)),
            new MoneyWiseTaxBand(getAmount(2800), getRate(40)),
            new MoneyWiseTaxBand(getAmount(4900), getRate(45)),
            new MoneyWiseTaxBand(getAmount(7500), getRate(50)),
            new MoneyWiseTaxBand(getAmount(7500), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1986 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1986 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(16200), getRate(30)),
            new MoneyWiseTaxBand(getAmount(3000), getRate(40)),
            new MoneyWiseTaxBand(getAmount(5200), getRate(45)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(50)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1987 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1987 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(17200), getRate(29)),
            new MoneyWiseTaxBand(getAmount(3000), getRate(40)),
            new MoneyWiseTaxBand(getAmount(5200), getRate(45)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(50)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1988 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1988 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(17900), getRate(27)),
            new MoneyWiseTaxBand(getAmount(2500), getRate(40)),
            new MoneyWiseTaxBand(getAmount(5000), getRate(45)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(50)),
            new MoneyWiseTaxBand(getAmount(7900), getRate(55)),
            new MoneyWiseTaxBand(getRate(60))));

    /**
     * The 1989 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1989 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(19300), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))));

    /**
     * The 1990-91 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1990_91 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(20700), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))));

    /**
     * The 1992 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1992 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(23700), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))));

    /**
     * The 1993 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1993 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2000), getRate(20)),
            new MoneyWiseTaxBand(getAmount(21700), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1994 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1994 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2500), getRate(20)),
            new MoneyWiseTaxBand(getAmount(21200), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1995 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1995 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(3000), getRate(20)),
            new MoneyWiseTaxBand(getAmount(20700), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1996 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1996 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(3200), getRate(20)),
            new MoneyWiseTaxBand(getAmount(21100), getRate(25)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1997 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1997 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(3900), getRate(20)),
            new MoneyWiseTaxBand(getAmount(21600), getRate(24)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1998 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1998 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(4100), getRate(20)),
            new MoneyWiseTaxBand(getAmount(22000), getRate(23)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 1999 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_1999 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(4300), getRate(20)),
            new MoneyWiseTaxBand(getAmount(22800), getRate(23)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2000 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2000 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(1500), getRate(10)),
            new MoneyWiseTaxBand(getAmount(26500), getRate(23)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2001 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2001 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(1520), getRate(10)),
            new MoneyWiseTaxBand(getAmount(26880), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2002 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2002 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(1880), getRate(10)),
            new MoneyWiseTaxBand(getAmount(27520), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2003 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2003 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(1920), getRate(10)),
            new MoneyWiseTaxBand(getAmount(27980), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2004 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2004 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(1960), getRate(10)),
            new MoneyWiseTaxBand(getAmount(28540), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2005 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2005 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2020), getRate(10)),
            new MoneyWiseTaxBand(getAmount(29380), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2006 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2006 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2090), getRate(10)),
            new MoneyWiseTaxBand(getAmount(30310), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2007 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2007 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2150), getRate(10)),
            new MoneyWiseTaxBand(getAmount(31150), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2008 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2008 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(2230), getRate(10)),
            new MoneyWiseTaxBand(getAmount(32370), getRate(22)),
            new MoneyWiseTaxBand(getRate(40))), Boolean.TRUE);

    /**
     * The 2009 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2009 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(34800), getRate(20)),
            new MoneyWiseTaxBand(getRate(40))),
            new MoneyWiseTaxBand(getAmount(2320), getRate(10)));

    /**
     * The 2010 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2010 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(37400), getRate(20)),
            new MoneyWiseTaxBand(getRate(40))),
            new MoneyWiseTaxBand(getAmount(2440), getRate(10)));

    /**
     * The 2011 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2011 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(37400), getRate(20)),
            new MoneyWiseTaxBand(getAmount(112600), getRate(40)),
            new MoneyWiseTaxBand(getRate(50))),
            new MoneyWiseTaxBand(getAmount(2440), getRate(10)));

    /**
     * The 2012 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2012 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(35000), getRate(20)),
            new MoneyWiseTaxBand(getAmount(115000), getRate(40)),
            new MoneyWiseTaxBand(getRate(50))),
            new MoneyWiseTaxBand(getAmount(2560), getRate(10)));

    /**
     * The 2013 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2013 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(34370), getRate(20)),
            new MoneyWiseTaxBand(getAmount(115630), getRate(40)),
            new MoneyWiseTaxBand(getRate(50))),
            new MoneyWiseTaxBand(getAmount(2710), getRate(10)));

    /**
     * The 2014 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2014 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(32010), getRate(20)),
            new MoneyWiseTaxBand(getAmount(117990), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(10)));

    /**
     * The 2015 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2015 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(31865), getRate(20)),
            new MoneyWiseTaxBand(getAmount(118135), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(2790), getRate(10)));

    /**
     * The 2016 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2016 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(31765), getRate(20)),
            new MoneyWiseTaxBand(getAmount(118235), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2017 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2017 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(32000), getRate(20)),
            new MoneyWiseTaxBand(getAmount(118000), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2018 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2018 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(33500), getRate(20)),
            new MoneyWiseTaxBand(getAmount(116500), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2019 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2019 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(34500), getRate(20)),
            new MoneyWiseTaxBand(getAmount(115500), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2020 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2020 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(37500), getRate(20)),
            new MoneyWiseTaxBand(getAmount(112500), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2022 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2022 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(37700), getRate(20)),
            new MoneyWiseTaxBand(getAmount(112300), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * The 2024-2028 TaxBands.
     */
    static final MoneyWiseUKTaxBands BANDS_2024_2028 = new MoneyWiseUKTaxBands(new MoneyWiseTaxBandSet(
            new MoneyWiseTaxBand(getAmount(37700), getRate(20)),
            new MoneyWiseTaxBand(getAmount(87440), getRate(40)),
            new MoneyWiseTaxBand(getRate(45))),
            new MoneyWiseTaxBand(getAmount(5000), getRate(0)));

    /**
     * Private Constructor.
     */
    private MoneyWiseUKTaxBandsFactory() {
    }

    /**
     * Create a currency amount.
     *
     * @param pUnits the number of whole units
     * @return the amount
     */
    private static OceanusMoney getAmount(final int pUnits) {
        return MoneyWiseUKAllowanceFactory.getAmount(pUnits);
    }

    /**
     * Create a rate.
     *
     * @param pUnits the number of whole units
     * @return the amount
     */
    static OceanusRate getRate(final int pUnits) {
        return OceanusRate.getWholePercentage(pUnits);
    }
}