hydrogen-proton-api 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +7 -0
  3. data/README.md +82 -0
  4. data/Rakefile +8 -0
  5. data/git_push.sh +55 -0
  6. data/lib/proton_api.rb +141 -0
  7. data/lib/proton_api/api/annuities_api.rb +347 -0
  8. data/lib/proton_api/api/business_financial_management_api.rb +293 -0
  9. data/lib/proton_api/api/cards_api.rb +185 -0
  10. data/lib/proton_api/api/financial_health_api.rb +239 -0
  11. data/lib/proton_api/api/financial_planning_api.rb +671 -0
  12. data/lib/proton_api/api/goals_api.rb +347 -0
  13. data/lib/proton_api/api/life_insurance_api.rb +77 -0
  14. data/lib/proton_api/api/personal_financial_management_api.rb +347 -0
  15. data/lib/proton_api/api/portfolio_construction_api.rb +77 -0
  16. data/lib/proton_api/api/portfolio_management_api.rb +77 -0
  17. data/lib/proton_api/api/risk_scoring_api.rb +185 -0
  18. data/lib/proton_api/api/simulations_api.rb +401 -0
  19. data/lib/proton_api/api/util_api.rb +185 -0
  20. data/lib/proton_api/api_client.rb +391 -0
  21. data/lib/proton_api/api_error.rb +38 -0
  22. data/lib/proton_api/auth_configuration.rb +181 -0
  23. data/lib/proton_api/configuration.rb +209 -0
  24. data/lib/proton_api/environment.rb +36 -0
  25. data/lib/proton_api/models/accumulation_goal_deposit_config.rb +338 -0
  26. data/lib/proton_api/models/annuity_calculator_accumulation_horizon_request.rb +459 -0
  27. data/lib/proton_api/models/annuity_calculator_annuity_amount_request.rb +461 -0
  28. data/lib/proton_api/models/annuity_calculator_decumulation_horizon_request.rb +459 -0
  29. data/lib/proton_api/models/annuity_calculator_deposit_amount_request.rb +468 -0
  30. data/lib/proton_api/models/annuity_calculator_initial_balance_request.rb +468 -0
  31. data/lib/proton_api/models/annuity_deposit_schedule.rb +254 -0
  32. data/lib/proton_api/models/answer.rb +186 -0
  33. data/lib/proton_api/models/backtest_request.rb +295 -0
  34. data/lib/proton_api/models/beneficiary_bequest_config.rb +257 -0
  35. data/lib/proton_api/models/budget_aggregation_account.rb +186 -0
  36. data/lib/proton_api/models/budget_calculator_request.rb +334 -0
  37. data/lib/proton_api/models/budget_component.rb +228 -0
  38. data/lib/proton_api/models/budget_details.rb +337 -0
  39. data/lib/proton_api/models/business_financial_health_check_request.rb +484 -0
  40. data/lib/proton_api/models/business_invoice_analysis_request.rb +361 -0
  41. data/lib/proton_api/models/calculator_deposit_schedule.rb +228 -0
  42. data/lib/proton_api/models/calculator_deposit_schedule1.rb +254 -0
  43. data/lib/proton_api/models/card_analysis_request.rb +372 -0
  44. data/lib/proton_api/models/card_limit_check_request.rb +231 -0
  45. data/lib/proton_api/models/card_transaction_authorization_request.rb +422 -0
  46. data/lib/proton_api/models/cash_analysis_request.rb +340 -0
  47. data/lib/proton_api/models/cash_flow_analysis_request.rb +366 -0
  48. data/lib/proton_api/models/children_education_config.rb +221 -0
  49. data/lib/proton_api/models/customer_analysis_request.rb +292 -0
  50. data/lib/proton_api/models/decision_tree_result_request.rb +236 -0
  51. data/lib/proton_api/models/decumulation_goal_deposit_config.rb +335 -0
  52. data/lib/proton_api/models/dimensional_risk_score_request.rb +282 -0
  53. data/lib/proton_api/models/diversification_score_request.rb +324 -0
  54. data/lib/proton_api/models/education_calculator_annual_cost_request.rb +450 -0
  55. data/lib/proton_api/models/education_calculator_deposit_amount_request.rb +483 -0
  56. data/lib/proton_api/models/education_calculator_percent_covered_request.rb +448 -0
  57. data/lib/proton_api/models/education_config.rb +271 -0
  58. data/lib/proton_api/models/emergency_fund_calculator_request.rb +561 -0
  59. data/lib/proton_api/models/event_study_request.rb +317 -0
  60. data/lib/proton_api/models/fee_analysis_request.rb +239 -0
  61. data/lib/proton_api/models/financial_health_check_request.rb +384 -0
  62. data/lib/proton_api/models/financial_picture_request.rb +270 -0
  63. data/lib/proton_api/models/financial_statement_analysis_request.rb +461 -0
  64. data/lib/proton_api/models/goal_accumulation_allocation_request.rb +729 -0
  65. data/lib/proton_api/models/goal_accumulation_recommendation_request.rb +622 -0
  66. data/lib/proton_api/models/goal_accumulation_status_request.rb +622 -0
  67. data/lib/proton_api/models/goal_config.rb +222 -0
  68. data/lib/proton_api/models/goal_decumulation_allocation_request.rb +764 -0
  69. data/lib/proton_api/models/goal_decumulation_recommendation_request.rb +657 -0
  70. data/lib/proton_api/models/goal_decumulation_status_request.rb +657 -0
  71. data/lib/proton_api/models/goal_withdrawal_config.rb +335 -0
  72. data/lib/proton_api/models/guaranteed_rate_benefit.rb +272 -0
  73. data/lib/proton_api/models/income_config.rb +266 -0
  74. data/lib/proton_api/models/life_insurance_needs_calculator_request.rb +515 -0
  75. data/lib/proton_api/models/location.rb +183 -0
  76. data/lib/proton_api/models/monte_carlo_request.rb +504 -0
  77. data/lib/proton_api/models/mortgage_calculator_down_payment_request.rb +299 -0
  78. data/lib/proton_api/models/mortgage_calculator_home_price_request.rb +299 -0
  79. data/lib/proton_api/models/mortgage_calculator_periodic_payment_request.rb +299 -0
  80. data/lib/proton_api/models/mvo_request.rb +366 -0
  81. data/lib/proton_api/models/opt_config.rb +300 -0
  82. data/lib/proton_api/models/opt_config1.rb +260 -0
  83. data/lib/proton_api/models/order_rebalance_request.rb +398 -0
  84. data/lib/proton_api/models/performance_calculator_request.rb +687 -0
  85. data/lib/proton_api/models/periods.rb +220 -0
  86. data/lib/proton_api/models/portfolio_optimization_score_request.rb +356 -0
  87. data/lib/proton_api/models/portfolio_what_if_request.rb +351 -0
  88. data/lib/proton_api/models/purchase_calculator_amount_request.rb +401 -0
  89. data/lib/proton_api/models/purchase_calculator_deposit_amount_request.rb +434 -0
  90. data/lib/proton_api/models/purchase_calculator_horizon_request.rb +356 -0
  91. data/lib/proton_api/models/ratio_targets.rb +328 -0
  92. data/lib/proton_api/models/ratio_targets1.rb +328 -0
  93. data/lib/proton_api/models/rebalancing_signal_request.rb +238 -0
  94. data/lib/proton_api/models/recommendation_config.rb +357 -0
  95. data/lib/proton_api/models/recommendation_config1.rb +346 -0
  96. data/lib/proton_api/models/recurring_transaction_analysis_request.rb +400 -0
  97. data/lib/proton_api/models/retirement_calculator_deposit_amount_request.rb +509 -0
  98. data/lib/proton_api/models/retirement_calculator_expenses_request.rb +476 -0
  99. data/lib/proton_api/models/retirement_calculator_percent_covered_request.rb +474 -0
  100. data/lib/proton_api/models/risk_allocation_request.rb +316 -0
  101. data/lib/proton_api/models/risk_score_request.rb +239 -0
  102. data/lib/proton_api/models/savings_calculator_request.rb +395 -0
  103. data/lib/proton_api/models/savings_deposit_schedule.rb +276 -0
  104. data/lib/proton_api/models/scenario_analysis_request.rb +401 -0
  105. data/lib/proton_api/models/sensitivity_analysis_request.rb +399 -0
  106. data/lib/proton_api/models/sensitivity_factor.rb +278 -0
  107. data/lib/proton_api/models/settings.rb +287 -0
  108. data/lib/proton_api/models/spending_analysis_request.rb +505 -0
  109. data/lib/proton_api/models/variable_annuity_request.rb +700 -0
  110. data/lib/proton_api/models/w_config.rb +382 -0
  111. data/lib/proton_api/models/w_config1.rb +347 -0
  112. data/lib/proton_api/version.rb +15 -0
  113. data/proton_api.gemspec +46 -0
  114. data/spec/api/annuities_api_spec.rb +107 -0
  115. data/spec/api/business_financial_management_api_spec.rb +95 -0
  116. data/spec/api/cards_api_spec.rb +71 -0
  117. data/spec/api/financial_health_api_spec.rb +83 -0
  118. data/spec/api/financial_planning_api_spec.rb +179 -0
  119. data/spec/api/goals_api_spec.rb +107 -0
  120. data/spec/api/life_insurance_api_spec.rb +47 -0
  121. data/spec/api/personal_financial_management_api_spec.rb +107 -0
  122. data/spec/api/portfolio_construction_api_spec.rb +47 -0
  123. data/spec/api/portfolio_management_api_spec.rb +47 -0
  124. data/spec/api/risk_scoring_api_spec.rb +71 -0
  125. data/spec/api/simulations_api_spec.rb +119 -0
  126. data/spec/api/util_api_spec.rb +71 -0
  127. data/spec/api_client_spec.rb +243 -0
  128. data/spec/configuration_spec.rb +42 -0
  129. data/spec/models/accumulation_goal_deposit_config_spec.rb +89 -0
  130. data/spec/models/annuity_calculator_accumulation_horizon_request_spec.rb +111 -0
  131. data/spec/models/annuity_calculator_annuity_amount_request_spec.rb +111 -0
  132. data/spec/models/annuity_calculator_decumulation_horizon_request_spec.rb +111 -0
  133. data/spec/models/annuity_calculator_deposit_amount_request_spec.rb +111 -0
  134. data/spec/models/annuity_calculator_initial_balance_request_spec.rb +111 -0
  135. data/spec/models/annuity_deposit_schedule_spec.rb +57 -0
  136. data/spec/models/answer_spec.rb +41 -0
  137. data/spec/models/backtest_request_spec.rb +95 -0
  138. data/spec/models/beneficiary_bequest_config_spec.rb +53 -0
  139. data/spec/models/budget_aggregation_account_spec.rb +41 -0
  140. data/spec/models/budget_calculator_request_spec.rb +105 -0
  141. data/spec/models/budget_component_spec.rb +53 -0
  142. data/spec/models/budget_details_spec.rb +99 -0
  143. data/spec/models/business_financial_health_check_request_spec.rb +143 -0
  144. data/spec/models/business_invoice_analysis_request_spec.rb +123 -0
  145. data/spec/models/calculator_deposit_schedule1_spec.rb +57 -0
  146. data/spec/models/calculator_deposit_schedule_spec.rb +51 -0
  147. data/spec/models/card_analysis_request_spec.rb +129 -0
  148. data/spec/models/card_limit_check_request_spec.rb +65 -0
  149. data/spec/models/card_transaction_authorization_request_spec.rb +157 -0
  150. data/spec/models/cash_analysis_request_spec.rb +115 -0
  151. data/spec/models/cash_flow_analysis_request_spec.rb +135 -0
  152. data/spec/models/children_education_config_spec.rb +47 -0
  153. data/spec/models/customer_analysis_request_spec.rb +101 -0
  154. data/spec/models/decision_tree_result_request_spec.rb +51 -0
  155. data/spec/models/decumulation_goal_deposit_config_spec.rb +89 -0
  156. data/spec/models/dimensional_risk_score_request_spec.rb +89 -0
  157. data/spec/models/diversification_score_request_spec.rb +111 -0
  158. data/spec/models/education_calculator_annual_cost_request_spec.rb +101 -0
  159. data/spec/models/education_calculator_deposit_amount_request_spec.rb +107 -0
  160. data/spec/models/education_calculator_percent_covered_request_spec.rb +101 -0
  161. data/spec/models/education_config_spec.rb +53 -0
  162. data/spec/models/emergency_fund_calculator_request_spec.rb +141 -0
  163. data/spec/models/event_study_request_spec.rb +109 -0
  164. data/spec/models/fee_analysis_request_spec.rb +77 -0
  165. data/spec/models/financial_health_check_request_spec.rb +95 -0
  166. data/spec/models/financial_picture_request_spec.rb +95 -0
  167. data/spec/models/financial_statement_analysis_request_spec.rb +155 -0
  168. data/spec/models/goal_accumulation_allocation_request_spec.rb +215 -0
  169. data/spec/models/goal_accumulation_recommendation_request_spec.rb +173 -0
  170. data/spec/models/goal_accumulation_status_request_spec.rb +173 -0
  171. data/spec/models/goal_config_spec.rb +47 -0
  172. data/spec/models/goal_decumulation_allocation_request_spec.rb +221 -0
  173. data/spec/models/goal_decumulation_recommendation_request_spec.rb +179 -0
  174. data/spec/models/goal_decumulation_status_request_spec.rb +179 -0
  175. data/spec/models/goal_withdrawal_config_spec.rb +89 -0
  176. data/spec/models/guaranteed_rate_benefit_spec.rb +59 -0
  177. data/spec/models/income_config_spec.rb +53 -0
  178. data/spec/models/life_insurance_needs_calculator_request_spec.rb +125 -0
  179. data/spec/models/location_spec.rb +41 -0
  180. data/spec/models/monte_carlo_request_spec.rb +179 -0
  181. data/spec/models/mortgage_calculator_down_payment_request_spec.rb +59 -0
  182. data/spec/models/mortgage_calculator_home_price_request_spec.rb +59 -0
  183. data/spec/models/mortgage_calculator_periodic_payment_request_spec.rb +59 -0
  184. data/spec/models/mvo_request_spec.rb +113 -0
  185. data/spec/models/opt_config1_spec.rb +69 -0
  186. data/spec/models/opt_config_spec.rb +81 -0
  187. data/spec/models/order_rebalance_request_spec.rb +123 -0
  188. data/spec/models/performance_calculator_request_spec.rb +233 -0
  189. data/spec/models/periods_spec.rb +47 -0
  190. data/spec/models/portfolio_optimization_score_request_spec.rb +127 -0
  191. data/spec/models/portfolio_what_if_request_spec.rb +123 -0
  192. data/spec/models/purchase_calculator_amount_request_spec.rb +93 -0
  193. data/spec/models/purchase_calculator_deposit_amount_request_spec.rb +99 -0
  194. data/spec/models/purchase_calculator_horizon_request_spec.rb +83 -0
  195. data/spec/models/ratio_targets1_spec.rb +71 -0
  196. data/spec/models/ratio_targets_spec.rb +71 -0
  197. data/spec/models/rebalancing_signal_request_spec.rb +71 -0
  198. data/spec/models/recommendation_config1_spec.rb +77 -0
  199. data/spec/models/recommendation_config_spec.rb +83 -0
  200. data/spec/models/recurring_transaction_analysis_request_spec.rb +129 -0
  201. data/spec/models/retirement_calculator_deposit_amount_request_spec.rb +113 -0
  202. data/spec/models/retirement_calculator_expenses_request_spec.rb +107 -0
  203. data/spec/models/retirement_calculator_percent_covered_request_spec.rb +107 -0
  204. data/spec/models/risk_allocation_request_spec.rb +85 -0
  205. data/spec/models/risk_score_request_spec.rb +71 -0
  206. data/spec/models/savings_calculator_request_spec.rb +99 -0
  207. data/spec/models/savings_deposit_schedule_spec.rb +63 -0
  208. data/spec/models/scenario_analysis_request_spec.rb +133 -0
  209. data/spec/models/sensitivity_analysis_request_spec.rb +133 -0
  210. data/spec/models/sensitivity_factor_spec.rb +59 -0
  211. data/spec/models/settings_spec.rb +79 -0
  212. data/spec/models/spending_analysis_request_spec.rb +187 -0
  213. data/spec/models/variable_annuity_request_spec.rb +209 -0
  214. data/spec/models/w_config1_spec.rb +65 -0
  215. data/spec/models/w_config_spec.rb +65 -0
  216. data/spec/spec_helper.rb +111 -0
  217. metadata +561 -0
@@ -0,0 +1,450 @@
1
+ =begin
2
+ #Hydrogen Proton API
3
+
4
+ #Financial engineering module of Hydrogen Atom
5
+
6
+ OpenAPI spec version: 1.9.1
7
+ Contact: info@hydrogenplatform.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.19
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module ProtonApi
16
+ class EducationCalculatorAnnualCostRequest
17
+ attr_accessor :education_inflation_rate
18
+
19
+ attr_accessor :decumulation_horizon
20
+
21
+ attr_accessor :accumulation_horizon
22
+
23
+ attr_accessor :account_ids
24
+
25
+ attr_accessor :tax_rate
26
+
27
+ attr_accessor :general_inflation_rate
28
+
29
+ attr_accessor :portfolio_return
30
+
31
+ attr_accessor :deposit_schedule
32
+
33
+ attr_accessor :initial_balance
34
+
35
+ attr_accessor :percent_of_costs_covered
36
+
37
+ attr_accessor :aggregation_account_ids
38
+
39
+ # Attribute mapping from ruby-style variable name to JSON key.
40
+ def self.attribute_map
41
+ {
42
+ :'education_inflation_rate' => :'education_inflation_rate',
43
+ :'decumulation_horizon' => :'decumulation_horizon',
44
+ :'accumulation_horizon' => :'accumulation_horizon',
45
+ :'account_ids' => :'account_ids',
46
+ :'tax_rate' => :'tax_rate',
47
+ :'general_inflation_rate' => :'general_inflation_rate',
48
+ :'portfolio_return' => :'portfolio_return',
49
+ :'deposit_schedule' => :'deposit_schedule',
50
+ :'initial_balance' => :'initial_balance',
51
+ :'percent_of_costs_covered' => :'percent_of_costs_covered',
52
+ :'aggregation_account_ids' => :'aggregation_account_ids'
53
+ }
54
+ end
55
+
56
+ # Attribute type mapping.
57
+ def self.swagger_types
58
+ {
59
+ :'education_inflation_rate' => :'Float',
60
+ :'decumulation_horizon' => :'Integer',
61
+ :'accumulation_horizon' => :'Integer',
62
+ :'account_ids' => :'Array<String>',
63
+ :'tax_rate' => :'Float',
64
+ :'general_inflation_rate' => :'Float',
65
+ :'portfolio_return' => :'Float',
66
+ :'deposit_schedule' => :'CalculatorDepositSchedule1',
67
+ :'initial_balance' => :'Float',
68
+ :'percent_of_costs_covered' => :'Float',
69
+ :'aggregation_account_ids' => :'Array<String>'
70
+ }
71
+ end
72
+
73
+ # Initializes the object
74
+ # @param [Hash] attributes Model attributes in the form of hash
75
+ def initialize(attributes = {})
76
+ return unless attributes.is_a?(Hash)
77
+
78
+ # convert string to symbol for hash key
79
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
80
+
81
+ if attributes.has_key?(:'education_inflation_rate')
82
+ self.education_inflation_rate = attributes[:'education_inflation_rate']
83
+ else
84
+ self.education_inflation_rate = 0.05
85
+ end
86
+
87
+ if attributes.has_key?(:'decumulation_horizon')
88
+ self.decumulation_horizon = attributes[:'decumulation_horizon']
89
+ end
90
+
91
+ if attributes.has_key?(:'accumulation_horizon')
92
+ self.accumulation_horizon = attributes[:'accumulation_horizon']
93
+ end
94
+
95
+ if attributes.has_key?(:'account_ids')
96
+ if (value = attributes[:'account_ids']).is_a?(Array)
97
+ self.account_ids = value
98
+ end
99
+ end
100
+
101
+ if attributes.has_key?(:'tax_rate')
102
+ self.tax_rate = attributes[:'tax_rate']
103
+ else
104
+ self.tax_rate = 0.0
105
+ end
106
+
107
+ if attributes.has_key?(:'general_inflation_rate')
108
+ self.general_inflation_rate = attributes[:'general_inflation_rate']
109
+ else
110
+ self.general_inflation_rate = 0.0
111
+ end
112
+
113
+ if attributes.has_key?(:'portfolio_return')
114
+ self.portfolio_return = attributes[:'portfolio_return']
115
+ end
116
+
117
+ if attributes.has_key?(:'deposit_schedule')
118
+ self.deposit_schedule = attributes[:'deposit_schedule']
119
+ end
120
+
121
+ if attributes.has_key?(:'initial_balance')
122
+ self.initial_balance = attributes[:'initial_balance']
123
+ else
124
+ self.initial_balance = 0.0
125
+ end
126
+
127
+ if attributes.has_key?(:'percent_of_costs_covered')
128
+ self.percent_of_costs_covered = attributes[:'percent_of_costs_covered']
129
+ else
130
+ self.percent_of_costs_covered = 1.0
131
+ end
132
+
133
+ if attributes.has_key?(:'aggregation_account_ids')
134
+ if (value = attributes[:'aggregation_account_ids']).is_a?(Array)
135
+ self.aggregation_account_ids = value
136
+ end
137
+ end
138
+ end
139
+
140
+ # Show invalid properties with the reasons. Usually used together with valid?
141
+ # @return Array for valid properties with the reasons
142
+ def list_invalid_properties
143
+ invalid_properties = Array.new
144
+ if !@education_inflation_rate.nil? && @education_inflation_rate < -1
145
+ invalid_properties.push('invalid value for "education_inflation_rate", must be greater than or equal to -1.')
146
+ end
147
+
148
+ if @decumulation_horizon.nil?
149
+ invalid_properties.push('invalid value for "decumulation_horizon", decumulation_horizon cannot be nil.')
150
+ end
151
+
152
+ if @decumulation_horizon < 0
153
+ invalid_properties.push('invalid value for "decumulation_horizon", must be greater than or equal to 0.')
154
+ end
155
+
156
+ if @accumulation_horizon.nil?
157
+ invalid_properties.push('invalid value for "accumulation_horizon", accumulation_horizon cannot be nil.')
158
+ end
159
+
160
+ if @accumulation_horizon < 0
161
+ invalid_properties.push('invalid value for "accumulation_horizon", must be greater than or equal to 0.')
162
+ end
163
+
164
+ if !@tax_rate.nil? && @tax_rate > 1
165
+ invalid_properties.push('invalid value for "tax_rate", must be smaller than or equal to 1.')
166
+ end
167
+
168
+ if !@tax_rate.nil? && @tax_rate < 0
169
+ invalid_properties.push('invalid value for "tax_rate", must be greater than or equal to 0.')
170
+ end
171
+
172
+ if !@general_inflation_rate.nil? && @general_inflation_rate < -1
173
+ invalid_properties.push('invalid value for "general_inflation_rate", must be greater than or equal to -1.')
174
+ end
175
+
176
+ if @portfolio_return.nil?
177
+ invalid_properties.push('invalid value for "portfolio_return", portfolio_return cannot be nil.')
178
+ end
179
+
180
+ if @portfolio_return < -1
181
+ invalid_properties.push('invalid value for "portfolio_return", must be greater than or equal to -1.')
182
+ end
183
+
184
+ if !@initial_balance.nil? && @initial_balance < 0
185
+ invalid_properties.push('invalid value for "initial_balance", must be greater than or equal to 0.')
186
+ end
187
+
188
+ if !@percent_of_costs_covered.nil? && @percent_of_costs_covered > 1
189
+ invalid_properties.push('invalid value for "percent_of_costs_covered", must be smaller than or equal to 1.')
190
+ end
191
+
192
+ if !@percent_of_costs_covered.nil? && @percent_of_costs_covered < 0
193
+ invalid_properties.push('invalid value for "percent_of_costs_covered", must be greater than or equal to 0.')
194
+ end
195
+
196
+ invalid_properties
197
+ end
198
+
199
+ # Check to see if the all the properties in the model are valid
200
+ # @return true if the model is valid
201
+ def valid?
202
+ return false if !@education_inflation_rate.nil? && @education_inflation_rate < -1
203
+ return false if @decumulation_horizon.nil?
204
+ return false if @decumulation_horizon < 0
205
+ return false if @accumulation_horizon.nil?
206
+ return false if @accumulation_horizon < 0
207
+ return false if !@tax_rate.nil? && @tax_rate > 1
208
+ return false if !@tax_rate.nil? && @tax_rate < 0
209
+ return false if !@general_inflation_rate.nil? && @general_inflation_rate < -1
210
+ return false if @portfolio_return.nil?
211
+ return false if @portfolio_return < -1
212
+ return false if !@initial_balance.nil? && @initial_balance < 0
213
+ return false if !@percent_of_costs_covered.nil? && @percent_of_costs_covered > 1
214
+ return false if !@percent_of_costs_covered.nil? && @percent_of_costs_covered < 0
215
+ true
216
+ end
217
+
218
+ # Custom attribute writer method with validation
219
+ # @param [Object] education_inflation_rate Value to be assigned
220
+ def education_inflation_rate=(education_inflation_rate)
221
+ if !education_inflation_rate.nil? && education_inflation_rate < -1
222
+ fail ArgumentError, 'invalid value for "education_inflation_rate", must be greater than or equal to -1.'
223
+ end
224
+
225
+ @education_inflation_rate = education_inflation_rate
226
+ end
227
+
228
+ # Custom attribute writer method with validation
229
+ # @param [Object] decumulation_horizon Value to be assigned
230
+ def decumulation_horizon=(decumulation_horizon)
231
+ if decumulation_horizon.nil?
232
+ fail ArgumentError, 'decumulation_horizon cannot be nil'
233
+ end
234
+
235
+ if decumulation_horizon < 0
236
+ fail ArgumentError, 'invalid value for "decumulation_horizon", must be greater than or equal to 0.'
237
+ end
238
+
239
+ @decumulation_horizon = decumulation_horizon
240
+ end
241
+
242
+ # Custom attribute writer method with validation
243
+ # @param [Object] accumulation_horizon Value to be assigned
244
+ def accumulation_horizon=(accumulation_horizon)
245
+ if accumulation_horizon.nil?
246
+ fail ArgumentError, 'accumulation_horizon cannot be nil'
247
+ end
248
+
249
+ if accumulation_horizon < 0
250
+ fail ArgumentError, 'invalid value for "accumulation_horizon", must be greater than or equal to 0.'
251
+ end
252
+
253
+ @accumulation_horizon = accumulation_horizon
254
+ end
255
+
256
+ # Custom attribute writer method with validation
257
+ # @param [Object] tax_rate Value to be assigned
258
+ def tax_rate=(tax_rate)
259
+ if !tax_rate.nil? && tax_rate > 1
260
+ fail ArgumentError, 'invalid value for "tax_rate", must be smaller than or equal to 1.'
261
+ end
262
+
263
+ if !tax_rate.nil? && tax_rate < 0
264
+ fail ArgumentError, 'invalid value for "tax_rate", must be greater than or equal to 0.'
265
+ end
266
+
267
+ @tax_rate = tax_rate
268
+ end
269
+
270
+ # Custom attribute writer method with validation
271
+ # @param [Object] general_inflation_rate Value to be assigned
272
+ def general_inflation_rate=(general_inflation_rate)
273
+ if !general_inflation_rate.nil? && general_inflation_rate < -1
274
+ fail ArgumentError, 'invalid value for "general_inflation_rate", must be greater than or equal to -1.'
275
+ end
276
+
277
+ @general_inflation_rate = general_inflation_rate
278
+ end
279
+
280
+ # Custom attribute writer method with validation
281
+ # @param [Object] portfolio_return Value to be assigned
282
+ def portfolio_return=(portfolio_return)
283
+ if portfolio_return.nil?
284
+ fail ArgumentError, 'portfolio_return cannot be nil'
285
+ end
286
+
287
+ if portfolio_return < -1
288
+ fail ArgumentError, 'invalid value for "portfolio_return", must be greater than or equal to -1.'
289
+ end
290
+
291
+ @portfolio_return = portfolio_return
292
+ end
293
+
294
+ # Custom attribute writer method with validation
295
+ # @param [Object] initial_balance Value to be assigned
296
+ def initial_balance=(initial_balance)
297
+ if !initial_balance.nil? && initial_balance < 0
298
+ fail ArgumentError, 'invalid value for "initial_balance", must be greater than or equal to 0.'
299
+ end
300
+
301
+ @initial_balance = initial_balance
302
+ end
303
+
304
+ # Custom attribute writer method with validation
305
+ # @param [Object] percent_of_costs_covered Value to be assigned
306
+ def percent_of_costs_covered=(percent_of_costs_covered)
307
+ if !percent_of_costs_covered.nil? && percent_of_costs_covered > 1
308
+ fail ArgumentError, 'invalid value for "percent_of_costs_covered", must be smaller than or equal to 1.'
309
+ end
310
+
311
+ if !percent_of_costs_covered.nil? && percent_of_costs_covered < 0
312
+ fail ArgumentError, 'invalid value for "percent_of_costs_covered", must be greater than or equal to 0.'
313
+ end
314
+
315
+ @percent_of_costs_covered = percent_of_costs_covered
316
+ end
317
+
318
+ # Checks equality by comparing each attribute.
319
+ # @param [Object] Object to be compared
320
+ def ==(o)
321
+ return true if self.equal?(o)
322
+ self.class == o.class &&
323
+ education_inflation_rate == o.education_inflation_rate &&
324
+ decumulation_horizon == o.decumulation_horizon &&
325
+ accumulation_horizon == o.accumulation_horizon &&
326
+ account_ids == o.account_ids &&
327
+ tax_rate == o.tax_rate &&
328
+ general_inflation_rate == o.general_inflation_rate &&
329
+ portfolio_return == o.portfolio_return &&
330
+ deposit_schedule == o.deposit_schedule &&
331
+ initial_balance == o.initial_balance &&
332
+ percent_of_costs_covered == o.percent_of_costs_covered &&
333
+ aggregation_account_ids == o.aggregation_account_ids
334
+ end
335
+
336
+ # @see the `==` method
337
+ # @param [Object] Object to be compared
338
+ def eql?(o)
339
+ self == o
340
+ end
341
+
342
+ # Calculates hash code according to all attributes.
343
+ # @return [Fixnum] Hash code
344
+ def hash
345
+ [education_inflation_rate, decumulation_horizon, accumulation_horizon, account_ids, tax_rate, general_inflation_rate, portfolio_return, deposit_schedule, initial_balance, percent_of_costs_covered, aggregation_account_ids].hash
346
+ end
347
+
348
+ # Builds the object from hash
349
+ # @param [Hash] attributes Model attributes in the form of hash
350
+ # @return [Object] Returns the model itself
351
+ def build_from_hash(attributes)
352
+ return nil unless attributes.is_a?(Hash)
353
+ self.class.swagger_types.each_pair do |key, type|
354
+ if type =~ /\AArray<(.*)>/i
355
+ # check to ensure the input is an array given that the attribute
356
+ # is documented as an array but the input is not
357
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
358
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
359
+ end
360
+ elsif !attributes[self.class.attribute_map[key]].nil?
361
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
362
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
363
+ end
364
+
365
+ self
366
+ end
367
+ # Deserializes the data based on type
368
+ # @param string type Data type
369
+ # @param string value Value to be deserialized
370
+ # @return [Object] Deserialized data
371
+ def _deserialize(type, value)
372
+ case type.to_sym
373
+ when :DateTime
374
+ value
375
+ when :Date
376
+ value
377
+ when :String
378
+ value.to_s
379
+ when :Integer
380
+ value.to_i
381
+ when :Float
382
+ value.to_f
383
+ when :BOOLEAN
384
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
385
+ true
386
+ else
387
+ false
388
+ end
389
+ when :Object
390
+ # generic object (usually a Hash), return directly
391
+ value
392
+ when /\AArray<(?<inner_type>.+)>\z/
393
+ inner_type = Regexp.last_match[:inner_type]
394
+ value.map { |v| _deserialize(inner_type, v) }
395
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
396
+ k_type = Regexp.last_match[:k_type]
397
+ v_type = Regexp.last_match[:v_type]
398
+ {}.tap do |hash|
399
+ value.each do |k, v|
400
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
401
+ end
402
+ end
403
+ else # model
404
+ temp_model = ProtonApi.const_get(type).new
405
+ temp_model.build_from_hash(value)
406
+ end
407
+ end
408
+ # Returns the string representation of the object
409
+ # @return [String] String presentation of the object
410
+ def to_s
411
+ to_hash.to_s
412
+ end
413
+
414
+ # to_body is an alias to to_hash (backward compatibility)
415
+ # @return [Hash] Returns the object in the form of hash
416
+ def to_body
417
+ to_hash
418
+ end
419
+
420
+ # Returns the object in the form of hash
421
+ # @return [Hash] Returns the object in the form of hash
422
+ def to_hash
423
+ hash = {}
424
+ self.class.attribute_map.each_pair do |attr, param|
425
+ value = self.send(attr)
426
+ next if value.nil?
427
+ hash[param] = _to_hash(value)
428
+ end
429
+ hash
430
+ end
431
+ # Outputs non-array value in the form of hash
432
+ # For object, use to_hash. Otherwise, just return the value
433
+ # @param [Object] value Any valid value
434
+ # @return [Hash] Returns the value in the form of hash
435
+ def _to_hash(value)
436
+ if value.is_a?(Array)
437
+ value.compact.map { |v| _to_hash(v) }
438
+ elsif value.is_a?(Hash)
439
+ {}.tap do |hash|
440
+ value.each { |k, v| hash[k] = _to_hash(v) }
441
+ end
442
+ elsif value.respond_to? :to_hash
443
+ value.to_hash
444
+ else
445
+ value
446
+ end
447
+ end
448
+
449
+ end
450
+ end
@@ -0,0 +1,483 @@
1
+ =begin
2
+ #Hydrogen Proton API
3
+
4
+ #Financial engineering module of Hydrogen Atom
5
+
6
+ OpenAPI spec version: 1.9.1
7
+ Contact: info@hydrogenplatform.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.19
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module ProtonApi
16
+ class EducationCalculatorDepositAmountRequest
17
+ attr_accessor :education_inflation_rate
18
+
19
+ attr_accessor :decumulation_horizon
20
+
21
+ attr_accessor :accumulation_horizon
22
+
23
+ attr_accessor :account_ids
24
+
25
+ attr_accessor :tax_rate
26
+
27
+ attr_accessor :general_inflation_rate
28
+
29
+ attr_accessor :total_annual_cost
30
+
31
+ attr_accessor :portfolio_return
32
+
33
+ attr_accessor :deposit_schedule
34
+
35
+ attr_accessor :initial_balance
36
+
37
+ attr_accessor :percent_of_costs_covered
38
+
39
+ attr_accessor :aggregation_account_ids
40
+
41
+ # Attribute mapping from ruby-style variable name to JSON key.
42
+ def self.attribute_map
43
+ {
44
+ :'education_inflation_rate' => :'education_inflation_rate',
45
+ :'decumulation_horizon' => :'decumulation_horizon',
46
+ :'accumulation_horizon' => :'accumulation_horizon',
47
+ :'account_ids' => :'account_ids',
48
+ :'tax_rate' => :'tax_rate',
49
+ :'general_inflation_rate' => :'general_inflation_rate',
50
+ :'total_annual_cost' => :'total_annual_cost',
51
+ :'portfolio_return' => :'portfolio_return',
52
+ :'deposit_schedule' => :'deposit_schedule',
53
+ :'initial_balance' => :'initial_balance',
54
+ :'percent_of_costs_covered' => :'percent_of_costs_covered',
55
+ :'aggregation_account_ids' => :'aggregation_account_ids'
56
+ }
57
+ end
58
+
59
+ # Attribute type mapping.
60
+ def self.swagger_types
61
+ {
62
+ :'education_inflation_rate' => :'Float',
63
+ :'decumulation_horizon' => :'Integer',
64
+ :'accumulation_horizon' => :'Integer',
65
+ :'account_ids' => :'Array<String>',
66
+ :'tax_rate' => :'Float',
67
+ :'general_inflation_rate' => :'Float',
68
+ :'total_annual_cost' => :'Float',
69
+ :'portfolio_return' => :'Float',
70
+ :'deposit_schedule' => :'CalculatorDepositSchedule',
71
+ :'initial_balance' => :'Float',
72
+ :'percent_of_costs_covered' => :'Float',
73
+ :'aggregation_account_ids' => :'Array<String>'
74
+ }
75
+ end
76
+
77
+ # Initializes the object
78
+ # @param [Hash] attributes Model attributes in the form of hash
79
+ def initialize(attributes = {})
80
+ return unless attributes.is_a?(Hash)
81
+
82
+ # convert string to symbol for hash key
83
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
84
+
85
+ if attributes.has_key?(:'education_inflation_rate')
86
+ self.education_inflation_rate = attributes[:'education_inflation_rate']
87
+ else
88
+ self.education_inflation_rate = 0.05
89
+ end
90
+
91
+ if attributes.has_key?(:'decumulation_horizon')
92
+ self.decumulation_horizon = attributes[:'decumulation_horizon']
93
+ end
94
+
95
+ if attributes.has_key?(:'accumulation_horizon')
96
+ self.accumulation_horizon = attributes[:'accumulation_horizon']
97
+ end
98
+
99
+ if attributes.has_key?(:'account_ids')
100
+ if (value = attributes[:'account_ids']).is_a?(Array)
101
+ self.account_ids = value
102
+ end
103
+ end
104
+
105
+ if attributes.has_key?(:'tax_rate')
106
+ self.tax_rate = attributes[:'tax_rate']
107
+ else
108
+ self.tax_rate = 0.0
109
+ end
110
+
111
+ if attributes.has_key?(:'general_inflation_rate')
112
+ self.general_inflation_rate = attributes[:'general_inflation_rate']
113
+ else
114
+ self.general_inflation_rate = 0.0
115
+ end
116
+
117
+ if attributes.has_key?(:'total_annual_cost')
118
+ self.total_annual_cost = attributes[:'total_annual_cost']
119
+ end
120
+
121
+ if attributes.has_key?(:'portfolio_return')
122
+ self.portfolio_return = attributes[:'portfolio_return']
123
+ end
124
+
125
+ if attributes.has_key?(:'deposit_schedule')
126
+ self.deposit_schedule = attributes[:'deposit_schedule']
127
+ end
128
+
129
+ if attributes.has_key?(:'initial_balance')
130
+ self.initial_balance = attributes[:'initial_balance']
131
+ else
132
+ self.initial_balance = 0.0
133
+ end
134
+
135
+ if attributes.has_key?(:'percent_of_costs_covered')
136
+ self.percent_of_costs_covered = attributes[:'percent_of_costs_covered']
137
+ else
138
+ self.percent_of_costs_covered = 1.0
139
+ end
140
+
141
+ if attributes.has_key?(:'aggregation_account_ids')
142
+ if (value = attributes[:'aggregation_account_ids']).is_a?(Array)
143
+ self.aggregation_account_ids = value
144
+ end
145
+ end
146
+ end
147
+
148
+ # Show invalid properties with the reasons. Usually used together with valid?
149
+ # @return Array for valid properties with the reasons
150
+ def list_invalid_properties
151
+ invalid_properties = Array.new
152
+ if !@education_inflation_rate.nil? && @education_inflation_rate < -1
153
+ invalid_properties.push('invalid value for "education_inflation_rate", must be greater than or equal to -1.')
154
+ end
155
+
156
+ if @decumulation_horizon.nil?
157
+ invalid_properties.push('invalid value for "decumulation_horizon", decumulation_horizon cannot be nil.')
158
+ end
159
+
160
+ if @decumulation_horizon < 0
161
+ invalid_properties.push('invalid value for "decumulation_horizon", must be greater than or equal to 0.')
162
+ end
163
+
164
+ if @accumulation_horizon.nil?
165
+ invalid_properties.push('invalid value for "accumulation_horizon", accumulation_horizon cannot be nil.')
166
+ end
167
+
168
+ if @accumulation_horizon < 0
169
+ invalid_properties.push('invalid value for "accumulation_horizon", must be greater than or equal to 0.')
170
+ end
171
+
172
+ if !@tax_rate.nil? && @tax_rate > 1
173
+ invalid_properties.push('invalid value for "tax_rate", must be smaller than or equal to 1.')
174
+ end
175
+
176
+ if !@tax_rate.nil? && @tax_rate < 0
177
+ invalid_properties.push('invalid value for "tax_rate", must be greater than or equal to 0.')
178
+ end
179
+
180
+ if !@general_inflation_rate.nil? && @general_inflation_rate < -1
181
+ invalid_properties.push('invalid value for "general_inflation_rate", must be greater than or equal to -1.')
182
+ end
183
+
184
+ if @total_annual_cost.nil?
185
+ invalid_properties.push('invalid value for "total_annual_cost", total_annual_cost cannot be nil.')
186
+ end
187
+
188
+ if @total_annual_cost < 0
189
+ invalid_properties.push('invalid value for "total_annual_cost", must be greater than or equal to 0.')
190
+ end
191
+
192
+ if @portfolio_return.nil?
193
+ invalid_properties.push('invalid value for "portfolio_return", portfolio_return cannot be nil.')
194
+ end
195
+
196
+ if @portfolio_return < -1
197
+ invalid_properties.push('invalid value for "portfolio_return", must be greater than or equal to -1.')
198
+ end
199
+
200
+ if !@initial_balance.nil? && @initial_balance < 0
201
+ invalid_properties.push('invalid value for "initial_balance", must be greater than or equal to 0.')
202
+ end
203
+
204
+ if !@percent_of_costs_covered.nil? && @percent_of_costs_covered > 1
205
+ invalid_properties.push('invalid value for "percent_of_costs_covered", must be smaller than or equal to 1.')
206
+ end
207
+
208
+ if !@percent_of_costs_covered.nil? && @percent_of_costs_covered < 0
209
+ invalid_properties.push('invalid value for "percent_of_costs_covered", must be greater than or equal to 0.')
210
+ end
211
+
212
+ invalid_properties
213
+ end
214
+
215
+ # Check to see if the all the properties in the model are valid
216
+ # @return true if the model is valid
217
+ def valid?
218
+ return false if !@education_inflation_rate.nil? && @education_inflation_rate < -1
219
+ return false if @decumulation_horizon.nil?
220
+ return false if @decumulation_horizon < 0
221
+ return false if @accumulation_horizon.nil?
222
+ return false if @accumulation_horizon < 0
223
+ return false if !@tax_rate.nil? && @tax_rate > 1
224
+ return false if !@tax_rate.nil? && @tax_rate < 0
225
+ return false if !@general_inflation_rate.nil? && @general_inflation_rate < -1
226
+ return false if @total_annual_cost.nil?
227
+ return false if @total_annual_cost < 0
228
+ return false if @portfolio_return.nil?
229
+ return false if @portfolio_return < -1
230
+ return false if !@initial_balance.nil? && @initial_balance < 0
231
+ return false if !@percent_of_costs_covered.nil? && @percent_of_costs_covered > 1
232
+ return false if !@percent_of_costs_covered.nil? && @percent_of_costs_covered < 0
233
+ true
234
+ end
235
+
236
+ # Custom attribute writer method with validation
237
+ # @param [Object] education_inflation_rate Value to be assigned
238
+ def education_inflation_rate=(education_inflation_rate)
239
+ if !education_inflation_rate.nil? && education_inflation_rate < -1
240
+ fail ArgumentError, 'invalid value for "education_inflation_rate", must be greater than or equal to -1.'
241
+ end
242
+
243
+ @education_inflation_rate = education_inflation_rate
244
+ end
245
+
246
+ # Custom attribute writer method with validation
247
+ # @param [Object] decumulation_horizon Value to be assigned
248
+ def decumulation_horizon=(decumulation_horizon)
249
+ if decumulation_horizon.nil?
250
+ fail ArgumentError, 'decumulation_horizon cannot be nil'
251
+ end
252
+
253
+ if decumulation_horizon < 0
254
+ fail ArgumentError, 'invalid value for "decumulation_horizon", must be greater than or equal to 0.'
255
+ end
256
+
257
+ @decumulation_horizon = decumulation_horizon
258
+ end
259
+
260
+ # Custom attribute writer method with validation
261
+ # @param [Object] accumulation_horizon Value to be assigned
262
+ def accumulation_horizon=(accumulation_horizon)
263
+ if accumulation_horizon.nil?
264
+ fail ArgumentError, 'accumulation_horizon cannot be nil'
265
+ end
266
+
267
+ if accumulation_horizon < 0
268
+ fail ArgumentError, 'invalid value for "accumulation_horizon", must be greater than or equal to 0.'
269
+ end
270
+
271
+ @accumulation_horizon = accumulation_horizon
272
+ end
273
+
274
+ # Custom attribute writer method with validation
275
+ # @param [Object] tax_rate Value to be assigned
276
+ def tax_rate=(tax_rate)
277
+ if !tax_rate.nil? && tax_rate > 1
278
+ fail ArgumentError, 'invalid value for "tax_rate", must be smaller than or equal to 1.'
279
+ end
280
+
281
+ if !tax_rate.nil? && tax_rate < 0
282
+ fail ArgumentError, 'invalid value for "tax_rate", must be greater than or equal to 0.'
283
+ end
284
+
285
+ @tax_rate = tax_rate
286
+ end
287
+
288
+ # Custom attribute writer method with validation
289
+ # @param [Object] general_inflation_rate Value to be assigned
290
+ def general_inflation_rate=(general_inflation_rate)
291
+ if !general_inflation_rate.nil? && general_inflation_rate < -1
292
+ fail ArgumentError, 'invalid value for "general_inflation_rate", must be greater than or equal to -1.'
293
+ end
294
+
295
+ @general_inflation_rate = general_inflation_rate
296
+ end
297
+
298
+ # Custom attribute writer method with validation
299
+ # @param [Object] total_annual_cost Value to be assigned
300
+ def total_annual_cost=(total_annual_cost)
301
+ if total_annual_cost.nil?
302
+ fail ArgumentError, 'total_annual_cost cannot be nil'
303
+ end
304
+
305
+ if total_annual_cost < 0
306
+ fail ArgumentError, 'invalid value for "total_annual_cost", must be greater than or equal to 0.'
307
+ end
308
+
309
+ @total_annual_cost = total_annual_cost
310
+ end
311
+
312
+ # Custom attribute writer method with validation
313
+ # @param [Object] portfolio_return Value to be assigned
314
+ def portfolio_return=(portfolio_return)
315
+ if portfolio_return.nil?
316
+ fail ArgumentError, 'portfolio_return cannot be nil'
317
+ end
318
+
319
+ if portfolio_return < -1
320
+ fail ArgumentError, 'invalid value for "portfolio_return", must be greater than or equal to -1.'
321
+ end
322
+
323
+ @portfolio_return = portfolio_return
324
+ end
325
+
326
+ # Custom attribute writer method with validation
327
+ # @param [Object] initial_balance Value to be assigned
328
+ def initial_balance=(initial_balance)
329
+ if !initial_balance.nil? && initial_balance < 0
330
+ fail ArgumentError, 'invalid value for "initial_balance", must be greater than or equal to 0.'
331
+ end
332
+
333
+ @initial_balance = initial_balance
334
+ end
335
+
336
+ # Custom attribute writer method with validation
337
+ # @param [Object] percent_of_costs_covered Value to be assigned
338
+ def percent_of_costs_covered=(percent_of_costs_covered)
339
+ if !percent_of_costs_covered.nil? && percent_of_costs_covered > 1
340
+ fail ArgumentError, 'invalid value for "percent_of_costs_covered", must be smaller than or equal to 1.'
341
+ end
342
+
343
+ if !percent_of_costs_covered.nil? && percent_of_costs_covered < 0
344
+ fail ArgumentError, 'invalid value for "percent_of_costs_covered", must be greater than or equal to 0.'
345
+ end
346
+
347
+ @percent_of_costs_covered = percent_of_costs_covered
348
+ end
349
+
350
+ # Checks equality by comparing each attribute.
351
+ # @param [Object] Object to be compared
352
+ def ==(o)
353
+ return true if self.equal?(o)
354
+ self.class == o.class &&
355
+ education_inflation_rate == o.education_inflation_rate &&
356
+ decumulation_horizon == o.decumulation_horizon &&
357
+ accumulation_horizon == o.accumulation_horizon &&
358
+ account_ids == o.account_ids &&
359
+ tax_rate == o.tax_rate &&
360
+ general_inflation_rate == o.general_inflation_rate &&
361
+ total_annual_cost == o.total_annual_cost &&
362
+ portfolio_return == o.portfolio_return &&
363
+ deposit_schedule == o.deposit_schedule &&
364
+ initial_balance == o.initial_balance &&
365
+ percent_of_costs_covered == o.percent_of_costs_covered &&
366
+ aggregation_account_ids == o.aggregation_account_ids
367
+ end
368
+
369
+ # @see the `==` method
370
+ # @param [Object] Object to be compared
371
+ def eql?(o)
372
+ self == o
373
+ end
374
+
375
+ # Calculates hash code according to all attributes.
376
+ # @return [Fixnum] Hash code
377
+ def hash
378
+ [education_inflation_rate, decumulation_horizon, accumulation_horizon, account_ids, tax_rate, general_inflation_rate, total_annual_cost, portfolio_return, deposit_schedule, initial_balance, percent_of_costs_covered, aggregation_account_ids].hash
379
+ end
380
+
381
+ # Builds the object from hash
382
+ # @param [Hash] attributes Model attributes in the form of hash
383
+ # @return [Object] Returns the model itself
384
+ def build_from_hash(attributes)
385
+ return nil unless attributes.is_a?(Hash)
386
+ self.class.swagger_types.each_pair do |key, type|
387
+ if type =~ /\AArray<(.*)>/i
388
+ # check to ensure the input is an array given that the attribute
389
+ # is documented as an array but the input is not
390
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
391
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
392
+ end
393
+ elsif !attributes[self.class.attribute_map[key]].nil?
394
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
395
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
396
+ end
397
+
398
+ self
399
+ end
400
+ # Deserializes the data based on type
401
+ # @param string type Data type
402
+ # @param string value Value to be deserialized
403
+ # @return [Object] Deserialized data
404
+ def _deserialize(type, value)
405
+ case type.to_sym
406
+ when :DateTime
407
+ value
408
+ when :Date
409
+ value
410
+ when :String
411
+ value.to_s
412
+ when :Integer
413
+ value.to_i
414
+ when :Float
415
+ value.to_f
416
+ when :BOOLEAN
417
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
418
+ true
419
+ else
420
+ false
421
+ end
422
+ when :Object
423
+ # generic object (usually a Hash), return directly
424
+ value
425
+ when /\AArray<(?<inner_type>.+)>\z/
426
+ inner_type = Regexp.last_match[:inner_type]
427
+ value.map { |v| _deserialize(inner_type, v) }
428
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
429
+ k_type = Regexp.last_match[:k_type]
430
+ v_type = Regexp.last_match[:v_type]
431
+ {}.tap do |hash|
432
+ value.each do |k, v|
433
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
434
+ end
435
+ end
436
+ else # model
437
+ temp_model = ProtonApi.const_get(type).new
438
+ temp_model.build_from_hash(value)
439
+ end
440
+ end
441
+ # Returns the string representation of the object
442
+ # @return [String] String presentation of the object
443
+ def to_s
444
+ to_hash.to_s
445
+ end
446
+
447
+ # to_body is an alias to to_hash (backward compatibility)
448
+ # @return [Hash] Returns the object in the form of hash
449
+ def to_body
450
+ to_hash
451
+ end
452
+
453
+ # Returns the object in the form of hash
454
+ # @return [Hash] Returns the object in the form of hash
455
+ def to_hash
456
+ hash = {}
457
+ self.class.attribute_map.each_pair do |attr, param|
458
+ value = self.send(attr)
459
+ next if value.nil?
460
+ hash[param] = _to_hash(value)
461
+ end
462
+ hash
463
+ end
464
+ # Outputs non-array value in the form of hash
465
+ # For object, use to_hash. Otherwise, just return the value
466
+ # @param [Object] value Any valid value
467
+ # @return [Hash] Returns the value in the form of hash
468
+ def _to_hash(value)
469
+ if value.is_a?(Array)
470
+ value.compact.map { |v| _to_hash(v) }
471
+ elsif value.is_a?(Hash)
472
+ {}.tap do |hash|
473
+ value.each { |k, v| hash[k] = _to_hash(v) }
474
+ end
475
+ elsif value.respond_to? :to_hash
476
+ value.to_hash
477
+ else
478
+ value
479
+ end
480
+ end
481
+
482
+ end
483
+ end