mortctl 0.1.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.
- package/README.md +234 -0
- package/dist/commands/eligible.d.ts +6 -0
- package/dist/commands/eligible.d.ts.map +1 -0
- package/dist/commands/eligible.js +115 -0
- package/dist/commands/eligible.js.map +1 -0
- package/dist/commands/limits.d.ts +6 -0
- package/dist/commands/limits.d.ts.map +1 -0
- package/dist/commands/limits.js +89 -0
- package/dist/commands/limits.js.map +1 -0
- package/dist/commands/ltv.d.ts +6 -0
- package/dist/commands/ltv.d.ts.map +1 -0
- package/dist/commands/ltv.js +96 -0
- package/dist/commands/ltv.js.map +1 -0
- package/dist/commands/payment.d.ts +6 -0
- package/dist/commands/payment.d.ts.map +1 -0
- package/dist/commands/payment.js +98 -0
- package/dist/commands/payment.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/calculations.d.ts +52 -0
- package/dist/lib/calculations.d.ts.map +1 -0
- package/dist/lib/calculations.js +270 -0
- package/dist/lib/calculations.js.map +1 -0
- package/dist/lib/eligibility.d.ts +33 -0
- package/dist/lib/eligibility.d.ts.map +1 -0
- package/dist/lib/eligibility.js +296 -0
- package/dist/lib/eligibility.js.map +1 -0
- package/dist/types.d.ts +179 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/jest.config.js +8 -0
- package/package.json +46 -0
- package/src/commands/eligible.ts +121 -0
- package/src/commands/limits.ts +91 -0
- package/src/commands/ltv.ts +97 -0
- package/src/commands/payment.ts +100 -0
- package/src/index.ts +32 -0
- package/src/lib/calculations.ts +314 -0
- package/src/lib/eligibility.ts +343 -0
- package/src/types.ts +216 -0
- package/tests/calculations.test.ts +154 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Loan program eligibility checking
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.checkConventionalEligibility = checkConventionalEligibility;
|
|
7
|
+
exports.checkFhaEligibility = checkFhaEligibility;
|
|
8
|
+
exports.checkVaEligibility = checkVaEligibility;
|
|
9
|
+
exports.checkUsdaEligibility = checkUsdaEligibility;
|
|
10
|
+
exports.checkJumboEligibility = checkJumboEligibility;
|
|
11
|
+
exports.checkAllEligibility = checkAllEligibility;
|
|
12
|
+
exports.findBestProgram = findBestProgram;
|
|
13
|
+
const calculations_1 = require("./calculations");
|
|
14
|
+
/**
|
|
15
|
+
* Check conventional loan eligibility
|
|
16
|
+
*/
|
|
17
|
+
function checkConventionalEligibility(scenario) {
|
|
18
|
+
const reasons = [];
|
|
19
|
+
const warnings = [];
|
|
20
|
+
let eligible = true;
|
|
21
|
+
const ltv = (scenario.loanAmount / scenario.propertyValue) * 100;
|
|
22
|
+
const conformingLimit = (0, calculations_1.getConformingLimit)(scenario.county ? `${scenario.county}, ${scenario.state}` : undefined, scenario.units || 1);
|
|
23
|
+
// Credit score check
|
|
24
|
+
if (scenario.creditScore < 620) {
|
|
25
|
+
eligible = false;
|
|
26
|
+
reasons.push('Credit score below 620 minimum');
|
|
27
|
+
}
|
|
28
|
+
else if (scenario.creditScore < 680) {
|
|
29
|
+
warnings.push('Credit score below 680 may result in pricing adjustments');
|
|
30
|
+
}
|
|
31
|
+
// LTV check
|
|
32
|
+
if (ltv > 97) {
|
|
33
|
+
eligible = false;
|
|
34
|
+
reasons.push('LTV exceeds 97% maximum');
|
|
35
|
+
}
|
|
36
|
+
else if (ltv > 95) {
|
|
37
|
+
warnings.push('LTV >95% requires additional eligibility criteria');
|
|
38
|
+
}
|
|
39
|
+
// Loan amount check (conforming vs jumbo)
|
|
40
|
+
if (scenario.loanAmount > conformingLimit) {
|
|
41
|
+
warnings.push(`Loan exceeds conforming limit ($${conformingLimit.toLocaleString()}), jumbo pricing applies`);
|
|
42
|
+
}
|
|
43
|
+
// Occupancy check for high LTV
|
|
44
|
+
if (ltv > 90 && scenario.occupancy !== 'primary') {
|
|
45
|
+
eligible = false;
|
|
46
|
+
reasons.push('LTV >90% only available for primary residence');
|
|
47
|
+
}
|
|
48
|
+
// Investment property restrictions
|
|
49
|
+
if (scenario.occupancy === 'investment') {
|
|
50
|
+
if (ltv > 85) {
|
|
51
|
+
eligible = false;
|
|
52
|
+
reasons.push('Investment property maximum LTV is 85%');
|
|
53
|
+
}
|
|
54
|
+
if (scenario.creditScore < 680) {
|
|
55
|
+
eligible = false;
|
|
56
|
+
reasons.push('Investment property requires 680+ credit score');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Property type restrictions
|
|
60
|
+
if (scenario.propertyType === 'manufactured' && ltv > 95) {
|
|
61
|
+
eligible = false;
|
|
62
|
+
reasons.push('Manufactured homes limited to 95% LTV');
|
|
63
|
+
}
|
|
64
|
+
// Calculate min down payment
|
|
65
|
+
let minDownPct = scenario.occupancy === 'investment' ? 15 : 3;
|
|
66
|
+
if (scenario.occupancy === 'second-home')
|
|
67
|
+
minDownPct = 10;
|
|
68
|
+
const minDownPayment = scenario.propertyValue * (minDownPct / 100);
|
|
69
|
+
return {
|
|
70
|
+
program: 'conventional',
|
|
71
|
+
eligible,
|
|
72
|
+
reasons: reasons.length > 0 ? reasons : undefined,
|
|
73
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
74
|
+
maxLoanAmount: conformingLimit,
|
|
75
|
+
minDownPayment,
|
|
76
|
+
rateAdjustment: scenario.creditScore < 740 ? 0.25 : 0,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check FHA loan eligibility
|
|
81
|
+
*/
|
|
82
|
+
function checkFhaEligibility(scenario) {
|
|
83
|
+
const reasons = [];
|
|
84
|
+
const warnings = [];
|
|
85
|
+
let eligible = true;
|
|
86
|
+
const ltv = (scenario.loanAmount / scenario.propertyValue) * 100;
|
|
87
|
+
const fhaLimit = calculations_1.LOAN_LIMITS_2026.fhaCeiling; // Would be county-specific in production
|
|
88
|
+
// Credit score check
|
|
89
|
+
if (scenario.creditScore < 500) {
|
|
90
|
+
eligible = false;
|
|
91
|
+
reasons.push('Credit score below 500 minimum');
|
|
92
|
+
}
|
|
93
|
+
else if (scenario.creditScore < 580) {
|
|
94
|
+
if (ltv > 90) {
|
|
95
|
+
eligible = false;
|
|
96
|
+
reasons.push('Credit score 500-579 requires 10% down payment (90% LTV max)');
|
|
97
|
+
}
|
|
98
|
+
warnings.push('Credit score 500-579 requires manual underwriting');
|
|
99
|
+
}
|
|
100
|
+
// LTV check
|
|
101
|
+
if (scenario.creditScore >= 580 && ltv > 96.5) {
|
|
102
|
+
eligible = false;
|
|
103
|
+
reasons.push('FHA maximum LTV is 96.5%');
|
|
104
|
+
}
|
|
105
|
+
// Occupancy - FHA is owner-occupied only
|
|
106
|
+
if (scenario.occupancy !== 'primary') {
|
|
107
|
+
eligible = false;
|
|
108
|
+
reasons.push('FHA loans require owner occupancy');
|
|
109
|
+
}
|
|
110
|
+
// Loan amount check
|
|
111
|
+
if (scenario.loanAmount > fhaLimit) {
|
|
112
|
+
eligible = false;
|
|
113
|
+
reasons.push(`Loan exceeds FHA limit ($${fhaLimit.toLocaleString()})`);
|
|
114
|
+
}
|
|
115
|
+
// Property type restrictions
|
|
116
|
+
if (scenario.propertyType === 'coop') {
|
|
117
|
+
warnings.push('Co-ops require FHA approval');
|
|
118
|
+
}
|
|
119
|
+
// Calculate min down payment
|
|
120
|
+
const minDownPct = scenario.creditScore >= 580 ? 3.5 : 10;
|
|
121
|
+
const minDownPayment = scenario.propertyValue * (minDownPct / 100);
|
|
122
|
+
return {
|
|
123
|
+
program: 'fha',
|
|
124
|
+
eligible,
|
|
125
|
+
reasons: reasons.length > 0 ? reasons : undefined,
|
|
126
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
127
|
+
maxLoanAmount: fhaLimit,
|
|
128
|
+
minDownPayment,
|
|
129
|
+
rateAdjustment: 0, // FHA rates are generally competitive
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check VA loan eligibility
|
|
134
|
+
*/
|
|
135
|
+
function checkVaEligibility(scenario) {
|
|
136
|
+
const reasons = [];
|
|
137
|
+
const warnings = [];
|
|
138
|
+
let eligible = true;
|
|
139
|
+
const ltv = (scenario.loanAmount / scenario.propertyValue) * 100;
|
|
140
|
+
// Veteran status required
|
|
141
|
+
if (!scenario.veteran) {
|
|
142
|
+
eligible = false;
|
|
143
|
+
reasons.push('VA loans require veteran/military eligibility');
|
|
144
|
+
}
|
|
145
|
+
// Credit score - VA has no official minimum but lenders typically require 580-620
|
|
146
|
+
if (scenario.creditScore < 580) {
|
|
147
|
+
warnings.push('Most VA lenders require 580+ credit score');
|
|
148
|
+
}
|
|
149
|
+
// LTV - VA allows 100% financing
|
|
150
|
+
if (ltv > 100) {
|
|
151
|
+
eligible = false;
|
|
152
|
+
reasons.push('VA maximum LTV is 100%');
|
|
153
|
+
}
|
|
154
|
+
// Occupancy - VA is owner-occupied only
|
|
155
|
+
if (scenario.occupancy !== 'primary') {
|
|
156
|
+
eligible = false;
|
|
157
|
+
reasons.push('VA loans require owner occupancy');
|
|
158
|
+
}
|
|
159
|
+
// No loan limit for full entitlement (post-2020)
|
|
160
|
+
// But there are limits for partial entitlement
|
|
161
|
+
// Property type restrictions
|
|
162
|
+
if (scenario.propertyType === 'coop') {
|
|
163
|
+
eligible = false;
|
|
164
|
+
reasons.push('VA does not allow co-op properties');
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
program: 'va',
|
|
168
|
+
eligible,
|
|
169
|
+
reasons: reasons.length > 0 ? reasons : undefined,
|
|
170
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
171
|
+
minDownPayment: 0, // VA allows 0% down
|
|
172
|
+
rateAdjustment: -0.25, // VA rates typically lower
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check USDA loan eligibility
|
|
177
|
+
*/
|
|
178
|
+
function checkUsdaEligibility(scenario) {
|
|
179
|
+
const reasons = [];
|
|
180
|
+
const warnings = [];
|
|
181
|
+
let eligible = true;
|
|
182
|
+
const ltv = (scenario.loanAmount / scenario.propertyValue) * 100;
|
|
183
|
+
// Rural location required
|
|
184
|
+
if (!scenario.rural) {
|
|
185
|
+
eligible = false;
|
|
186
|
+
reasons.push('USDA loans require rural/eligible suburban location');
|
|
187
|
+
}
|
|
188
|
+
// Credit score
|
|
189
|
+
if (scenario.creditScore < 640) {
|
|
190
|
+
warnings.push('Credit score below 640 requires manual underwriting');
|
|
191
|
+
}
|
|
192
|
+
// LTV - USDA allows 100% financing
|
|
193
|
+
if (ltv > 100) {
|
|
194
|
+
eligible = false;
|
|
195
|
+
reasons.push('USDA maximum LTV is 100%');
|
|
196
|
+
}
|
|
197
|
+
// Occupancy - owner-occupied only
|
|
198
|
+
if (scenario.occupancy !== 'primary') {
|
|
199
|
+
eligible = false;
|
|
200
|
+
reasons.push('USDA loans require owner occupancy');
|
|
201
|
+
}
|
|
202
|
+
// Property type - single family only
|
|
203
|
+
if (scenario.units && scenario.units > 1) {
|
|
204
|
+
eligible = false;
|
|
205
|
+
reasons.push('USDA loans are for single-family homes only');
|
|
206
|
+
}
|
|
207
|
+
// Income limits would apply (not modeled here)
|
|
208
|
+
warnings.push('USDA has household income limits - verify eligibility');
|
|
209
|
+
return {
|
|
210
|
+
program: 'usda',
|
|
211
|
+
eligible,
|
|
212
|
+
reasons: reasons.length > 0 ? reasons : undefined,
|
|
213
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
214
|
+
minDownPayment: 0,
|
|
215
|
+
rateAdjustment: 0,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check jumbo loan eligibility
|
|
220
|
+
*/
|
|
221
|
+
function checkJumboEligibility(scenario) {
|
|
222
|
+
const reasons = [];
|
|
223
|
+
const warnings = [];
|
|
224
|
+
let eligible = true;
|
|
225
|
+
const ltv = (scenario.loanAmount / scenario.propertyValue) * 100;
|
|
226
|
+
const conformingLimit = (0, calculations_1.getConformingLimit)(scenario.county ? `${scenario.county}, ${scenario.state}` : undefined, scenario.units || 1);
|
|
227
|
+
// Check if actually jumbo
|
|
228
|
+
if (scenario.loanAmount <= conformingLimit) {
|
|
229
|
+
eligible = false;
|
|
230
|
+
reasons.push('Loan amount is within conforming limits - use conventional');
|
|
231
|
+
}
|
|
232
|
+
// Credit score - jumbo typically requires higher scores
|
|
233
|
+
if (scenario.creditScore < 700) {
|
|
234
|
+
eligible = false;
|
|
235
|
+
reasons.push('Jumbo loans typically require 700+ credit score');
|
|
236
|
+
}
|
|
237
|
+
else if (scenario.creditScore < 720) {
|
|
238
|
+
warnings.push('Credit score below 720 may limit options');
|
|
239
|
+
}
|
|
240
|
+
// LTV - jumbo typically more restrictive
|
|
241
|
+
const maxLtv = scenario.occupancy === 'primary' ? 90 : 80;
|
|
242
|
+
if (ltv > maxLtv) {
|
|
243
|
+
eligible = false;
|
|
244
|
+
reasons.push(`Jumbo maximum LTV is ${maxLtv}% for ${scenario.occupancy}`);
|
|
245
|
+
}
|
|
246
|
+
// Reserves typically required
|
|
247
|
+
warnings.push('Jumbo loans typically require 6-12 months reserves');
|
|
248
|
+
// Min down payment
|
|
249
|
+
const minDownPct = scenario.occupancy === 'primary' ? 10 : 20;
|
|
250
|
+
const minDownPayment = scenario.propertyValue * (minDownPct / 100);
|
|
251
|
+
return {
|
|
252
|
+
program: 'jumbo',
|
|
253
|
+
eligible,
|
|
254
|
+
reasons: reasons.length > 0 ? reasons : undefined,
|
|
255
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
256
|
+
minDownPayment,
|
|
257
|
+
rateAdjustment: 0.25, // Jumbo typically slightly higher
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Check all program eligibility
|
|
262
|
+
*/
|
|
263
|
+
function checkAllEligibility(scenario) {
|
|
264
|
+
return [
|
|
265
|
+
checkConventionalEligibility(scenario),
|
|
266
|
+
checkFhaEligibility(scenario),
|
|
267
|
+
checkVaEligibility(scenario),
|
|
268
|
+
checkUsdaEligibility(scenario),
|
|
269
|
+
checkJumboEligibility(scenario),
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Find best recommended program
|
|
274
|
+
*/
|
|
275
|
+
function findBestProgram(eligibility) {
|
|
276
|
+
const eligible = eligibility.filter(e => e.eligible);
|
|
277
|
+
if (eligible.length === 0)
|
|
278
|
+
return undefined;
|
|
279
|
+
// Priority order: VA (if eligible), then lowest down payment, then best rate
|
|
280
|
+
const va = eligible.find(e => e.program === 'va');
|
|
281
|
+
if (va)
|
|
282
|
+
return 'va';
|
|
283
|
+
const usda = eligible.find(e => e.program === 'usda');
|
|
284
|
+
if (usda)
|
|
285
|
+
return 'usda';
|
|
286
|
+
// Sort by min down payment, then rate adjustment
|
|
287
|
+
eligible.sort((a, b) => {
|
|
288
|
+
const downA = a.minDownPayment || 0;
|
|
289
|
+
const downB = b.minDownPayment || 0;
|
|
290
|
+
if (downA !== downB)
|
|
291
|
+
return downA - downB;
|
|
292
|
+
return (a.rateAdjustment || 0) - (b.rateAdjustment || 0);
|
|
293
|
+
});
|
|
294
|
+
return eligible[0].program;
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../src/lib/eligibility.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mortgage underwriting types for mortctl
|
|
3
|
+
*/
|
|
4
|
+
/** Loan program types */
|
|
5
|
+
export type LoanProgram = 'conventional' | 'fha' | 'va' | 'usda' | 'jumbo' | 'non-qm';
|
|
6
|
+
/** Property types */
|
|
7
|
+
export type PropertyType = 'single-family' | 'condo' | 'townhouse' | 'multi-family-2' | 'multi-family-3' | 'multi-family-4' | 'manufactured' | 'coop';
|
|
8
|
+
/** Occupancy types */
|
|
9
|
+
export type OccupancyType = 'primary' | 'second-home' | 'investment';
|
|
10
|
+
/** Loan purpose */
|
|
11
|
+
export type LoanPurpose = 'purchase' | 'rate-term-refi' | 'cash-out-refi';
|
|
12
|
+
/** Amortization type */
|
|
13
|
+
export type AmortizationType = 'fixed' | 'arm-5-1' | 'arm-7-1' | 'arm-10-1' | 'interest-only';
|
|
14
|
+
/**
|
|
15
|
+
* Conforming loan limits by year and area
|
|
16
|
+
* 2026 limits (estimated based on trends)
|
|
17
|
+
*/
|
|
18
|
+
export interface LoanLimits {
|
|
19
|
+
/** Standard conforming limit (baseline counties) */
|
|
20
|
+
baseline: number;
|
|
21
|
+
/** High-cost area ceiling */
|
|
22
|
+
highCost: number;
|
|
23
|
+
/** FHA floor */
|
|
24
|
+
fhaFloor: number;
|
|
25
|
+
/** FHA ceiling */
|
|
26
|
+
fhaCeiling: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* LTV calculation result
|
|
30
|
+
*/
|
|
31
|
+
export interface LtvResult {
|
|
32
|
+
/** Loan-to-value ratio (primary mortgage only) */
|
|
33
|
+
ltv: number;
|
|
34
|
+
/** Combined loan-to-value (includes second liens) */
|
|
35
|
+
cltv: number;
|
|
36
|
+
/** Home equity combined LTV (includes HELOCs) */
|
|
37
|
+
hcltv: number;
|
|
38
|
+
/** Whether PMI is required */
|
|
39
|
+
pmiRequired: boolean;
|
|
40
|
+
/** Estimated PMI amount (monthly) */
|
|
41
|
+
estimatedPmi?: number;
|
|
42
|
+
/** When PMI can be removed (at what LTV) */
|
|
43
|
+
pmiRemovalLtv?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* PMI calculation inputs
|
|
47
|
+
*/
|
|
48
|
+
export interface PmiInputs {
|
|
49
|
+
/** LTV percentage */
|
|
50
|
+
ltv: number;
|
|
51
|
+
/** Credit score */
|
|
52
|
+
creditScore: number;
|
|
53
|
+
/** Loan amount */
|
|
54
|
+
loanAmount: number;
|
|
55
|
+
/** Loan term in years */
|
|
56
|
+
termYears?: number;
|
|
57
|
+
/** Property type */
|
|
58
|
+
propertyType?: PropertyType;
|
|
59
|
+
/** Occupancy */
|
|
60
|
+
occupancy?: OccupancyType;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* PMI calculation result
|
|
64
|
+
*/
|
|
65
|
+
export interface PmiResult {
|
|
66
|
+
/** Whether PMI is required */
|
|
67
|
+
required: boolean;
|
|
68
|
+
/** Monthly PMI amount */
|
|
69
|
+
monthlyAmount: number;
|
|
70
|
+
/** Annual PMI amount */
|
|
71
|
+
annualAmount: number;
|
|
72
|
+
/** PMI rate (percentage of loan) */
|
|
73
|
+
ratePercent: number;
|
|
74
|
+
/** LTV at which PMI can be cancelled */
|
|
75
|
+
cancellationLtv: number;
|
|
76
|
+
/** Estimated months until cancellation (based on normal amortization) */
|
|
77
|
+
monthsToCancel?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Loan eligibility result
|
|
81
|
+
*/
|
|
82
|
+
export interface EligibilityResult {
|
|
83
|
+
/** Program name */
|
|
84
|
+
program: LoanProgram;
|
|
85
|
+
/** Whether eligible */
|
|
86
|
+
eligible: boolean;
|
|
87
|
+
/** Reasons if not eligible */
|
|
88
|
+
reasons?: string[];
|
|
89
|
+
/** Warnings/conditions */
|
|
90
|
+
warnings?: string[];
|
|
91
|
+
/** Maximum loan amount for this program */
|
|
92
|
+
maxLoanAmount?: number;
|
|
93
|
+
/** Minimum down payment required */
|
|
94
|
+
minDownPayment?: number;
|
|
95
|
+
/** Estimated rate adjustment vs baseline */
|
|
96
|
+
rateAdjustment?: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Complete loan scenario
|
|
100
|
+
*/
|
|
101
|
+
export interface LoanScenario {
|
|
102
|
+
/** Purchase price or appraised value */
|
|
103
|
+
propertyValue: number;
|
|
104
|
+
/** Down payment amount */
|
|
105
|
+
downPayment: number;
|
|
106
|
+
/** Base loan amount */
|
|
107
|
+
loanAmount: number;
|
|
108
|
+
/** Second lien amount (if any) */
|
|
109
|
+
secondLien?: number;
|
|
110
|
+
/** HELOC amount (if any) */
|
|
111
|
+
heloc?: number;
|
|
112
|
+
/** Interest rate */
|
|
113
|
+
interestRate: number;
|
|
114
|
+
/** Loan term in years */
|
|
115
|
+
termYears: number;
|
|
116
|
+
/** Credit score */
|
|
117
|
+
creditScore: number;
|
|
118
|
+
/** Property type */
|
|
119
|
+
propertyType: PropertyType;
|
|
120
|
+
/** Occupancy */
|
|
121
|
+
occupancy: OccupancyType;
|
|
122
|
+
/** Loan purpose */
|
|
123
|
+
purpose: LoanPurpose;
|
|
124
|
+
/** Number of units (for multi-family) */
|
|
125
|
+
units?: number;
|
|
126
|
+
/** County for loan limits */
|
|
127
|
+
county?: string;
|
|
128
|
+
/** State */
|
|
129
|
+
state?: string;
|
|
130
|
+
/** First-time homebuyer */
|
|
131
|
+
firstTimeHomebuyer?: boolean;
|
|
132
|
+
/** Veteran status (for VA) */
|
|
133
|
+
veteran?: boolean;
|
|
134
|
+
/** Rural location (for USDA) */
|
|
135
|
+
rural?: boolean;
|
|
136
|
+
/** Annual property taxes */
|
|
137
|
+
propertyTaxes?: number;
|
|
138
|
+
/** Annual homeowners insurance */
|
|
139
|
+
homeownersInsurance?: number;
|
|
140
|
+
/** Monthly HOA */
|
|
141
|
+
hoaDues?: number;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Monthly payment breakdown
|
|
145
|
+
*/
|
|
146
|
+
export interface PaymentBreakdown {
|
|
147
|
+
/** Principal and interest */
|
|
148
|
+
principalAndInterest: number;
|
|
149
|
+
/** Property taxes (monthly) */
|
|
150
|
+
propertyTaxes: number;
|
|
151
|
+
/** Homeowners insurance (monthly) */
|
|
152
|
+
homeownersInsurance: number;
|
|
153
|
+
/** PMI/MIP (if applicable) */
|
|
154
|
+
mortgageInsurance: number;
|
|
155
|
+
/** HOA dues */
|
|
156
|
+
hoaDues: number;
|
|
157
|
+
/** Total PITI + HOA */
|
|
158
|
+
totalPayment: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Full underwriting analysis
|
|
162
|
+
*/
|
|
163
|
+
export interface UnderwritingAnalysis {
|
|
164
|
+
/** Loan scenario */
|
|
165
|
+
scenario: LoanScenario;
|
|
166
|
+
/** LTV analysis */
|
|
167
|
+
ltv: LtvResult;
|
|
168
|
+
/** Payment breakdown */
|
|
169
|
+
payment: PaymentBreakdown;
|
|
170
|
+
/** Program eligibility for each program */
|
|
171
|
+
eligibility: EligibilityResult[];
|
|
172
|
+
/** Best recommended program */
|
|
173
|
+
recommendedProgram?: LoanProgram;
|
|
174
|
+
/** Risk flags */
|
|
175
|
+
riskFlags: string[];
|
|
176
|
+
/** Recommendations */
|
|
177
|
+
recommendations: string[];
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/jest.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mortctl",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Mortgage underwriting calculations and eligibility - part of the LendCtl Suite",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mortctl": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "jest",
|
|
13
|
+
"test:watch": "jest --watch",
|
|
14
|
+
"prepublishOnly": "npm run build && npm test"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mortgage",
|
|
18
|
+
"lending",
|
|
19
|
+
"underwriting",
|
|
20
|
+
"ltv",
|
|
21
|
+
"pmi",
|
|
22
|
+
"loan",
|
|
23
|
+
"cli",
|
|
24
|
+
"mcp"
|
|
25
|
+
],
|
|
26
|
+
"author": "Avatar Consulting",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/rsatyan/mortctl"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"commander": "^12.0.0",
|
|
34
|
+
"chalk": "^5.3.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/jest": "^29.5.0",
|
|
38
|
+
"@types/node": "^20.0.0",
|
|
39
|
+
"jest": "^29.7.0",
|
|
40
|
+
"ts-jest": "^29.1.0",
|
|
41
|
+
"typescript": "^5.3.0"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|