gemcap-be-common 1.2.136 → 1.2.138

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 (54) hide show
  1. package/db/collaterals.db.d.ts +1 -1
  2. package/db/collaterals.db.js +2 -2
  3. package/db/collaterals.db.ts +2 -2
  4. package/db/financial-spreading.db.d.ts +34 -0
  5. package/db/financial-spreading.db.js +103 -0
  6. package/db/financial-spreading.db.ts +112 -0
  7. package/db/inventories.db.js +2 -2
  8. package/db/inventories.db.ts +2 -2
  9. package/db/loan-products.db.js +3 -4
  10. package/db/loan-products.db.ts +3 -4
  11. package/db/loan-transactions.db.d.ts +3 -1
  12. package/db/loan-transactions.db.js +62 -2
  13. package/db/loan-transactions.db.ts +72 -1
  14. package/db/receivables.db.js +1 -1
  15. package/db/receivables.db.ts +1 -1
  16. package/helpers/date.helper.d.ts +4 -0
  17. package/helpers/date.helper.js +6 -1
  18. package/helpers/date.helper.ts +5 -0
  19. package/models/AvilabilitySignedData.model.d.ts +33 -0
  20. package/models/AvilabilitySignedData.model.js +22 -0
  21. package/models/AvilabilitySignedData.model.ts +30 -0
  22. package/models/BorrowerSummary.model.d.ts +70 -0
  23. package/models/BorrowerSummary.model.js +37 -0
  24. package/models/BorrowerSummary.model.ts +72 -0
  25. package/models/FinancialSpreading.model.d.ts +76 -0
  26. package/models/FinancialSpreading.model.js +65 -0
  27. package/models/FinancialSpreading.model.ts +110 -0
  28. package/models/FinancialSpreadingSheet.model.d.ts +152 -0
  29. package/models/FinancialSpreadingSheet.model.js +207 -0
  30. package/models/FinancialSpreadingSheet.model.ts +240 -0
  31. package/models/LoanTransaction.model.d.ts +8 -0
  32. package/models/LoanTransaction.model.ts +9 -0
  33. package/models/PostponedTransactions.model.d.ts +3 -3
  34. package/models/ProspectIndustry.model.d.ts +35 -0
  35. package/models/ProspectIndustry.model.js +26 -0
  36. package/models/ProspectIndustry.model.ts +38 -0
  37. package/models/Yield.model.d.ts +46 -0
  38. package/models/Yield.model.js +20 -1
  39. package/models/Yield.model.ts +20 -0
  40. package/package.json +1 -1
  41. package/queries/inventory/extension.js +3 -3
  42. package/queries/inventory/extension.ts +3 -3
  43. package/queries/inventory/turn.js +3 -3
  44. package/queries/inventory/turn.ts +3 -3
  45. package/reports/new-summary.d.ts +0 -0
  46. package/reports/new-summary.js +1327 -0
  47. package/reports/new-summary.ts +1327 -0
  48. package/services/users.service.d.ts +3 -3
  49. package/services/users.service.js +3 -3
  50. package/services/users.service.ts +4 -4
  51. package/services/yield.service.d.ts +53 -0
  52. package/services/yield.service.js +161 -0
  53. package/services/yield.service.ts +198 -0
  54. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,207 @@
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.FinancialSpreadingSheet = exports.financialSpreadingSheetViewValidationSchema = exports.FinancialSpreadingSheetDTO = exports.financeSpreadingLists = exports.financialSpreadingTotalDictionary = exports.financeSpreadingBSList = exports.EFinanceSpreadingBSTotal = exports.financeSpreadingPLList = exports.EFinanceSpreadingPLTotal = exports.EFinancialSpreadingType = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const joi_1 = __importDefault(require("joi"));
9
+ const _models_1 = require("../models/_models");
10
+ const db_data_helper_1 = require("../helpers/db-data.helper");
11
+ var EFinancialSpreadingType;
12
+ (function (EFinancialSpreadingType) {
13
+ EFinancialSpreadingType["PROFIT_LOSS"] = "PROFIT_LOSS";
14
+ EFinancialSpreadingType["BALANCE_SHEET"] = "BALANCE_SHEET";
15
+ })(EFinancialSpreadingType || (exports.EFinancialSpreadingType = EFinancialSpreadingType = {}));
16
+ var EFinanceSpreadingPLTotal;
17
+ (function (EFinanceSpreadingPLTotal) {
18
+ EFinanceSpreadingPLTotal["SALES"] = "SALES";
19
+ EFinanceSpreadingPLTotal["COST_OF_SALES"] = "COST_OF_SALES";
20
+ EFinanceSpreadingPLTotal["GROSS_PROFIT"] = "GROSS_PROFIT";
21
+ EFinanceSpreadingPLTotal["GROSS_MARGIN"] = "GROSS_MARGIN";
22
+ EFinanceSpreadingPLTotal["OPERATING_EXPENSES"] = "OPERATING_EXPENSES";
23
+ EFinanceSpreadingPLTotal["INCOME_FROM_OPERATIONS"] = "INCOME_FROM_OPERATIONS";
24
+ EFinanceSpreadingPLTotal["OPERATING_MARGIN"] = "OPERATING_MARGIN";
25
+ EFinanceSpreadingPLTotal["NON_OPERATING_EXPENSES"] = "NON_OPERATING_EXPENSES";
26
+ EFinanceSpreadingPLTotal["NON_OPERATING_INCOME"] = "NON_OPERATING_INCOME";
27
+ EFinanceSpreadingPLTotal["FINANCING_COSTS"] = "FINANCING_COSTS";
28
+ EFinanceSpreadingPLTotal["DEPRECIATION_AMORTIZATION"] = "DEPRECIATION_AMORTIZATION";
29
+ EFinanceSpreadingPLTotal["PRE_TAX_INCOME"] = "PRE_TAX_INCOME";
30
+ EFinanceSpreadingPLTotal["TAX"] = "TAX";
31
+ EFinanceSpreadingPLTotal["NET_INCOME"] = "NET_INCOME";
32
+ })(EFinanceSpreadingPLTotal || (exports.EFinanceSpreadingPLTotal = EFinanceSpreadingPLTotal = {}));
33
+ exports.financeSpreadingPLList = {
34
+ [EFinanceSpreadingPLTotal.SALES]: false,
35
+ [EFinanceSpreadingPLTotal.COST_OF_SALES]: false,
36
+ [EFinanceSpreadingPLTotal.GROSS_PROFIT]: true,
37
+ [EFinanceSpreadingPLTotal.GROSS_MARGIN]: true,
38
+ [EFinanceSpreadingPLTotal.OPERATING_EXPENSES]: false,
39
+ [EFinanceSpreadingPLTotal.OPERATING_MARGIN]: true,
40
+ [EFinanceSpreadingPLTotal.INCOME_FROM_OPERATIONS]: true,
41
+ [EFinanceSpreadingPLTotal.NON_OPERATING_EXPENSES]: false,
42
+ [EFinanceSpreadingPLTotal.NON_OPERATING_INCOME]: false,
43
+ [EFinanceSpreadingPLTotal.FINANCING_COSTS]: false,
44
+ [EFinanceSpreadingPLTotal.DEPRECIATION_AMORTIZATION]: false,
45
+ [EFinanceSpreadingPLTotal.PRE_TAX_INCOME]: true,
46
+ [EFinanceSpreadingPLTotal.TAX]: false,
47
+ [EFinanceSpreadingPLTotal.NET_INCOME]: true,
48
+ };
49
+ var EFinanceSpreadingBSTotal;
50
+ (function (EFinanceSpreadingBSTotal) {
51
+ EFinanceSpreadingBSTotal["CASH_EQUIVALENTS"] = "CASH_EQUIVALENTS";
52
+ EFinanceSpreadingBSTotal["TRADE_RECEIVABLES"] = "TRADE_RECEIVABLES";
53
+ EFinanceSpreadingBSTotal["INVENTORY"] = "INVENTORY";
54
+ EFinanceSpreadingBSTotal["OTHER_CURRENT_ASSETS"] = "OTHER_CURRENT_ASSETS";
55
+ EFinanceSpreadingBSTotal["TOTAL_CURRENT_ASSET"] = "TOTAL_CURRENT_ASSET";
56
+ EFinanceSpreadingBSTotal["FIXED_ASSETS"] = "FIXED_ASSETS";
57
+ EFinanceSpreadingBSTotal["OTHER_NON_CURRENT_ASSETS"] = "OTHER_NON_CURRENT_ASSETS";
58
+ EFinanceSpreadingBSTotal["TOTAL_NON_CURRENT_ASSETS"] = "TOTAL_NON_CURRENT_ASSETS";
59
+ EFinanceSpreadingBSTotal["TOTAL_ASSETS"] = "TOTAL_ASSETS";
60
+ EFinanceSpreadingBSTotal["ACCOUNTS_PAYABLE"] = "ACCOUNTS_PAYABLE";
61
+ EFinanceSpreadingBSTotal["OTHER_CURRENT_LIABILITIES"] = "OTHER_CURRENT_LIABILITIES";
62
+ EFinanceSpreadingBSTotal["TOTAL_CURRENT_LIABILITIES"] = "TOTAL_CURRENT_LIABILITIES";
63
+ EFinanceSpreadingBSTotal["COMPANY_DEBT"] = "COMPANY_DEBT";
64
+ EFinanceSpreadingBSTotal["OTHER_DEBT"] = "OTHER_DEBT";
65
+ EFinanceSpreadingBSTotal["OTHER_LONG_TERM_LIABILITIES"] = "OTHER_LONG_TERM_LIABILITIES";
66
+ EFinanceSpreadingBSTotal["LONG_TERM_LIABILITIES"] = "LONG_TERM_LIABILITIES";
67
+ EFinanceSpreadingBSTotal["TOTAL_LIABILITIES"] = "TOTAL_LIABILITIES";
68
+ EFinanceSpreadingBSTotal["RETAINED_EARNINGS"] = "RETAINED_EARNINGS";
69
+ EFinanceSpreadingBSTotal["EQUITY_RESERVES"] = "EQUITY_RESERVES";
70
+ EFinanceSpreadingBSTotal["CHECK"] = "CHECK";
71
+ })(EFinanceSpreadingBSTotal || (exports.EFinanceSpreadingBSTotal = EFinanceSpreadingBSTotal = {}));
72
+ exports.financeSpreadingBSList = {
73
+ [EFinanceSpreadingBSTotal.CASH_EQUIVALENTS]: false,
74
+ [EFinanceSpreadingBSTotal.TRADE_RECEIVABLES]: false,
75
+ [EFinanceSpreadingBSTotal.INVENTORY]: false,
76
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_ASSETS]: false,
77
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_ASSET]: true,
78
+ [EFinanceSpreadingBSTotal.FIXED_ASSETS]: false,
79
+ [EFinanceSpreadingBSTotal.OTHER_NON_CURRENT_ASSETS]: false,
80
+ [EFinanceSpreadingBSTotal.TOTAL_NON_CURRENT_ASSETS]: true,
81
+ [EFinanceSpreadingBSTotal.TOTAL_ASSETS]: true,
82
+ [EFinanceSpreadingBSTotal.ACCOUNTS_PAYABLE]: false,
83
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_LIABILITIES]: false,
84
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_LIABILITIES]: true,
85
+ [EFinanceSpreadingBSTotal.COMPANY_DEBT]: false,
86
+ [EFinanceSpreadingBSTotal.OTHER_DEBT]: false,
87
+ [EFinanceSpreadingBSTotal.OTHER_LONG_TERM_LIABILITIES]: false,
88
+ [EFinanceSpreadingBSTotal.LONG_TERM_LIABILITIES]: true,
89
+ [EFinanceSpreadingBSTotal.TOTAL_LIABILITIES]: true,
90
+ [EFinanceSpreadingBSTotal.RETAINED_EARNINGS]: false,
91
+ [EFinanceSpreadingBSTotal.EQUITY_RESERVES]: false,
92
+ [EFinanceSpreadingBSTotal.CHECK]: true,
93
+ };
94
+ exports.financialSpreadingTotalDictionary = {
95
+ [EFinanceSpreadingPLTotal.SALES]: 'Sales',
96
+ [EFinanceSpreadingPLTotal.COST_OF_SALES]: 'Cost of Sales',
97
+ [EFinanceSpreadingPLTotal.GROSS_PROFIT]: 'Gross Profit',
98
+ [EFinanceSpreadingPLTotal.GROSS_MARGIN]: 'Gross Margin',
99
+ [EFinanceSpreadingPLTotal.OPERATING_EXPENSES]: 'Operating Expenses',
100
+ [EFinanceSpreadingPLTotal.INCOME_FROM_OPERATIONS]: 'Income from Operations',
101
+ [EFinanceSpreadingPLTotal.OPERATING_MARGIN]: 'Operating Margin',
102
+ [EFinanceSpreadingPLTotal.NON_OPERATING_EXPENSES]: 'Non operating Expenses',
103
+ [EFinanceSpreadingPLTotal.NON_OPERATING_INCOME]: 'Non operating Income',
104
+ [EFinanceSpreadingPLTotal.FINANCING_COSTS]: 'Financing Costs',
105
+ [EFinanceSpreadingPLTotal.DEPRECIATION_AMORTIZATION]: 'Depreciation & Amortization',
106
+ [EFinanceSpreadingPLTotal.PRE_TAX_INCOME]: 'Pre-Tax Income',
107
+ [EFinanceSpreadingPLTotal.TAX]: 'Tax',
108
+ [EFinanceSpreadingPLTotal.NET_INCOME]: 'Net Income',
109
+ [EFinanceSpreadingBSTotal.CASH_EQUIVALENTS]: 'Cash & Equivalents',
110
+ [EFinanceSpreadingBSTotal.TRADE_RECEIVABLES]: 'Trade Receivables',
111
+ [EFinanceSpreadingBSTotal.INVENTORY]: 'Inventory',
112
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_ASSETS]: 'Other Current Assets',
113
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_ASSET]: 'Total Current Assets',
114
+ [EFinanceSpreadingBSTotal.FIXED_ASSETS]: 'Fixed Assets',
115
+ [EFinanceSpreadingBSTotal.OTHER_NON_CURRENT_ASSETS]: 'Other Non Current Assets',
116
+ [EFinanceSpreadingBSTotal.TOTAL_NON_CURRENT_ASSETS]: 'Total Non Current Assets',
117
+ [EFinanceSpreadingBSTotal.ACCOUNTS_PAYABLE]: 'Accounts Payable',
118
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_LIABILITIES]: 'Other Current Liabilities',
119
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_LIABILITIES]: 'Total Current Liabilities',
120
+ [EFinanceSpreadingBSTotal.COMPANY_DEBT]: 'Senior Debt',
121
+ [EFinanceSpreadingBSTotal.OTHER_DEBT]: 'Other Debt',
122
+ [EFinanceSpreadingBSTotal.OTHER_LONG_TERM_LIABILITIES]: 'Other Long Term Liabilities',
123
+ [EFinanceSpreadingBSTotal.LONG_TERM_LIABILITIES]: 'Long Term Liabilities',
124
+ [EFinanceSpreadingBSTotal.TOTAL_ASSETS]: 'Total Assets',
125
+ [EFinanceSpreadingBSTotal.TOTAL_LIABILITIES]: 'Total Liabilities',
126
+ [EFinanceSpreadingBSTotal.RETAINED_EARNINGS]: 'Retained Earnings',
127
+ [EFinanceSpreadingBSTotal.EQUITY_RESERVES]: 'Equity & Reserves',
128
+ [EFinanceSpreadingBSTotal.CHECK]: 'Check',
129
+ };
130
+ exports.financeSpreadingLists = {
131
+ [EFinancialSpreadingType.PROFIT_LOSS]: exports.financeSpreadingPLList,
132
+ [EFinancialSpreadingType.BALANCE_SHEET]: exports.financeSpreadingBSList,
133
+ };
134
+ class FinancialSpreadingSheetDTO extends db_data_helper_1.BasicDTO {
135
+ borrowerId;
136
+ financialSpreadingType;
137
+ rowType;
138
+ name;
139
+ order;
140
+ suborder;
141
+ isTotal;
142
+ isCalculated;
143
+ }
144
+ exports.FinancialSpreadingSheetDTO = FinancialSpreadingSheetDTO;
145
+ exports.financialSpreadingSheetViewValidationSchema = joi_1.default.object({
146
+ _id: joi_1.default.string().required(),
147
+ name: joi_1.default.string().required(),
148
+ borrowerId: joi_1.default.string().required(),
149
+ financialSpreadingType: joi_1.default.string().required(),
150
+ rowType: joi_1.default.string().required(),
151
+ order: joi_1.default.number().integer().required(),
152
+ suborder: joi_1.default.number().integer().required(),
153
+ isTotal: joi_1.default.boolean().required(),
154
+ isCalculated: joi_1.default.boolean().required(),
155
+ });
156
+ const FinancialSpreadingSheetSchema = new mongoose_1.default.Schema({
157
+ borrowerId: {
158
+ type: mongoose_1.default.Schema.Types.ObjectId,
159
+ ref: _models_1.MODEL_NAMES.borrowers,
160
+ required: true,
161
+ },
162
+ financialSpreadingType: {
163
+ type: String,
164
+ enum: Object.values(EFinancialSpreadingType),
165
+ required: true,
166
+ },
167
+ rowType: {
168
+ type: String,
169
+ enum: [...Object.values(EFinanceSpreadingPLTotal), ...Object.values(EFinanceSpreadingBSTotal)],
170
+ required: true,
171
+ validate: {
172
+ validator: function (value) {
173
+ if (this.financialSpreadingType === EFinancialSpreadingType.PROFIT_LOSS && !(value in EFinanceSpreadingPLTotal)) {
174
+ return false;
175
+ }
176
+ if (this.financialSpreadingType === EFinancialSpreadingType.BALANCE_SHEET && !(value in EFinanceSpreadingBSTotal)) {
177
+ return false;
178
+ }
179
+ return true;
180
+ },
181
+ message: 'Invalid rowType for the provided financialSpreadingType',
182
+ },
183
+ },
184
+ name: {
185
+ type: String,
186
+ required: true,
187
+ },
188
+ order: {
189
+ type: Number,
190
+ required: true,
191
+ },
192
+ suborder: {
193
+ type: Number,
194
+ required: true,
195
+ },
196
+ isTotal: {
197
+ type: Boolean,
198
+ required: true,
199
+ },
200
+ isCalculated: {
201
+ type: Boolean,
202
+ required: true,
203
+ },
204
+ }, {
205
+ timestamps: { createdAt: true, updatedAt: true },
206
+ });
207
+ exports.FinancialSpreadingSheet = mongoose_1.default.model(_models_1.MODEL_NAMES.financialSpreadingSheets, FinancialSpreadingSheetSchema);
@@ -0,0 +1,240 @@
1
+ import mongoose, { Model } from 'mongoose';
2
+ import Joi from 'joi';
3
+
4
+ import { MODEL_NAMES } from '../models/_models';
5
+ import { BasicDTO } from '../helpers/db-data.helper';
6
+
7
+ export enum EFinancialSpreadingType {
8
+ PROFIT_LOSS = 'PROFIT_LOSS',
9
+ BALANCE_SHEET = 'BALANCE_SHEET',
10
+ }
11
+
12
+ export enum EFinanceSpreadingPLTotal {
13
+ SALES = 'SALES',
14
+ COST_OF_SALES = 'COST_OF_SALES',
15
+ GROSS_PROFIT = 'GROSS_PROFIT',
16
+ GROSS_MARGIN = 'GROSS_MARGIN',
17
+ OPERATING_EXPENSES = 'OPERATING_EXPENSES',
18
+ INCOME_FROM_OPERATIONS = 'INCOME_FROM_OPERATIONS',
19
+ OPERATING_MARGIN = 'OPERATING_MARGIN',
20
+ NON_OPERATING_EXPENSES = 'NON_OPERATING_EXPENSES',
21
+ NON_OPERATING_INCOME = 'NON_OPERATING_INCOME',
22
+ FINANCING_COSTS = 'FINANCING_COSTS',
23
+ DEPRECIATION_AMORTIZATION = 'DEPRECIATION_AMORTIZATION',
24
+ PRE_TAX_INCOME = 'PRE_TAX_INCOME',
25
+ TAX = 'TAX',
26
+ NET_INCOME = 'NET_INCOME',
27
+ }
28
+
29
+ export const financeSpreadingPLList: { [type in EFinanceSpreadingPLTotal]?: boolean } = {
30
+ [EFinanceSpreadingPLTotal.SALES]: false,
31
+ [EFinanceSpreadingPLTotal.COST_OF_SALES]: false,
32
+ [EFinanceSpreadingPLTotal.GROSS_PROFIT]: true,
33
+ [EFinanceSpreadingPLTotal.GROSS_MARGIN]: true,
34
+ [EFinanceSpreadingPLTotal.OPERATING_EXPENSES]: false,
35
+ [EFinanceSpreadingPLTotal.OPERATING_MARGIN]: true,
36
+ [EFinanceSpreadingPLTotal.INCOME_FROM_OPERATIONS]: true,
37
+ [EFinanceSpreadingPLTotal.NON_OPERATING_EXPENSES]: false,
38
+ [EFinanceSpreadingPLTotal.NON_OPERATING_INCOME]: false,
39
+ [EFinanceSpreadingPLTotal.FINANCING_COSTS]: false,
40
+ [EFinanceSpreadingPLTotal.DEPRECIATION_AMORTIZATION]: false,
41
+ [EFinanceSpreadingPLTotal.PRE_TAX_INCOME]: true,
42
+ [EFinanceSpreadingPLTotal.TAX]: false,
43
+ [EFinanceSpreadingPLTotal.NET_INCOME]: true,
44
+ };
45
+
46
+ export enum EFinanceSpreadingBSTotal {
47
+ CASH_EQUIVALENTS = 'CASH_EQUIVALENTS',
48
+ TRADE_RECEIVABLES = 'TRADE_RECEIVABLES',
49
+ INVENTORY = 'INVENTORY',
50
+ OTHER_CURRENT_ASSETS = 'OTHER_CURRENT_ASSETS',
51
+ TOTAL_CURRENT_ASSET = 'TOTAL_CURRENT_ASSET',
52
+ FIXED_ASSETS = 'FIXED_ASSETS',
53
+ OTHER_NON_CURRENT_ASSETS = 'OTHER_NON_CURRENT_ASSETS',
54
+ TOTAL_NON_CURRENT_ASSETS = 'TOTAL_NON_CURRENT_ASSETS',
55
+ TOTAL_ASSETS = 'TOTAL_ASSETS',
56
+ ACCOUNTS_PAYABLE = 'ACCOUNTS_PAYABLE',
57
+ OTHER_CURRENT_LIABILITIES = 'OTHER_CURRENT_LIABILITIES',
58
+ TOTAL_CURRENT_LIABILITIES = 'TOTAL_CURRENT_LIABILITIES',
59
+ COMPANY_DEBT = 'COMPANY_DEBT',
60
+ OTHER_DEBT = 'OTHER_DEBT',
61
+ OTHER_LONG_TERM_LIABILITIES = 'OTHER_LONG_TERM_LIABILITIES',
62
+ LONG_TERM_LIABILITIES = 'LONG_TERM_LIABILITIES',
63
+ TOTAL_LIABILITIES = 'TOTAL_LIABILITIES',
64
+ RETAINED_EARNINGS = 'RETAINED_EARNINGS',
65
+ EQUITY_RESERVES = 'EQUITY_RESERVES',
66
+ CHECK = 'CHECK'
67
+ }
68
+
69
+ export const financeSpreadingBSList: { [type in EFinanceSpreadingBSTotal]?: boolean } = {
70
+ [EFinanceSpreadingBSTotal.CASH_EQUIVALENTS]: false,
71
+ [EFinanceSpreadingBSTotal.TRADE_RECEIVABLES]: false,
72
+ [EFinanceSpreadingBSTotal.INVENTORY]: false,
73
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_ASSETS]: false,
74
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_ASSET]: true,
75
+ [EFinanceSpreadingBSTotal.FIXED_ASSETS]: false,
76
+ [EFinanceSpreadingBSTotal.OTHER_NON_CURRENT_ASSETS]: false,
77
+ [EFinanceSpreadingBSTotal.TOTAL_NON_CURRENT_ASSETS]: true,
78
+ [EFinanceSpreadingBSTotal.TOTAL_ASSETS]: true,
79
+ [EFinanceSpreadingBSTotal.ACCOUNTS_PAYABLE]: false,
80
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_LIABILITIES]: false,
81
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_LIABILITIES]: true,
82
+ [EFinanceSpreadingBSTotal.COMPANY_DEBT]: false,
83
+ [EFinanceSpreadingBSTotal.OTHER_DEBT]: false,
84
+ [EFinanceSpreadingBSTotal.OTHER_LONG_TERM_LIABILITIES]: false,
85
+ [EFinanceSpreadingBSTotal.LONG_TERM_LIABILITIES]: true,
86
+ [EFinanceSpreadingBSTotal.TOTAL_LIABILITIES]: true,
87
+ [EFinanceSpreadingBSTotal.RETAINED_EARNINGS]: false,
88
+ [EFinanceSpreadingBSTotal.EQUITY_RESERVES]: false,
89
+ [EFinanceSpreadingBSTotal.CHECK]: true,
90
+ };
91
+
92
+ export const financialSpreadingTotalDictionary: Record<EFinanceSpreadingPLTotal | EFinanceSpreadingBSTotal, string> = {
93
+ [EFinanceSpreadingPLTotal.SALES]: 'Sales',
94
+ [EFinanceSpreadingPLTotal.COST_OF_SALES]: 'Cost of Sales',
95
+ [EFinanceSpreadingPLTotal.GROSS_PROFIT]: 'Gross Profit',
96
+ [EFinanceSpreadingPLTotal.GROSS_MARGIN]: 'Gross Margin',
97
+ [EFinanceSpreadingPLTotal.OPERATING_EXPENSES]: 'Operating Expenses',
98
+ [EFinanceSpreadingPLTotal.INCOME_FROM_OPERATIONS]: 'Income from Operations',
99
+ [EFinanceSpreadingPLTotal.OPERATING_MARGIN]: 'Operating Margin',
100
+ [EFinanceSpreadingPLTotal.NON_OPERATING_EXPENSES]: 'Non operating Expenses',
101
+ [EFinanceSpreadingPLTotal.NON_OPERATING_INCOME]: 'Non operating Income',
102
+ [EFinanceSpreadingPLTotal.FINANCING_COSTS]: 'Financing Costs',
103
+ [EFinanceSpreadingPLTotal.DEPRECIATION_AMORTIZATION]: 'Depreciation & Amortization',
104
+ [EFinanceSpreadingPLTotal.PRE_TAX_INCOME]: 'Pre-Tax Income',
105
+ [EFinanceSpreadingPLTotal.TAX]: 'Tax',
106
+ [EFinanceSpreadingPLTotal.NET_INCOME]: 'Net Income',
107
+ [EFinanceSpreadingBSTotal.CASH_EQUIVALENTS]: 'Cash & Equivalents',
108
+ [EFinanceSpreadingBSTotal.TRADE_RECEIVABLES]: 'Trade Receivables',
109
+ [EFinanceSpreadingBSTotal.INVENTORY]: 'Inventory',
110
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_ASSETS]: 'Other Current Assets',
111
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_ASSET]: 'Total Current Assets',
112
+ [EFinanceSpreadingBSTotal.FIXED_ASSETS]: 'Fixed Assets',
113
+ [EFinanceSpreadingBSTotal.OTHER_NON_CURRENT_ASSETS]: 'Other Non Current Assets',
114
+ [EFinanceSpreadingBSTotal.TOTAL_NON_CURRENT_ASSETS]: 'Total Non Current Assets',
115
+ [EFinanceSpreadingBSTotal.ACCOUNTS_PAYABLE]: 'Accounts Payable',
116
+ [EFinanceSpreadingBSTotal.OTHER_CURRENT_LIABILITIES]: 'Other Current Liabilities',
117
+ [EFinanceSpreadingBSTotal.TOTAL_CURRENT_LIABILITIES]: 'Total Current Liabilities',
118
+ [EFinanceSpreadingBSTotal.COMPANY_DEBT]: 'Senior Debt',
119
+ [EFinanceSpreadingBSTotal.OTHER_DEBT]: 'Other Debt',
120
+ [EFinanceSpreadingBSTotal.OTHER_LONG_TERM_LIABILITIES]: 'Other Long Term Liabilities',
121
+ [EFinanceSpreadingBSTotal.LONG_TERM_LIABILITIES]: 'Long Term Liabilities',
122
+ [EFinanceSpreadingBSTotal.TOTAL_ASSETS]: 'Total Assets',
123
+ [EFinanceSpreadingBSTotal.TOTAL_LIABILITIES]: 'Total Liabilities',
124
+ [EFinanceSpreadingBSTotal.RETAINED_EARNINGS]: 'Retained Earnings',
125
+ [EFinanceSpreadingBSTotal.EQUITY_RESERVES]: 'Equity & Reserves',
126
+ [EFinanceSpreadingBSTotal.CHECK]: 'Check',
127
+ };
128
+
129
+ export const financeSpreadingLists = {
130
+ [EFinancialSpreadingType.PROFIT_LOSS]: financeSpreadingPLList,
131
+ [EFinancialSpreadingType.BALANCE_SHEET]: financeSpreadingBSList,
132
+ };
133
+
134
+ export interface IFinancialSpreadingSheetView {
135
+ _id: string;
136
+ name: string;
137
+ borrowerId: string;
138
+ financialSpreadingType: string;
139
+ rowType: string;
140
+ order: number;
141
+ suborder: number;
142
+ isTotal: boolean;
143
+ isCalculated: boolean;
144
+ }
145
+
146
+ export class FinancialSpreadingSheetDTO extends BasicDTO {
147
+ borrowerId: string;
148
+ financialSpreadingType: EFinancialSpreadingType;
149
+ rowType: EFinanceSpreadingPLTotal | EFinanceSpreadingBSTotal;
150
+ name: string;
151
+ order: number;
152
+ suborder: number;
153
+ isTotal: boolean;
154
+ isCalculated: boolean;
155
+ }
156
+
157
+ export const financialSpreadingSheetViewValidationSchema = Joi.object<IFinancialSpreadingSheetView>({
158
+ _id: Joi.string().required(),
159
+ name: Joi.string().required(),
160
+ borrowerId: Joi.string().required(),
161
+ financialSpreadingType: Joi.string().required(),
162
+ rowType: Joi.string().required(),
163
+ order: Joi.number().integer().required(),
164
+ suborder: Joi.number().integer().required(),
165
+ isTotal: Joi.boolean().required(),
166
+ isCalculated: Joi.boolean().required(),
167
+ });
168
+
169
+ export interface IFinancialSpreadingSheet {
170
+ _id?: mongoose.Types.ObjectId;
171
+ borrowerId: mongoose.Types.ObjectId;
172
+ financialSpreadingType: EFinancialSpreadingType;
173
+ rowType: EFinanceSpreadingPLTotal | EFinanceSpreadingBSTotal;
174
+ name: string;
175
+ order: number;
176
+ suborder: number;
177
+ isTotal: boolean;
178
+ isCalculated: boolean;
179
+ }
180
+
181
+ type IFinancialSpreadingSheetModel = Model<IFinancialSpreadingSheet, {}, {}>;
182
+
183
+ const FinancialSpreadingSheetSchema = new mongoose.Schema<IFinancialSpreadingSheet, IFinancialSpreadingSheetModel>(
184
+ {
185
+ borrowerId: {
186
+ type: mongoose.Schema.Types.ObjectId,
187
+ ref: MODEL_NAMES.borrowers,
188
+ required: true,
189
+ },
190
+ financialSpreadingType: {
191
+ type: String,
192
+ enum: Object.values(EFinancialSpreadingType),
193
+ required: true,
194
+ },
195
+ rowType: {
196
+ type: String,
197
+ enum: [...Object.values(EFinanceSpreadingPLTotal), ...Object.values(EFinanceSpreadingBSTotal)],
198
+ required: true,
199
+ validate: {
200
+ validator: function(this: any, value: string) {
201
+ if (this.financialSpreadingType === EFinancialSpreadingType.PROFIT_LOSS && !(value in EFinanceSpreadingPLTotal)) {
202
+ return false;
203
+ }
204
+
205
+ if (this.financialSpreadingType === EFinancialSpreadingType.BALANCE_SHEET && !(value in EFinanceSpreadingBSTotal)) {
206
+ return false;
207
+ }
208
+
209
+ return true;
210
+ },
211
+ message: 'Invalid rowType for the provided financialSpreadingType',
212
+ },
213
+ },
214
+ name: {
215
+ type: String,
216
+ required: true,
217
+ },
218
+ order: {
219
+ type: Number,
220
+ required: true,
221
+ },
222
+ suborder: {
223
+ type: Number,
224
+ required: true,
225
+ },
226
+ isTotal: {
227
+ type: Boolean,
228
+ required: true,
229
+ },
230
+ isCalculated: {
231
+ type: Boolean,
232
+ required: true,
233
+ },
234
+ },
235
+ {
236
+ timestamps: { createdAt: true, updatedAt: true },
237
+ },
238
+ );
239
+
240
+ export const FinancialSpreadingSheet = mongoose.model<IFinancialSpreadingSheet, IFinancialSpreadingSheetModel>(MODEL_NAMES.financialSpreadingSheets, FinancialSpreadingSheetSchema);
@@ -74,6 +74,14 @@ export interface ILoanTransactionDoc extends ILoanTransaction, Document {
74
74
  export interface ILoanTransactionModel extends Model<ILoanTransaction> {
75
75
  findByIdAndDeleteWithUserId(id: string, userId: string): Promise<void>;
76
76
  }
77
+ export interface ITransactionsFilter {
78
+ periodStart: Date;
79
+ periodEnd: Date;
80
+ borrowerId: string;
81
+ productId: string;
82
+ amount?: number;
83
+ reference?: string;
84
+ }
77
85
  export declare const LoanTransactionSchema: mongoose.Schema<ILoanTransaction, ILoanTransactionModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, ILoanTransaction, mongoose.Document<unknown, {}, mongoose.FlatRecord<ILoanTransaction>> & mongoose.FlatRecord<ILoanTransaction> & {
78
86
  _id: mongoose.Types.ObjectId;
79
87
  }>;
@@ -87,6 +87,15 @@ export interface ILoanTransactionModel extends Model<ILoanTransaction> {
87
87
  findByIdAndDeleteWithUserId(id: string, userId: string): Promise<void>;
88
88
  }
89
89
 
90
+ export interface ITransactionsFilter {
91
+ periodStart: Date;
92
+ periodEnd: Date;
93
+ borrowerId: string;
94
+ productId: string;
95
+ amount?: number;
96
+ reference?: string;
97
+ }
98
+
90
99
  export const LoanTransactionSchema = new mongoose.Schema<ILoanTransaction, ILoanTransactionModel>(
91
100
  {
92
101
  userId: {
@@ -38,18 +38,18 @@ export declare const PostponedTransactionSchema: mongoose.Schema<any, mongoose.M
38
38
  timestamps: false;
39
39
  }, {
40
40
  productId: mongoose.Types.ObjectId;
41
- transactionId: mongoose.Types.ObjectId;
42
41
  postponedToDate: string;
42
+ transactionId: mongoose.Types.ObjectId;
43
43
  __v?: number;
44
44
  }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
45
45
  productId: mongoose.Types.ObjectId;
46
- transactionId: mongoose.Types.ObjectId;
47
46
  postponedToDate: string;
47
+ transactionId: mongoose.Types.ObjectId;
48
48
  __v?: number;
49
49
  }>> & mongoose.FlatRecord<{
50
50
  productId: mongoose.Types.ObjectId;
51
- transactionId: mongoose.Types.ObjectId;
52
51
  postponedToDate: string;
52
+ transactionId: mongoose.Types.ObjectId;
53
53
  __v?: number;
54
54
  }> & {
55
55
  _id: mongoose.Types.ObjectId;
@@ -0,0 +1,35 @@
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 { Model } from 'mongoose';
26
+ export interface ICRMProspectIndustry {
27
+ code: string;
28
+ name: string;
29
+ order: number;
30
+ }
31
+ export interface ICRMProspectIndustryWithId extends ICRMProspectIndustry {
32
+ _id: string;
33
+ }
34
+ export type CRMProspectIndustryModel = Model<ICRMProspectIndustry, object, object>;
35
+ export declare const CRMProspectIndustry: CRMProspectIndustryModel;
@@ -0,0 +1,26 @@
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.CRMProspectIndustry = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const _models_1 = require("../models/_models");
9
+ const CRMProspectIndustrySchema = new mongoose_1.default.Schema({
10
+ code: {
11
+ type: String,
12
+ required: true,
13
+ },
14
+ name: {
15
+ type: String,
16
+ required: true,
17
+ },
18
+ order: {
19
+ type: Number,
20
+ required: true,
21
+ },
22
+ }, {
23
+ timestamps: { createdAt: true, updatedAt: true },
24
+ versionKey: false,
25
+ });
26
+ exports.CRMProspectIndustry = mongoose_1.default.model(_models_1.MODEL_NAMES.CRMProspectIndustries, CRMProspectIndustrySchema);
@@ -0,0 +1,38 @@
1
+ import mongoose, { Model } from 'mongoose';
2
+
3
+ import { MODEL_NAMES } from '../models/_models';
4
+
5
+ export interface ICRMProspectIndustry {
6
+ code: string;
7
+ name: string;
8
+ order: number;
9
+ }
10
+
11
+ export interface ICRMProspectIndustryWithId extends ICRMProspectIndustry {
12
+ _id: string;
13
+ }
14
+
15
+ export type CRMProspectIndustryModel = Model<ICRMProspectIndustry, object, object>;
16
+
17
+ const CRMProspectIndustrySchema = new mongoose.Schema<ICRMProspectIndustry, CRMProspectIndustryModel>(
18
+ {
19
+ code: {
20
+ type: String,
21
+ required: true,
22
+ },
23
+ name: {
24
+ type: String,
25
+ required: true,
26
+ },
27
+ order: {
28
+ type: Number,
29
+ required: true,
30
+ },
31
+ },
32
+ {
33
+ timestamps: { createdAt: true, updatedAt: true },
34
+ versionKey: false,
35
+ },
36
+ );
37
+
38
+ export const CRMProspectIndustry = mongoose.model<ICRMProspectIndustry, CRMProspectIndustryModel>(MODEL_NAMES.CRMProspectIndustries, CRMProspectIndustrySchema);
@@ -26,6 +26,52 @@ import Joi from 'joi';
26
26
  import mongoose, { Model } from 'mongoose';
27
27
  import { ISelectedMonth } from '../helpers/date.helper';
28
28
  export declare const yieldParamsValidationSchema: Joi.ObjectSchema<IYieldParams>;
29
+ export declare enum ETotalType {
30
+ AVERAGE_BALANCE = "AVERAGE_BALANCE",
31
+ AVERAGE_LIFE_BALANCE = "AVERAGE_LIFE_BALANCE",
32
+ BROKER = "BROKER",
33
+ GROSS = "GROSS",
34
+ NET = "NET",
35
+ APR_GROSS = "APR_GROSS",
36
+ APR_LIFE_GROSS = "APR_LIFE_GROSS"
37
+ }
38
+ export declare const YIELD_TOTALS_MAP: {
39
+ AVERAGE_BALANCE: {
40
+ order: number;
41
+ title: string;
42
+ class: string;
43
+ };
44
+ AVERAGE_LIFE_BALANCE: {
45
+ order: number;
46
+ title: string;
47
+ class: string;
48
+ };
49
+ GROSS: {
50
+ order: number;
51
+ title: string;
52
+ class: string;
53
+ };
54
+ BROKER: {
55
+ order: number;
56
+ title: string;
57
+ class: string;
58
+ };
59
+ NET: {
60
+ order: number;
61
+ title: string;
62
+ class: string;
63
+ };
64
+ APR_GROSS: {
65
+ order: number;
66
+ title: string;
67
+ class: string;
68
+ };
69
+ APR_LIFE_GROSS: {
70
+ order: number;
71
+ title: string;
72
+ class: string;
73
+ };
74
+ };
29
75
  export interface IYieldParams {
30
76
  periodStart?: ISelectedMonth;
31
77
  periodEnd?: ISelectedMonth;