gemcap-be-common 1.2.140 → 1.3.0

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 (303) hide show
  1. package/classes/bank-transaction-item.d.ts +17 -0
  2. package/classes/bank-transaction-item.js +64 -0
  3. package/classes/bank-transaction-item.ts +66 -0
  4. package/classes/bank-uploaded-transaction.d.ts +17 -0
  5. package/classes/bank-uploaded-transaction.js +35 -0
  6. package/classes/bank-uploaded-transaction.ts +35 -0
  7. package/classes/inventory-item.d.ts +41 -0
  8. package/classes/inventory-item.js +44 -0
  9. package/classes/inventory-item.ts +63 -0
  10. package/classes/payable-account-item.d.ts +22 -0
  11. package/classes/payable-account-item.js +27 -0
  12. package/classes/payable-account-item.ts +35 -0
  13. package/classes/quickbook-item.d.ts +37 -0
  14. package/classes/quickbook-item.js +51 -0
  15. package/classes/quickbook-item.ts +59 -0
  16. package/classes/receivable-item.d.ts +26 -0
  17. package/classes/receivable-item.js +28 -0
  18. package/classes/receivable-item.ts +38 -0
  19. package/constants/date-formats.contsants.d.ts +1 -0
  20. package/constants/date-formats.contsants.js +4 -0
  21. package/constants/date-formats.contsants.ts +1 -0
  22. package/db/brokers.db.d.ts +185 -0
  23. package/db/brokers.db.js +35 -2
  24. package/db/brokers.db.ts +34 -1
  25. package/db/collateral-adjustments.db.d.ts +34 -0
  26. package/db/collateral-adjustments.db.js +52 -0
  27. package/db/collateral-adjustments.db.ts +54 -0
  28. package/db/collaterals.db.d.ts +1 -1
  29. package/db/equipment.db.d.ts +40 -0
  30. package/db/equipment.db.js +55 -0
  31. package/db/equipment.db.ts +56 -0
  32. package/db/financial-spreading.db.ts +2 -1
  33. package/db/groups.d.ts +5 -0
  34. package/db/groups.js +57 -0
  35. package/db/groups.ts +52 -0
  36. package/db/inventories.d.ts +91 -0
  37. package/db/inventories.js +449 -0
  38. package/db/inventories.ts +481 -0
  39. package/db/inventory-availability.d.ts +3 -0
  40. package/db/inventory-availability.js +103 -0
  41. package/db/inventory-availability.ts +113 -0
  42. package/db/new-summary.d.ts +31 -0
  43. package/db/new-summary.js +1295 -0
  44. package/db/new-summary.ts +1509 -0
  45. package/db/payable-accounts.d.ts +30 -0
  46. package/db/payable-accounts.js +55 -0
  47. package/db/payable-accounts.ts +50 -0
  48. package/db/reserve.db.d.ts +34 -0
  49. package/db/reserve.db.js +52 -0
  50. package/db/reserve.db.ts +48 -0
  51. package/db/uploads.db.d.ts +2 -0
  52. package/db/uploads.db.js +29 -0
  53. package/db/uploads.db.ts +24 -0
  54. package/helpers/main.helper.d.ts +31 -0
  55. package/helpers/main.helper.js +63 -0
  56. package/helpers/main.helper.ts +63 -0
  57. package/models/AccountPayableItem.model.d.ts +6 -6
  58. package/models/AllocatedBankTransaction.model.d.ts +54 -0
  59. package/models/AllocatedBankTransaction.model.js +70 -0
  60. package/models/AllocatedBankTransaction.model.ts +94 -0
  61. package/models/AllocatedData.model.d.ts +33 -0
  62. package/models/AllocatedData.model.js +19 -0
  63. package/models/AllocatedData.model.ts +24 -0
  64. package/models/BBCDate.model.d.ts +3 -3
  65. package/models/BBCSheet.model.d.ts +3 -3
  66. package/models/Banks.model.d.ts +3 -3
  67. package/models/Borrower.model.d.ts +3 -3
  68. package/models/BorrowerData.model.d.ts +3 -3
  69. package/models/BorrowerDataInsurance.model.d.ts +3 -3
  70. package/models/BorrowerDataTerm.model.d.ts +3 -3
  71. package/models/BorrowerSummary.model.js +1 -1
  72. package/models/BorrowerSummary.model.ts +1 -1
  73. package/models/CalandarDay.model.d.ts +40 -0
  74. package/models/CalandarDay.model.js +47 -0
  75. package/models/CalandarDay.model.ts +61 -0
  76. package/models/CashAllocationProduct.model.d.ts +119 -0
  77. package/models/CashAllocationProduct.model.js +102 -0
  78. package/models/CashAllocationProduct.model.ts +112 -0
  79. package/models/CashAllocationReference.model.d.ts +37 -0
  80. package/models/CashAllocationReference.model.js +27 -0
  81. package/models/CashAllocationReference.model.ts +40 -0
  82. package/models/CollateralAdjustment.model.d.ts +51 -0
  83. package/models/CollateralAdjustment.model.js +61 -0
  84. package/models/CollateralAdjustment.model.ts +98 -0
  85. package/models/Company.model.d.ts +35 -0
  86. package/models/Company.model.js +18 -0
  87. package/models/Company.model.ts +29 -0
  88. package/models/CustomerAPGroup.model.d.ts +32 -0
  89. package/models/CustomerAPGroup.model.js +24 -0
  90. package/models/CustomerAPGroup.model.ts +31 -0
  91. package/models/Equipment.model.d.ts +53 -0
  92. package/models/Equipment.model.js +140 -0
  93. package/models/Equipment.model.ts +172 -0
  94. package/models/FinancialCompliance.model.d.ts +39 -0
  95. package/models/FinancialCompliance.model.js +64 -0
  96. package/models/FinancialCompliance.model.ts +78 -0
  97. package/models/FinancialComplianceBorrower.model.d.ts +58 -0
  98. package/models/FinancialComplianceBorrower.model.js +82 -0
  99. package/models/FinancialComplianceBorrower.model.ts +118 -0
  100. package/models/FinancialIndexes.model.d.ts +36 -0
  101. package/models/FinancialIndexes.model.js +27 -0
  102. package/models/FinancialIndexes.model.ts +37 -0
  103. package/models/Inventory.model.d.ts +18 -18
  104. package/models/InventoryAvailability.model.d.ts +21 -21
  105. package/models/InventoryAvailabilityItem.model.d.ts +6 -6
  106. package/models/InventoryItem.model.d.ts +24 -24
  107. package/models/InventoryManualEntry.model.d.ts +9 -9
  108. package/models/InventorySeasonalRates.model.d.ts +3 -3
  109. package/models/LoanBroker.model.d.ts +3 -3
  110. package/models/LoanCharges.model.d.ts +12 -12
  111. package/models/LoanProducts.model.d.ts +9 -9
  112. package/models/LoanStatementStatus.model.d.ts +35 -0
  113. package/models/LoanStatementStatus.model.js +34 -0
  114. package/models/LoanStatementStatus.model.ts +45 -0
  115. package/models/LoanStatementTransaction.model.d.ts +9 -9
  116. package/models/LoanTransactionFile.model.d.ts +41 -0
  117. package/models/LoanTransactionFile.model.js +44 -0
  118. package/models/LoanTransactionFile.model.ts +61 -0
  119. package/models/MappedGroup.model.d.ts +37 -0
  120. package/models/MappedGroup.model.js +33 -0
  121. package/models/MappedGroup.model.ts +46 -0
  122. package/models/MonthEndData.Model.d.ts +41 -0
  123. package/models/MonthEndData.Model.js +42 -0
  124. package/models/MonthEndData.Model.ts +53 -0
  125. package/models/OrganizationEmails.model.d.ts +44 -0
  126. package/models/OrganizationEmails.model.js +40 -0
  127. package/models/OrganizationEmails.model.ts +54 -0
  128. package/models/ProductBroker.model.d.ts +9 -9
  129. package/models/QuickbooksAccount.model.d.ts +39 -0
  130. package/models/QuickbooksAccount.model.js +43 -0
  131. package/models/QuickbooksAccount.model.ts +57 -0
  132. package/models/Receivable.model.d.ts +12 -12
  133. package/models/ReceivableAvailability.model.d.ts +54 -54
  134. package/models/ReceivableAvailabilityItem.model.d.ts +57 -57
  135. package/models/ReceivableItem.model.d.ts +6 -6
  136. package/models/Reserve.model.d.ts +51 -0
  137. package/models/Reserve.model.js +96 -0
  138. package/models/Reserve.model.ts +125 -0
  139. package/models/TermLoan.model.d.ts +3 -3
  140. package/models/TermLoanCalculated.model.d.ts +6 -6
  141. package/models/TransactionAttachedFile.Model.d.ts +35 -0
  142. package/models/TransactionAttachedFile.Model.js +37 -0
  143. package/models/TransactionAttachedFile.Model.ts +48 -0
  144. package/models/UploadedBankTransaction.model.d.ts +56 -0
  145. package/models/UploadedBankTransaction.model.js +78 -0
  146. package/models/UploadedBankTransaction.model.ts +110 -0
  147. package/models/UploadedData.model.d.ts +36 -0
  148. package/models/UploadedData.model.js +23 -0
  149. package/models/UploadedData.model.ts +35 -0
  150. package/models/UploadedFile.model.d.ts +40 -0
  151. package/models/UploadedFile.model.js +41 -0
  152. package/models/UploadedFile.model.ts +57 -0
  153. package/models/UploadedSheet.model.d.ts +46 -0
  154. package/models/UploadedSheet.model.js +27 -0
  155. package/models/UploadedSheet.model.ts +51 -0
  156. package/package.json +10 -1
  157. package/repositories/globals.repository.d.ts +8 -0
  158. package/repositories/globals.repository.js +24 -0
  159. package/repositories/globals.repository.ts +21 -0
  160. package/services/attached-files.service.d.ts +57 -0
  161. package/services/attached-files.service.js +103 -0
  162. package/services/attached-files.service.ts +123 -0
  163. package/services/availability.service.d.ts +77 -0
  164. package/services/availability.service.js +897 -0
  165. package/services/availability.service.ts +1034 -0
  166. package/services/bank-uploaded-transactions.service.d.ts +33 -0
  167. package/services/bank-uploaded-transactions.service.js +430 -0
  168. package/services/bank-uploaded-transactions.service.ts +475 -0
  169. package/services/banks.service.d.ts +36 -0
  170. package/services/banks.service.js +91 -0
  171. package/services/banks.service.ts +95 -0
  172. package/services/borrower-summary.service.d.ts +35 -0
  173. package/services/borrower-summary.service.js +310 -0
  174. package/services/borrower-summary.service.ts +334 -0
  175. package/services/borrowers.service.d.ts +103 -0
  176. package/services/borrowers.service.js +268 -0
  177. package/services/borrowers.service.ts +302 -0
  178. package/services/brokers.service.d.ts +212 -0
  179. package/services/brokers.service.js +160 -0
  180. package/services/brokers.service.ts +200 -0
  181. package/services/calendar.service.d.ts +53 -0
  182. package/services/calendar.service.js +108 -0
  183. package/services/calendar.service.ts +128 -0
  184. package/services/cash-allocation.service.d.ts +40 -0
  185. package/services/cash-allocation.service.js +92 -0
  186. package/services/cash-allocation.service.ts +105 -0
  187. package/services/collateral-adjustments.service.d.ts +38 -0
  188. package/services/collateral-adjustments.service.js +82 -0
  189. package/services/collateral-adjustments.service.ts +95 -0
  190. package/services/collaterals.service.d.ts +69 -0
  191. package/services/collaterals.service.js +279 -0
  192. package/services/collaterals.service.ts +319 -0
  193. package/services/companies.service.d.ts +5 -0
  194. package/services/companies.service.js +21 -0
  195. package/services/companies.service.ts +23 -0
  196. package/services/compliance-borrowers.service.d.ts +152 -0
  197. package/services/compliance-borrowers.service.js +569 -0
  198. package/services/compliance-borrowers.service.ts +617 -0
  199. package/services/equipment.service.d.ts +42 -0
  200. package/services/equipment.service.js +120 -0
  201. package/services/equipment.service.ts +149 -0
  202. package/services/file-manager.service.d.ts +44 -0
  203. package/services/file-manager.service.js +120 -0
  204. package/services/file-manager.service.ts +146 -0
  205. package/services/financial-compliance.service.d.ts +58 -0
  206. package/services/financial-compliance.service.js +281 -0
  207. package/services/financial-compliance.service.ts +309 -0
  208. package/services/financial-indexes.service.d.ts +20 -0
  209. package/services/financial-indexes.service.js +241 -0
  210. package/services/financial-indexes.service.ts +257 -0
  211. package/services/financial-spreading.service.d.ts +74 -0
  212. package/services/financial-spreading.service.js +450 -0
  213. package/services/financial-spreading.service.ts +517 -0
  214. package/services/globals.service.d.ts +5 -0
  215. package/services/globals.service.js +11 -0
  216. package/services/globals.service.ts +8 -0
  217. package/services/groups.service.d.ts +39 -0
  218. package/services/groups.service.js +65 -0
  219. package/services/groups.service.ts +64 -0
  220. package/services/inventory-availability.service.d.ts +13 -0
  221. package/services/inventory-availability.service.js +170 -0
  222. package/services/inventory-availability.service.ts +187 -0
  223. package/services/inventory.service.d.ts +118 -0
  224. package/services/inventory.service.js +239 -0
  225. package/services/inventory.service.ts +276 -0
  226. package/services/loan-charges.service.d.ts +83 -0
  227. package/services/loan-charges.service.js +343 -0
  228. package/services/loan-charges.service.ts +396 -0
  229. package/services/loan-payments.service.d.ts +94 -0
  230. package/services/loan-payments.service.js +485 -0
  231. package/services/loan-payments.service.ts +541 -0
  232. package/services/loan-products.service.d.ts +12 -0
  233. package/services/loan-products.service.js +55 -0
  234. package/services/loan-products.service.ts +58 -0
  235. package/services/loan-statement-balance.service.d.ts +16 -0
  236. package/services/loan-statement-balance.service.js +106 -0
  237. package/services/loan-statement-balance.service.ts +113 -0
  238. package/services/loan-statement-effects.service.d.ts +8 -0
  239. package/services/loan-statement-effects.service.js +42 -0
  240. package/services/loan-statement-effects.service.ts +41 -0
  241. package/services/loan-statement-status.service.d.ts +208 -0
  242. package/services/loan-statement-status.service.js +159 -0
  243. package/services/loan-statement-status.service.ts +177 -0
  244. package/services/loan-statement.service.d.ts +186 -0
  245. package/services/loan-statement.service.js +935 -0
  246. package/services/loan-statement.service.ts +1040 -0
  247. package/services/loan-transactions.service.d.ts +169 -0
  248. package/services/loan-transactions.service.js +941 -0
  249. package/services/loan-transactions.service.ts +1042 -0
  250. package/services/lock.service.d.ts +6 -0
  251. package/services/lock.service.js +45 -0
  252. package/services/lock.service.ts +45 -0
  253. package/services/manual-entry.service.d.ts +20 -0
  254. package/services/manual-entry.service.js +186 -0
  255. package/services/manual-entry.service.ts +201 -0
  256. package/services/month-end-data.service.d.ts +34 -0
  257. package/services/month-end-data.service.js +30 -0
  258. package/services/month-end-data.service.ts +35 -0
  259. package/services/nodemailer.service.d.ts +96 -0
  260. package/services/nodemailer.service.js +689 -0
  261. package/services/nodemailer.service.ts +774 -0
  262. package/services/organization-emails.service.d.ts +31 -0
  263. package/services/organization-emails.service.js +10 -0
  264. package/services/organization-emails.service.ts +7 -0
  265. package/services/organizations.service.d.ts +34 -0
  266. package/services/organizations.service.js +74 -0
  267. package/services/organizations.service.ts +84 -0
  268. package/services/pdf.service.d.ts +61 -0
  269. package/services/pdf.service.js +547 -0
  270. package/services/pdf.service.ts +642 -0
  271. package/services/quickbooks.service.d.ts +99 -0
  272. package/services/quickbooks.service.js +640 -0
  273. package/services/quickbooks.service.ts +734 -0
  274. package/services/reports/investor-summary.service.d.ts +28 -0
  275. package/services/reports/investor-summary.service.js +136 -0
  276. package/services/reports/investor-summary.service.ts +159 -0
  277. package/services/reports.service.d.ts +126 -0
  278. package/services/reports.service.js +584 -0
  279. package/services/reports.service.ts +702 -0
  280. package/services/reserve.service.d.ts +37 -0
  281. package/services/reserve.service.js +76 -0
  282. package/services/reserve.service.ts +79 -0
  283. package/services/sentry.service.d.ts +11 -0
  284. package/services/sentry.service.js +49 -0
  285. package/services/sentry.service.ts +33 -0
  286. package/services/signs.service.d.ts +69 -0
  287. package/services/signs.service.js +230 -0
  288. package/services/signs.service.ts +260 -0
  289. package/services/term-loan.service.d.ts +30 -0
  290. package/services/term-loan.service.js +614 -0
  291. package/services/term-loan.service.ts +696 -0
  292. package/services/uploads.service.d.ts +134 -0
  293. package/services/uploads.service.js +587 -0
  294. package/services/uploads.service.ts +643 -0
  295. package/services/user-logs.service.d.ts +23 -0
  296. package/services/user-logs.service.js +160 -0
  297. package/services/user-logs.service.ts +177 -0
  298. package/services/users.service.d.ts +4 -4
  299. package/services/yield.service.d.ts +46 -0
  300. package/services/yield.service.js +42 -12
  301. package/services/yield.service.ts +38 -8
  302. package/tsconfig.json +5 -5
  303. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FinancialIndexesService = exports.EFinancialIndex = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const decimal_js_1 = __importDefault(require("decimal.js"));
9
+ const FinancialIndexes_model_1 = require("../models/FinancialIndexes.model");
10
+ var EFinancialIndex;
11
+ (function (EFinancialIndex) {
12
+ EFinancialIndex["PRIME_RATE"] = "PRIME_RATE";
13
+ })(EFinancialIndex || (exports.EFinancialIndex = EFinancialIndex = {}));
14
+ class FinancialIndexesService {
15
+ config;
16
+ constructor(config) {
17
+ this.config = config;
18
+ }
19
+ async getFinancialAllIndexes(indexName) {
20
+ return FinancialIndexes_model_1.FinancialIndexesModel.aggregate([
21
+ {
22
+ $match: {
23
+ 'name': indexName,
24
+ },
25
+ }, {
26
+ $sort: {
27
+ 'date': -1,
28
+ },
29
+ },
30
+ ]);
31
+ }
32
+ async getFinancialIndexValue(indexName, date = new Date()) {
33
+ const indexes = await FinancialIndexes_model_1.FinancialIndexesModel.aggregate([
34
+ {
35
+ $match: {
36
+ 'name': indexName,
37
+ 'date': { $lte: date },
38
+ },
39
+ }, {
40
+ $sort: {
41
+ 'date': -1,
42
+ },
43
+ }, {
44
+ $limit: 1,
45
+ },
46
+ ]);
47
+ if (!indexes.length) {
48
+ return null;
49
+ }
50
+ return indexes[0].value;
51
+ }
52
+ async getAllFinancialIndexes(date = new Date()) {
53
+ const indexes = await FinancialIndexes_model_1.FinancialIndexesModel.aggregate([
54
+ {
55
+ $match: {
56
+ 'date': { $lte: date },
57
+ },
58
+ }, {
59
+ $sort: {
60
+ 'date': 1,
61
+ },
62
+ },
63
+ ]);
64
+ if (!indexes.length) {
65
+ return null;
66
+ }
67
+ return indexes;
68
+ }
69
+ async getAllFinancialIndexesWithHistory(date = new Date()) {
70
+ // TODO can remove from here
71
+ const historyData = [
72
+ {
73
+ name: EFinancialIndex.PRIME_RATE,
74
+ date: new Date(2018, 2, 22),
75
+ value: 0.0475,
76
+ },
77
+ {
78
+ name: EFinancialIndex.PRIME_RATE,
79
+ date: new Date(2018, 5, 14),
80
+ value: 0.05,
81
+ },
82
+ {
83
+ name: EFinancialIndex.PRIME_RATE,
84
+ date: new Date(2018, 8, 27),
85
+ value: 0.0525,
86
+ },
87
+ {
88
+ name: EFinancialIndex.PRIME_RATE,
89
+ date: new Date(2018, 11, 20),
90
+ value: 0.055,
91
+ },
92
+ {
93
+ name: EFinancialIndex.PRIME_RATE,
94
+ date: new Date(2019, 5, 31),
95
+ value: 0.0525,
96
+ },
97
+ {
98
+ name: EFinancialIndex.PRIME_RATE,
99
+ date: new Date(2019, 8, 18),
100
+ value: 0.05,
101
+ },
102
+ {
103
+ name: EFinancialIndex.PRIME_RATE,
104
+ date: new Date(2019, 9, 30),
105
+ value: 0.0475,
106
+ },
107
+ {
108
+ name: EFinancialIndex.PRIME_RATE,
109
+ date: new Date(2020, 2, 3),
110
+ value: 0.0425,
111
+ },
112
+ {
113
+ name: EFinancialIndex.PRIME_RATE,
114
+ date: new Date(2020, 2, 15),
115
+ value: 0.0325,
116
+ },
117
+ {
118
+ name: EFinancialIndex.PRIME_RATE,
119
+ date: new Date(2022, 2, 16),
120
+ value: 0.035,
121
+ },
122
+ {
123
+ name: EFinancialIndex.PRIME_RATE,
124
+ date: new Date(2022, 4, 4),
125
+ value: 0.04,
126
+ },
127
+ {
128
+ name: EFinancialIndex.PRIME_RATE,
129
+ date: new Date(2022, 5, 15),
130
+ value: 0.0475,
131
+ },
132
+ {
133
+ name: EFinancialIndex.PRIME_RATE,
134
+ date: new Date(2022, 6, 27),
135
+ value: 0.055,
136
+ },
137
+ {
138
+ name: EFinancialIndex.PRIME_RATE,
139
+ date: new Date(2022, 8, 21),
140
+ value: 0.0625,
141
+ },
142
+ {
143
+ name: EFinancialIndex.PRIME_RATE,
144
+ date: new Date(2022, 10, 2),
145
+ value: 0.07,
146
+ },
147
+ {
148
+ name: EFinancialIndex.PRIME_RATE,
149
+ date: new Date(2022, 11, 14),
150
+ value: 0.075,
151
+ },
152
+ {
153
+ name: EFinancialIndex.PRIME_RATE,
154
+ date: new Date(2023, 1, 1),
155
+ value: 0.0775,
156
+ },
157
+ {
158
+ name: EFinancialIndex.PRIME_RATE,
159
+ date: new Date(2023, 2, 22),
160
+ value: 0.08,
161
+ },
162
+ {
163
+ name: EFinancialIndex.PRIME_RATE,
164
+ date: new Date(2023, 4, 3),
165
+ value: 0.0825,
166
+ },
167
+ {
168
+ name: EFinancialIndex.PRIME_RATE,
169
+ date: new Date(2023, 6, 26),
170
+ value: 0.085,
171
+ },
172
+ ];
173
+ console.log({ historyData });
174
+ await this.cleanIndexes(EFinancialIndex.PRIME_RATE);
175
+ await Promise.all(historyData.map(async (data) => {
176
+ await this.createIndex(data);
177
+ }));
178
+ // TODO to here
179
+ const indexes = await FinancialIndexes_model_1.FinancialIndexesModel.aggregate([
180
+ {
181
+ $match: {
182
+ 'date': { $lte: date },
183
+ },
184
+ }, {
185
+ $sort: {
186
+ 'date': -1,
187
+ },
188
+ },
189
+ ]);
190
+ if (!indexes.length) {
191
+ return null;
192
+ }
193
+ return indexes;
194
+ }
195
+ async createIndex(index) {
196
+ const newIndex = new FinancialIndexes_model_1.FinancialIndexesModel(index);
197
+ await newIndex.save();
198
+ }
199
+ async deleteIndex(indexId) {
200
+ await FinancialIndexes_model_1.FinancialIndexesModel.findByIdAndDelete(indexId);
201
+ }
202
+ async cleanIndexes(index) {
203
+ await FinancialIndexes_model_1.FinancialIndexesModel.deleteMany({ name: index });
204
+ }
205
+ async updatePrimeRate() {
206
+ const currentPrimeRate = await this.getFinancialIndexValue(EFinancialIndex.PRIME_RATE);
207
+ const primeRate = await this.getPrimeRate();
208
+ if (currentPrimeRate === primeRate) {
209
+ return;
210
+ }
211
+ await this.createIndex({ date: new Date, value: primeRate, name: EFinancialIndex.PRIME_RATE });
212
+ }
213
+ async getPrimeRate() {
214
+ const FRED_API_URL = 'https://api.stlouisfed.org/fred/series/observations';
215
+ try {
216
+ const response = await axios_1.default.get(FRED_API_URL, {
217
+ params: {
218
+ series_id: 'DPRIME',
219
+ api_key: this.config.apiKey,
220
+ file_type: 'json',
221
+ sort_order: 'desc',
222
+ limit: 1,
223
+ },
224
+ });
225
+ const observations = response.data.observations;
226
+ if (observations && observations.length > 0) {
227
+ const latestObservation = observations[0];
228
+ return new decimal_js_1.default(latestObservation.value).div(100).toNumber();
229
+ }
230
+ else {
231
+ console.log('No observations found.');
232
+ return null;
233
+ }
234
+ }
235
+ catch (error) {
236
+ console.error('Error fetching Prime Rate from FRED API:', error.message);
237
+ return null;
238
+ }
239
+ }
240
+ }
241
+ exports.FinancialIndexesService = FinancialIndexesService;
@@ -0,0 +1,257 @@
1
+ import axios from 'axios';
2
+ import Decimal from 'decimal.js';
3
+
4
+ import { FinancialIndexesModel, IFinancialIndex, IFinancialIndexDoc } from '../models/FinancialIndexes.model';
5
+
6
+ export enum EFinancialIndex {
7
+ PRIME_RATE = 'PRIME_RATE',
8
+ }
9
+
10
+ export interface IFinancialIndexServiceConfig {
11
+ apiKey: string;
12
+ }
13
+
14
+ export class FinancialIndexesService {
15
+
16
+ private readonly config: IFinancialIndexServiceConfig;
17
+
18
+ constructor(
19
+ config: IFinancialIndexServiceConfig,
20
+ ) {
21
+ this.config = config;
22
+ }
23
+
24
+ async getFinancialAllIndexes(indexName: EFinancialIndex): Promise<IFinancialIndexDoc[]> {
25
+ return FinancialIndexesModel.aggregate<IFinancialIndexDoc>([
26
+ {
27
+ $match: {
28
+ 'name': indexName,
29
+ },
30
+ }, {
31
+ $sort: {
32
+ 'date': -1,
33
+ },
34
+ },
35
+ ]);
36
+ }
37
+
38
+ async getFinancialIndexValue(indexName: EFinancialIndex, date = new Date()): Promise<number> {
39
+ const indexes = await FinancialIndexesModel.aggregate<IFinancialIndexDoc>([
40
+ {
41
+ $match: {
42
+ 'name': indexName,
43
+ 'date': { $lte: date },
44
+ },
45
+ }, {
46
+ $sort: {
47
+ 'date': -1,
48
+ },
49
+ }, {
50
+ $limit: 1,
51
+ },
52
+ ]);
53
+ if (!indexes.length) {
54
+ return null;
55
+ }
56
+ return indexes[0].value;
57
+ }
58
+
59
+ async getAllFinancialIndexes(date = new Date()): Promise<IFinancialIndexDoc[]> {
60
+ const indexes = await FinancialIndexesModel.aggregate<IFinancialIndexDoc>([
61
+ {
62
+ $match: {
63
+ 'date': { $lte: date },
64
+ },
65
+ }, {
66
+ $sort: {
67
+ 'date': 1,
68
+ },
69
+ },
70
+ ]);
71
+ if (!indexes.length) {
72
+ return null;
73
+ }
74
+ return indexes;
75
+ }
76
+
77
+ async getAllFinancialIndexesWithHistory(date = new Date()): Promise<IFinancialIndexDoc[]> {
78
+
79
+ // TODO can remove from here
80
+ const historyData: IFinancialIndex[] = [
81
+ {
82
+ name: EFinancialIndex.PRIME_RATE,
83
+ date: new Date(2018, 2, 22),
84
+ value: 0.0475,
85
+ },
86
+ {
87
+ name: EFinancialIndex.PRIME_RATE,
88
+ date: new Date(2018, 5, 14),
89
+ value: 0.05,
90
+ },
91
+ {
92
+ name: EFinancialIndex.PRIME_RATE,
93
+ date: new Date(2018, 8, 27),
94
+ value: 0.0525,
95
+ },
96
+ {
97
+ name: EFinancialIndex.PRIME_RATE,
98
+ date: new Date(2018, 11, 20),
99
+ value: 0.055,
100
+ },
101
+ {
102
+ name: EFinancialIndex.PRIME_RATE,
103
+ date: new Date(2019, 5, 31),
104
+ value: 0.0525,
105
+ },
106
+ {
107
+ name: EFinancialIndex.PRIME_RATE,
108
+ date: new Date(2019, 8, 18),
109
+ value: 0.05,
110
+ },
111
+ {
112
+ name: EFinancialIndex.PRIME_RATE,
113
+ date: new Date(2019, 9, 30),
114
+ value: 0.0475,
115
+ },
116
+
117
+ {
118
+ name: EFinancialIndex.PRIME_RATE,
119
+ date: new Date(2020, 2, 3),
120
+ value: 0.0425,
121
+ },
122
+ {
123
+ name: EFinancialIndex.PRIME_RATE,
124
+ date: new Date(2020, 2, 15),
125
+ value: 0.0325,
126
+ },
127
+
128
+ {
129
+ name: EFinancialIndex.PRIME_RATE,
130
+ date: new Date(2022, 2, 16),
131
+ value: 0.035,
132
+ },
133
+ {
134
+ name: EFinancialIndex.PRIME_RATE,
135
+ date: new Date(2022, 4, 4),
136
+ value: 0.04,
137
+ },
138
+ {
139
+ name: EFinancialIndex.PRIME_RATE,
140
+ date: new Date(2022, 5, 15),
141
+ value: 0.0475,
142
+ },
143
+ {
144
+ name: EFinancialIndex.PRIME_RATE,
145
+ date: new Date(2022, 6, 27),
146
+ value: 0.055,
147
+ },
148
+ {
149
+ name: EFinancialIndex.PRIME_RATE,
150
+ date: new Date(2022, 8, 21),
151
+ value: 0.0625,
152
+ },
153
+ {
154
+ name: EFinancialIndex.PRIME_RATE,
155
+ date: new Date(2022, 10, 2),
156
+ value: 0.07,
157
+ },
158
+ {
159
+ name: EFinancialIndex.PRIME_RATE,
160
+ date: new Date(2022, 11, 14),
161
+ value: 0.075,
162
+ },
163
+
164
+ {
165
+ name: EFinancialIndex.PRIME_RATE,
166
+ date: new Date(2023, 1, 1),
167
+ value: 0.0775,
168
+ },
169
+ {
170
+ name: EFinancialIndex.PRIME_RATE,
171
+ date: new Date(2023, 2, 22),
172
+ value: 0.08,
173
+ },
174
+ {
175
+ name: EFinancialIndex.PRIME_RATE,
176
+ date: new Date(2023, 4, 3),
177
+ value: 0.0825,
178
+ },
179
+ {
180
+ name: EFinancialIndex.PRIME_RATE,
181
+ date: new Date(2023, 6, 26),
182
+ value: 0.085,
183
+ },
184
+ ];
185
+ console.log({ historyData });
186
+ await this.cleanIndexes(EFinancialIndex.PRIME_RATE);
187
+ await Promise.all(historyData.map(async (data) => {
188
+ await this.createIndex(data);
189
+ }));
190
+ // TODO to here
191
+
192
+ const indexes = await FinancialIndexesModel.aggregate<IFinancialIndexDoc>([
193
+ {
194
+ $match: {
195
+ 'date': { $lte: date },
196
+ },
197
+ }, {
198
+ $sort: {
199
+ 'date': -1,
200
+ },
201
+ },
202
+ ]);
203
+ if (!indexes.length) {
204
+ return null;
205
+ }
206
+ return indexes;
207
+ }
208
+
209
+ async createIndex(index: IFinancialIndex) {
210
+ const newIndex = new FinancialIndexesModel(index);
211
+ await newIndex.save();
212
+ }
213
+
214
+ async deleteIndex(indexId: string) {
215
+ await FinancialIndexesModel.findByIdAndDelete(indexId);
216
+ }
217
+
218
+ async cleanIndexes(index: EFinancialIndex) {
219
+ await FinancialIndexesModel.deleteMany({ name: index });
220
+ }
221
+
222
+ async updatePrimeRate() {
223
+ const currentPrimeRate = await this.getFinancialIndexValue(EFinancialIndex.PRIME_RATE);
224
+ const primeRate = await this.getPrimeRate();
225
+ if (currentPrimeRate === primeRate) {
226
+ return;
227
+ }
228
+ await this.createIndex({ date: new Date, value: primeRate, name: EFinancialIndex.PRIME_RATE });
229
+ }
230
+
231
+ async getPrimeRate() {
232
+ const FRED_API_URL = 'https://api.stlouisfed.org/fred/series/observations';
233
+ try {
234
+ const response = await axios.get(FRED_API_URL, {
235
+ params: {
236
+ series_id: 'DPRIME',
237
+ api_key: this.config.apiKey,
238
+ file_type: 'json',
239
+ sort_order: 'desc',
240
+ limit: 1,
241
+ },
242
+ });
243
+
244
+ const observations = response.data.observations;
245
+ if (observations && observations.length > 0) {
246
+ const latestObservation = observations[0];
247
+ return new Decimal(latestObservation.value).div(100).toNumber();
248
+ } else {
249
+ console.log('No observations found.');
250
+ return null;
251
+ }
252
+ } catch (error) {
253
+ console.error('Error fetching Prime Rate from FRED API:', error.message);
254
+ return null;
255
+ }
256
+ }
257
+ }
@@ -0,0 +1,74 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose from 'mongoose';
26
+ import { ISelectedMonth } from '../helpers/date.helper';
27
+ import { FinancialSpreadingDTO, IFinancialSpreading, IFinancialSpreadingParams, IFinancialSpreadingUpload, IFinancialSpreadingView } from '../models/FinancialSpreading.model';
28
+ import { FinancialSpreadingSheetDTO, IFinancialSpreadingSheet, IFinancialSpreadingSheetView } from '../models/FinancialSpreadingSheet.model';
29
+ import { UploadsService } from './uploads.service';
30
+ export declare const getShiftedMonth: (month: ISelectedMonth, shift: number) => {
31
+ year: number;
32
+ month: number;
33
+ };
34
+ export declare class FinancialSpreadingService {
35
+ private readonly uploadsService;
36
+ constructor(uploadsService: UploadsService);
37
+ clearData(rawData: IFinancialSpreading[], rawSheets: IFinancialSpreadingSheet[]): {
38
+ data: FinancialSpreadingDTO[];
39
+ sheets: FinancialSpreadingSheetDTO[];
40
+ };
41
+ getLastMonth(borrowerId: string): Promise<ISelectedMonth>;
42
+ addNewMonth(params: IFinancialSpreadingParams): Promise<ISelectedMonth>;
43
+ clearMonth(params: IFinancialSpreadingParams): Promise<ISelectedMonth>;
44
+ resetAll(params: IFinancialSpreadingParams): Promise<ISelectedMonth>;
45
+ resetSheets(): Promise<void>;
46
+ getFinancialSpreadingData(params: IFinancialSpreadingParams, monthDeep?: number): Promise<{
47
+ data: FinancialSpreadingDTO[];
48
+ sheets: FinancialSpreadingSheetDTO[];
49
+ }>;
50
+ updateFinancialSpreadingData(params: IFinancialSpreadingParams, data: IFinancialSpreadingView[], sheets: IFinancialSpreadingSheetView[]): Promise<{
51
+ success: boolean;
52
+ data: IFinancialSpreadingView[];
53
+ sheets: IFinancialSpreadingSheetView[];
54
+ message: string;
55
+ } | {
56
+ success: boolean;
57
+ message: string;
58
+ data?: undefined;
59
+ sheets?: undefined;
60
+ }>;
61
+ calculateTotals(params: IFinancialSpreadingParams): Promise<void>;
62
+ private calculatePL;
63
+ private calculateBS;
64
+ createNewSheet(sheet: IFinancialSpreadingSheetView): Promise<mongoose.Document<unknown, {}, IFinancialSpreadingSheet> & IFinancialSpreadingSheet & Required<{
65
+ _id: mongoose.Types.ObjectId;
66
+ }>>;
67
+ deleteRedundantSheets(sheetIds: string[]): Promise<void>;
68
+ private getAllBorrowerSheets;
69
+ getCreateAllBorrowerSheet(params: IFinancialSpreadingParams): Promise<(mongoose.FlattenMaps<IFinancialSpreadingSheet> & Required<{
70
+ _id: mongoose.Types.ObjectId;
71
+ }>)[]>;
72
+ getExcelFile(params: IFinancialSpreadingParams): Promise<any>;
73
+ uploadData(data: IFinancialSpreadingUpload[], params: IFinancialSpreadingParams): Promise<void>;
74
+ }