au_loan_calculations 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 92c63ef9ede64da1ff83e5f31c5c43381904d6c1b826c497a9208b4326f8becb
4
+ data.tar.gz: 75dc94b341e28b6ed20cd39a174055de6dbf2044a210c6d9ad98ab23e2afb29b
5
+ SHA512:
6
+ metadata.gz: e3175a983c5ad867ecb92986b4c8d66bc37020e381bf9e5dadf9096265254ab1f7940f67561a1b8936803af713df3c29f1590649f4d7b90b44d6d9510e61d6d0
7
+ data.tar.gz: c81e2c4cfa1c1e397e999264e39b963601f15fbc56d0a9d5fff529ea52127f45d4f0cb59069a4332dfc304b39cae1a84b05229a80a3df382d0beea3e10591c29
@@ -0,0 +1,69 @@
1
+ # HomeLoan
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/home_loan`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'au_loan_calculations'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install au_loan_calculations
22
+
23
+ ## Usage
24
+
25
+ #### How to calculate monthly repayment for a Loan
26
+
27
+ To calculate the monthly repayment value for a loan call the following class method:
28
+
29
+ ```ruby
30
+ AuLoanCalculations::Loan.calculate_monthly_repayment(repayment_type, interest_rate, loan_amount, period=360, iop=0, future_value=0, type=0)
31
+ ```
32
+
33
+ #### How to convert an amount frequency
34
+
35
+ Convert an amount to other frequency:
36
+
37
+ ```ruby
38
+ AuLoanCalculations::Parse.convert_amount(amount, frequency, convert_to)
39
+ ```
40
+ The allowed values for **frequency** and **convert_to** are: `weekly`, `fortnightly`, `monthly` and `yearly`.
41
+
42
+
43
+ #### How to calculate the PAYG NET income value
44
+
45
+ To calculate the PAYG NET income value call the class method:
46
+
47
+ ```ruby
48
+ AuLoanCalculations::Income.calculate_payg_net_value(value, year*)
49
+ ```
50
+
51
+ The `year` parameter is optional. Its default value is the current year.
52
+
53
+ ## Development
54
+
55
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
56
+
57
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
58
+
59
+ ## Contributing
60
+
61
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/home_loan. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
62
+
63
+ ## License
64
+
65
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
66
+
67
+ ## Code of Conduct
68
+
69
+ Everyone interacting in the HomeLoan project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/home_loan/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,6 @@
1
+ min_value,max_value,threshold,tax_over_threshold,tax_per_dollar_over_threshold,medicare_levy_percentage
2
+ 0,18200,0,0,0,2
3
+ 18201,37000,18200,0,0.19,2
4
+ 37001,87000,37000,3572,0.325,2
5
+ 87001,180000,87000,19822,0.37,2
6
+ 180001,1000000000000,180000,54232,0.45,2
@@ -0,0 +1,10 @@
1
+ require "au_loan_calculations/exception/asset_not_found_error"
2
+
3
+ require "au_loan_calculations/version"
4
+ require "au_loan_calculations/loan"
5
+ require "au_loan_calculations/parse"
6
+ require "au_loan_calculations/income"
7
+
8
+ module AuLoanCalculations
9
+
10
+ end
@@ -0,0 +1,9 @@
1
+ module AuLoanCalculations
2
+ module Exception
3
+ class AssetNotFoundError < StandardError
4
+ def initialize(msg = 'Asset not found')
5
+ super
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,44 @@
1
+ require 'date'
2
+ require 'csv'
3
+
4
+ module AuLoanCalculations
5
+ class Income
6
+
7
+ def self.calculate_payg_net_value(value, year=Date.today.year)
8
+ begin
9
+ # income_tax_rates_file = CSV.read("vendor/assets/csvs/payg_tax_rates/#{year.to_s}.csv", { headers: true })
10
+ gem_path ||= File.expand_path '..', File.dirname(__FILE__)
11
+ assets_path ||= File.join gem_path, "../assets"
12
+ file = File.join assets_path, "csvs/payg_tax_rates/#{year.to_s}.csv"
13
+
14
+ income_tax_rates_file = CSV.read(file, { headers: true })
15
+
16
+ income_tax_rates_file.each do |income_tax_rate|
17
+
18
+ # check the income tax rate
19
+ if value >= income_tax_rate["min_value"].to_i && value <= income_tax_rate["max_value"].to_i
20
+
21
+ # calculate the taxable value
22
+ tax_over_threshold = value - income_tax_rate["threshold"].to_i
23
+
24
+ # sum the taxable value plus range tax value
25
+ tax_value = tax_over_threshold * income_tax_rate["tax_per_dollar_over_threshold"].to_f
26
+
27
+ # calculate medicare levy value
28
+ medicare_levy_value = (value * income_tax_rate["medicare_levy_percentage"].to_f) / 100
29
+
30
+ # calculate total tax (including medicare levy value)
31
+ total_tax = income_tax_rate["tax_over_threshold"].to_i + tax_value + medicare_levy_value
32
+
33
+ # income value - total tax
34
+ return (value - total_tax)
35
+ end
36
+ end
37
+
38
+ rescue Errno::ENOENT
39
+ raise AuLoanCalculations::Exception::AssetNotFoundError, "Unable to find the income tax rates for #{year}."
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,31 @@
1
+ module AuLoanCalculations
2
+ class Loan
3
+
4
+ # period - number of periods (months)
5
+ # interest_only_period - interest only period (years)
6
+ # type - when the payments are due:
7
+ # 0: end of the period, e.g. end of month (default)
8
+ # 1: beginning of period
9
+ def self.calculate_monthly_repayment(repayment_type, interest_rate, loan_amount, period=360, iop=0, future_value=0, type=0)
10
+ interest_rate = (interest_rate / 100) / 12
11
+
12
+ if repayment_type == "interest_only"
13
+ interest_only_period = iop
14
+ period = period - (interest_only_period * 12)
15
+ else
16
+ period = period
17
+ end
18
+
19
+
20
+ return -(loan_amount + future_value)/period if interest_rate == 0
21
+
22
+ pvif = ((1 + interest_rate) ** period)
23
+ pmt = - interest_rate * loan_amount * ( pvif + future_value ) / ( pvif - 1 )
24
+
25
+ pmt = pmt / (1 + interest_rate) if type == 1
26
+
27
+ return pmt.round(2).abs
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,62 @@
1
+ module AuLoanCalculations
2
+ class Parse
3
+
4
+ # the amount to be converted.
5
+ # the current frequency - allowed values: weekly, fortnightly, monthly, yearly
6
+ # the frequency the amount should be converted - allowed values: weekly, fortnightly, monthly, yearly
7
+ def self.convert_amount(amount, frequency, convert_to)
8
+ value = case convert_to
9
+ when 'weekly'
10
+ case frequency
11
+ when 'fortnightly'
12
+ amount / 2
13
+ when 'monthly'
14
+ (amount * 12) / 52
15
+ when 'yearly'
16
+ amount / 52
17
+ else
18
+ amount
19
+ end
20
+
21
+ when 'fortnightly'
22
+ case frequency
23
+ when 'weekly'
24
+ amount * 2
25
+ when 'monthly'
26
+ (amount * 12) / 26
27
+ when 'yearly'
28
+ amount / 26
29
+ else
30
+ amount
31
+ end
32
+
33
+ when 'monthly'
34
+ case frequency
35
+ when 'weekly'
36
+ (amount * 52) / 12
37
+ when 'fortnightly'
38
+ (amount * 26) / 12
39
+ when 'yearly'
40
+ amount / 12
41
+ else
42
+ amount
43
+ end
44
+
45
+ when 'yearly'
46
+ case frequency
47
+ when 'weekly'
48
+ amount * 52
49
+ when 'fortnightly'
50
+ amount * 26
51
+ when 'monthly'
52
+ amount * 12
53
+ else
54
+ amount
55
+ end
56
+ end
57
+
58
+ value.round(2)
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module AuLoanCalculations
2
+ VERSION = "0.1.6"
3
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: au_loan_calculations
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6
5
+ platform: ruby
6
+ authors:
7
+ - Andre Possebom
8
+ - Pedro Pereira Santos
9
+ - Rod Dutra
10
+ autorequire:
11
+ bindir: exe
12
+ cert_chain: []
13
+ date: 2018-02-20 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.16'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.16'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rake
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '10.0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '10.0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rspec
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '3.0'
57
+ description: AuLoanCalculations library contains a couple of useful functions for
58
+ Austrlian home loans.
59
+ email:
60
+ - andre@loandolphin.com.au
61
+ - pedro@loandolphin.com.au
62
+ - rod@loandolphin.com.au
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - README.md
68
+ - assets/csvs/payg_tax_rates/2018.csv
69
+ - lib/au_loan_calculations.rb
70
+ - lib/au_loan_calculations/exception/asset_not_found_error.rb
71
+ - lib/au_loan_calculations/income.rb
72
+ - lib/au_loan_calculations/loan.rb
73
+ - lib/au_loan_calculations/parse.rb
74
+ - lib/au_loan_calculations/version.rb
75
+ homepage: https://github.com/possebom/au_loan_calculations_gem
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.7.5
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: This gem contains home loan functions for Australian market.
99
+ test_files: []