Skip to content

hmrc/help-to-save-kalculator

Repository files navigation

help-to-save-kalculator

Status

Build Status Github
swift-pm

Contents

Bonus for new users

Android

Calculator.run(regularPayment = 50.0) // Must be between 1 and 50)          

iOS

Calculator().run(regularPayment: 50.0) // Must be between 1 and 50)          

Bonus for existing accounts

Android

Calculator.run(
    regularPayment = 50.0, // Must be between 1 and 50  
    currentBalance = 100.0,             
    currentPeriod1Bonus = 50.0, 
    currentPeriod2Bonus = 0.0,  
    accountStartDate = DateTime()
)          

iOS

Calculator().run(
    regularPayment: 50.0, // Must be between 1 and 50  
    currentBalance: 100.0,             
    currentPeriod1Bonus: 50.0, 
    currentPeriod2Bonus: 0.0,  
    accountStartDate: Date()
)          

Response structure

This will return an object of type CalculatorResponse. This provides headline figures that are the results at the end of the scheme. However, if a monthly breakdown is needed a cumulative breakdown is provided in monthlyBreakdown

  • monthlyPayments: Double
  • monthlyBreakdown: List<MonthlyBreakdown>
    • monthNumber: Int
    • savingsToDate: Double
    • period1Bonus: Double
    • period2Bonus: Double
    • bonusToDate: Double
  • endOfSchemeBonus: Double
  • endOfSchemeSavings: Double
  • endOfSchemeTotal: Double
  • endOfPeriod1Bonus: Double
  • endOfPeriod1Savings: Double
  • endOfPeriod1Total: Double
  • endOfPeriod2Bonus: Double
  • endOfPeriod2Savings: Double
  • endOfPeriod2Total: Double

Accounts in first term

Android

FirstBonusTermCalculator.runFirstBonusCalculator(input)
FirstBonusTermCalculator().runFirstBonusCalculator(input)

Where input is of the type FirstBonusInput with the following parameters:

regularPayment: Double,                 // 25.0
currentBalance: Double,                 // 25.0
paidInThisMonth: Double,                // 50.0
thisMonthEndDate: YearMonthDayInput,    // YearMonthDayInput(2020, 3, 31)
firstTermEndDate: YearMonthDayInput,    // YearMonthDayInput(2022, 2, 28)
secondTermEndDate: YearMonthDayInput,   // YearMonthDayInput(2024, 2, 28)
balanceMustBeMoreThanForBonus: Double   // 50.0

Response

This will returns an object of type FirstBonusCalculatorResponse.

  • totalProjectedSavingsIncludingBonuses: Double
  • totalProjectedSavings: Double
  • totalProjectedBonuses: Double
  • projectedSavingsFirstBonusPeriod: Double
  • projectedFirstBonus: Double
  • projectedAdditionalSavingsFinalBonusPeriod: Double
  • projectedFinalBonus: Double

Existing accounts in final term

FinalBonusTermCalculator.runFinalBonusCalculator(input)

Where input is of the type FinalBonusInput with the following parameters:

regularPayment: Double,                 // 25.0
currentBalance: Double,                 // 25.0
paidInThisMonth: Double,                // 50.0
canPayInThisMonth: Double,              // 0.0
thisMonthEndDate: YearMonthDayInput,    // YearMonthDayInput(2022, 3, 31)
secondTermEndDate: YearMonthDayInput,   // YearMonthDayInput(2024, 2, 28)
balanceMustBeMoreThanForBonus: Double,  // 50.0
secondTermBonusEstimate: Double         // 25.0

Response

This will returns an object of type FinalBonusCalculatorResponse.

  • totalProjectedSavingsIncludingBonuses: Double
  • totalProjectedSavings: Double
  • totalProjectedBonuses: Double
  • finalBonusStatus: FinalBonusStatus

Validation

To validate the monthly contributions:

val isValidRegularPayments        = RegularPaymentValidators.isValidRegularPayments(1000.0)      // true
val isAboveMinimumRegularPayments = RegularPaymentValidators.isAboveMinimumRegularPayments(0.0)  // false
val isBelowMaximumRegularPayments = RegularPaymentValidators.isBelowMaximumRegularPayments(50.0) // true

Usage

iOS

Swift Package Manager

Because this operates as a closed source, binary dependency, Swift PM will only work with tagged releases and not branches.

https://github.com/hmrc/help-to-save-kalculator

Simulator Architectures:

  • If the framework is downloaded and linked in the project, it'll be necessary to strip unwanted architectures in a build step.
    • For example, you may want to implement something like this.

Android & JVM

Add the Github Package repository to your top-level build.gradle, along with a Github username and access token (no permissions required).

repositories {
  maven {
    url = "https://maven.pkg.github.com/hmrc/help-to-save-kalculator"
    credentials {
      username = System.getenv("GITHUB_USER_NAME")
      password = System.getenv("GITHUB_TOKEN")
    }
  }
}

Add the dependency in the build.gradle of the module:

dependencies {
    implementation "uk.gov.hmrc:help-to-save-kalculator-jvm:x.y.z"
}

Release process

bundle exec fastlane tag_release

Required

  • A valid Bitrise access token saved in your path under the variable name BITRISE_TOKEN. See Bitrise docs.
  • Two environment variables, HTS_KALC_APP_SLUG & HTS_KALC_RELEASE_WORKFLOW_ID will also need to be included in your bash/ZSH profile. These can be found in Bitwarden.

Steps executed

  • Ensure git status is clean
  • Ensure main branch
  • Through the interactive shell, select the tag version using semantic versioning.
  • Locally executes build_xcframework.sh:
    • Creates an XCFramework
    • Computes and updates the checksum in the Swift Package declaration.
  • Stamps the changelog
  • Commit and push the updated Package.swift and CHANGELOG.md
  • Upload release artifacts to tagged Github release
  • Executes release.sh to start the CI pipeline on CI.

License

This code is open source software licensed under the Apache 2.0 License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors