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.
Files changed (45) hide show
  1. package/README.md +234 -0
  2. package/dist/commands/eligible.d.ts +6 -0
  3. package/dist/commands/eligible.d.ts.map +1 -0
  4. package/dist/commands/eligible.js +115 -0
  5. package/dist/commands/eligible.js.map +1 -0
  6. package/dist/commands/limits.d.ts +6 -0
  7. package/dist/commands/limits.d.ts.map +1 -0
  8. package/dist/commands/limits.js +89 -0
  9. package/dist/commands/limits.js.map +1 -0
  10. package/dist/commands/ltv.d.ts +6 -0
  11. package/dist/commands/ltv.d.ts.map +1 -0
  12. package/dist/commands/ltv.js +96 -0
  13. package/dist/commands/ltv.js.map +1 -0
  14. package/dist/commands/payment.d.ts +6 -0
  15. package/dist/commands/payment.d.ts.map +1 -0
  16. package/dist/commands/payment.js +98 -0
  17. package/dist/commands/payment.js.map +1 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +42 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/calculations.d.ts +52 -0
  23. package/dist/lib/calculations.d.ts.map +1 -0
  24. package/dist/lib/calculations.js +270 -0
  25. package/dist/lib/calculations.js.map +1 -0
  26. package/dist/lib/eligibility.d.ts +33 -0
  27. package/dist/lib/eligibility.d.ts.map +1 -0
  28. package/dist/lib/eligibility.js +296 -0
  29. package/dist/lib/eligibility.js.map +1 -0
  30. package/dist/types.d.ts +179 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/types.js +6 -0
  33. package/dist/types.js.map +1 -0
  34. package/jest.config.js +8 -0
  35. package/package.json +46 -0
  36. package/src/commands/eligible.ts +121 -0
  37. package/src/commands/limits.ts +91 -0
  38. package/src/commands/ltv.ts +97 -0
  39. package/src/commands/payment.ts +100 -0
  40. package/src/index.ts +32 -0
  41. package/src/lib/calculations.ts +314 -0
  42. package/src/lib/eligibility.ts +343 -0
  43. package/src/types.ts +216 -0
  44. package/tests/calculations.test.ts +154 -0
  45. 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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"}
@@ -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":"AAAA;;GAEG;AAEH,yBAAyB;AACzB,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,KAAK,GACL,IAAI,GACJ,MAAM,GACN,OAAO,GACP,QAAQ,CAAC;AAEb,qBAAqB;AACrB,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,OAAO,GACP,WAAW,GACX,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,MAAM,CAAC;AAEX,sBAAsB;AACtB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,aAAa,GACb,YAAY,CAAC;AAEjB,mBAAmB;AACnB,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,gBAAgB,GAChB,eAAe,CAAC;AAEpB,wBAAwB;AACxB,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,SAAS,GACT,SAAS,GACT,UAAU,GACV,eAAe,CAAC;AAEpB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB;IAChB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,mBAAmB;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,wBAAwB;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2CAA2C;IAC3C,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,iBAAiB;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Mortgage underwriting types for mortctl
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/jest.config.js ADDED
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ testEnvironment: 'node',
4
+ testMatch: ['**/tests/**/*.test.ts'],
5
+ collectCoverageFrom: ['src/**/*.ts', '!src/index.ts'],
6
+ coverageDirectory: 'coverage',
7
+ coverageReporters: ['text', 'lcov'],
8
+ };
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
+ }