@ottoai/documents 1.4.3 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/create/pdf/united-states/form-2553/form.dto.d.ts +61 -0
- package/dist/create/pdf/united-states/form-2553/form.dto.js +275 -0
- package/dist/create/pdf/united-states/form-2553/form.dto.js.map +1 -0
- package/dist/create/pdf/united-states/form-2553/index.d.ts +18 -0
- package/dist/create/pdf/united-states/form-2553/index.js +258 -0
- package/dist/create/pdf/united-states/form-2553/index.js.map +1 -0
- package/dist/create/pdf/united-states/form-2553/schema.json +1169 -0
- package/dist/create/pdf/united-states/form-2553/template.pdf +0 -0
- package/dist/create/pdf/united-states/index.d.ts +5 -2
- package/dist/create/pdf/united-states/index.js +7 -1
- package/dist/create/pdf/united-states/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare class AddressDto {
|
|
2
|
+
address_line_1: string;
|
|
3
|
+
address_line_2?: string;
|
|
4
|
+
city: string;
|
|
5
|
+
state: string;
|
|
6
|
+
postal_code: string;
|
|
7
|
+
country?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare enum TaxYearType {
|
|
10
|
+
CALENDAR_YEAR = "calendar",
|
|
11
|
+
FISCAL_YEAR = "fiscal",
|
|
12
|
+
WEEK_52_53_DECEMBER = "52-53-december",
|
|
13
|
+
WEEK_52_53_OTHER = "52-53-other"
|
|
14
|
+
}
|
|
15
|
+
export declare class ShareholderDto {
|
|
16
|
+
name: string;
|
|
17
|
+
address: AddressDto;
|
|
18
|
+
numberOfShares?: number;
|
|
19
|
+
percentageOwnership: number;
|
|
20
|
+
dateAcquired: string;
|
|
21
|
+
taxIdNumber: string;
|
|
22
|
+
taxYearEnd: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class Form2553DataDto {
|
|
25
|
+
corporationName: string;
|
|
26
|
+
corporationAddress: AddressDto;
|
|
27
|
+
employerIdNumber: string;
|
|
28
|
+
dateIncorporated: string;
|
|
29
|
+
stateOfIncorporation: string;
|
|
30
|
+
changedName?: boolean;
|
|
31
|
+
changedAddress?: boolean;
|
|
32
|
+
electionEffectiveDate: string;
|
|
33
|
+
selectedTaxYear: TaxYearType;
|
|
34
|
+
fiscalYearEndDate?: string;
|
|
35
|
+
weekEndingMonth?: string;
|
|
36
|
+
moreThan100ShareholdersFamilyTreated?: boolean;
|
|
37
|
+
officerName: string;
|
|
38
|
+
officerTitle: string;
|
|
39
|
+
officerPhoneNumber: string;
|
|
40
|
+
isLateElection?: boolean;
|
|
41
|
+
shareholders: ShareholderDto[];
|
|
42
|
+
formFilingDate?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare class Form2553ValidationDto {
|
|
45
|
+
static validateFilingDeadline(incorporationDate: string, filingDate: string): boolean;
|
|
46
|
+
static validateShareholderOwnership(shareholders: ShareholderDto[]): boolean;
|
|
47
|
+
static validateEIN(ein: string): boolean;
|
|
48
|
+
static validateMaxShareholdersForPDF(shareholders: ShareholderDto[]): {
|
|
49
|
+
isValid: boolean;
|
|
50
|
+
message?: string;
|
|
51
|
+
};
|
|
52
|
+
static validateLateElection(incorporationDate: string, electionEffectiveDate: string, filingDate?: string): {
|
|
53
|
+
isLate: boolean;
|
|
54
|
+
daysSinceIncorporation?: number;
|
|
55
|
+
daysSinceElectionDate?: number;
|
|
56
|
+
};
|
|
57
|
+
static validateSCorpEligibility(data: Form2553DataDto): {
|
|
58
|
+
isEligible: boolean;
|
|
59
|
+
issues: string[];
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Form2553ValidationDto = exports.Form2553DataDto = exports.ShareholderDto = exports.TaxYearType = exports.AddressDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class AddressDto {
|
|
15
|
+
}
|
|
16
|
+
exports.AddressDto = AddressDto;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsString)(),
|
|
19
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
20
|
+
(0, class_validator_1.Length)(1, 100),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], AddressDto.prototype, "address_line_1", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsOptional)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.Length)(1, 100),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], AddressDto.prototype, "address_line_2", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_validator_1.IsString)(),
|
|
31
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
32
|
+
(0, class_validator_1.Length)(1, 50),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], AddressDto.prototype, "city", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
(0, class_validator_1.Length)(2, 50),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], AddressDto.prototype, "state", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
44
|
+
(0, class_validator_1.Matches)(/^\d{5}(-\d{4})?$/, { message: "Invalid ZIP code format" }),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], AddressDto.prototype, "postal_code", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_validator_1.IsOptional)(),
|
|
49
|
+
(0, class_validator_1.IsString)(),
|
|
50
|
+
(0, class_validator_1.Length)(2, 50),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], AddressDto.prototype, "country", void 0);
|
|
53
|
+
var TaxYearType;
|
|
54
|
+
(function (TaxYearType) {
|
|
55
|
+
TaxYearType["CALENDAR_YEAR"] = "calendar";
|
|
56
|
+
TaxYearType["FISCAL_YEAR"] = "fiscal";
|
|
57
|
+
TaxYearType["WEEK_52_53_DECEMBER"] = "52-53-december";
|
|
58
|
+
TaxYearType["WEEK_52_53_OTHER"] = "52-53-other";
|
|
59
|
+
})(TaxYearType || (exports.TaxYearType = TaxYearType = {}));
|
|
60
|
+
class ShareholderDto {
|
|
61
|
+
}
|
|
62
|
+
exports.ShareholderDto = ShareholderDto;
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, class_validator_1.IsString)(),
|
|
65
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
66
|
+
(0, class_validator_1.Length)(1, 100),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], ShareholderDto.prototype, "name", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, class_validator_1.IsObject)(),
|
|
71
|
+
(0, class_validator_1.ValidateNested)(),
|
|
72
|
+
__metadata("design:type", AddressDto)
|
|
73
|
+
], ShareholderDto.prototype, "address", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, class_validator_1.IsOptional)(),
|
|
76
|
+
(0, class_validator_1.IsNumber)(),
|
|
77
|
+
(0, class_validator_1.Min)(0),
|
|
78
|
+
__metadata("design:type", Number)
|
|
79
|
+
], ShareholderDto.prototype, "numberOfShares", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, class_validator_1.IsNumber)(),
|
|
82
|
+
(0, class_validator_1.Min)(0),
|
|
83
|
+
(0, class_validator_1.Max)(100),
|
|
84
|
+
__metadata("design:type", Number)
|
|
85
|
+
], ShareholderDto.prototype, "percentageOwnership", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
(0, class_validator_1.IsDateString)(),
|
|
88
|
+
__metadata("design:type", String)
|
|
89
|
+
], ShareholderDto.prototype, "dateAcquired", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
(0, class_validator_1.IsString)(),
|
|
92
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
93
|
+
(0, class_validator_1.Matches)(/^\d{3}-\d{2}-\d{4}$|^\d{2}-\d{7}$/, {
|
|
94
|
+
message: "Must be valid SSN (XXX-XX-XXXX) or EIN (XX-XXXXXXX) format",
|
|
95
|
+
}),
|
|
96
|
+
__metadata("design:type", String)
|
|
97
|
+
], ShareholderDto.prototype, "taxIdNumber", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, class_validator_1.IsString)(),
|
|
100
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
101
|
+
(0, class_validator_1.Matches)(/^(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/, {
|
|
102
|
+
message: "Tax year end date must be in MM/DD format",
|
|
103
|
+
}),
|
|
104
|
+
__metadata("design:type", String)
|
|
105
|
+
], ShareholderDto.prototype, "taxYearEnd", void 0);
|
|
106
|
+
class Form2553DataDto {
|
|
107
|
+
}
|
|
108
|
+
exports.Form2553DataDto = Form2553DataDto;
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, class_validator_1.IsString)(),
|
|
111
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
112
|
+
(0, class_validator_1.Length)(1, 150),
|
|
113
|
+
__metadata("design:type", String)
|
|
114
|
+
], Form2553DataDto.prototype, "corporationName", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
(0, class_validator_1.IsObject)(),
|
|
117
|
+
(0, class_validator_1.ValidateNested)(),
|
|
118
|
+
__metadata("design:type", AddressDto)
|
|
119
|
+
], Form2553DataDto.prototype, "corporationAddress", void 0);
|
|
120
|
+
__decorate([
|
|
121
|
+
(0, class_validator_1.IsString)(),
|
|
122
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
123
|
+
(0, class_validator_1.Matches)(/^\d{2}-\d{7}$|^Applied for$/, {
|
|
124
|
+
message: 'Must be valid EIN format (XX-XXXXXXX) or "Applied for"',
|
|
125
|
+
}),
|
|
126
|
+
__metadata("design:type", String)
|
|
127
|
+
], Form2553DataDto.prototype, "employerIdNumber", void 0);
|
|
128
|
+
__decorate([
|
|
129
|
+
(0, class_validator_1.IsDateString)(),
|
|
130
|
+
__metadata("design:type", String)
|
|
131
|
+
], Form2553DataDto.prototype, "dateIncorporated", void 0);
|
|
132
|
+
__decorate([
|
|
133
|
+
(0, class_validator_1.IsString)(),
|
|
134
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
135
|
+
(0, class_validator_1.Length)(2, 50),
|
|
136
|
+
__metadata("design:type", String)
|
|
137
|
+
], Form2553DataDto.prototype, "stateOfIncorporation", void 0);
|
|
138
|
+
__decorate([
|
|
139
|
+
(0, class_validator_1.IsOptional)(),
|
|
140
|
+
(0, class_validator_1.IsBoolean)(),
|
|
141
|
+
__metadata("design:type", Boolean)
|
|
142
|
+
], Form2553DataDto.prototype, "changedName", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
(0, class_validator_1.IsOptional)(),
|
|
145
|
+
(0, class_validator_1.IsBoolean)(),
|
|
146
|
+
__metadata("design:type", Boolean)
|
|
147
|
+
], Form2553DataDto.prototype, "changedAddress", void 0);
|
|
148
|
+
__decorate([
|
|
149
|
+
(0, class_validator_1.IsDateString)(),
|
|
150
|
+
__metadata("design:type", String)
|
|
151
|
+
], Form2553DataDto.prototype, "electionEffectiveDate", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
(0, class_validator_1.IsEnum)(TaxYearType),
|
|
154
|
+
__metadata("design:type", String)
|
|
155
|
+
], Form2553DataDto.prototype, "selectedTaxYear", void 0);
|
|
156
|
+
__decorate([
|
|
157
|
+
(0, class_validator_1.IsOptional)(),
|
|
158
|
+
(0, class_validator_1.IsString)(),
|
|
159
|
+
(0, class_validator_1.Matches)(/^(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/),
|
|
160
|
+
__metadata("design:type", String)
|
|
161
|
+
], Form2553DataDto.prototype, "fiscalYearEndDate", void 0);
|
|
162
|
+
__decorate([
|
|
163
|
+
(0, class_validator_1.IsOptional)(),
|
|
164
|
+
(0, class_validator_1.IsString)(),
|
|
165
|
+
__metadata("design:type", String)
|
|
166
|
+
], Form2553DataDto.prototype, "weekEndingMonth", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
(0, class_validator_1.IsOptional)(),
|
|
169
|
+
(0, class_validator_1.IsBoolean)(),
|
|
170
|
+
__metadata("design:type", Boolean)
|
|
171
|
+
], Form2553DataDto.prototype, "moreThan100ShareholdersFamilyTreated", void 0);
|
|
172
|
+
__decorate([
|
|
173
|
+
(0, class_validator_1.IsString)(),
|
|
174
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
175
|
+
(0, class_validator_1.Length)(1, 100),
|
|
176
|
+
__metadata("design:type", String)
|
|
177
|
+
], Form2553DataDto.prototype, "officerName", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
(0, class_validator_1.IsString)(),
|
|
180
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
181
|
+
(0, class_validator_1.Length)(1, 50),
|
|
182
|
+
__metadata("design:type", String)
|
|
183
|
+
], Form2553DataDto.prototype, "officerTitle", void 0);
|
|
184
|
+
__decorate([
|
|
185
|
+
(0, class_validator_1.IsString)(),
|
|
186
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
187
|
+
(0, class_validator_1.IsPhoneNumber)("US"),
|
|
188
|
+
__metadata("design:type", String)
|
|
189
|
+
], Form2553DataDto.prototype, "officerPhoneNumber", void 0);
|
|
190
|
+
__decorate([
|
|
191
|
+
(0, class_validator_1.IsOptional)(),
|
|
192
|
+
(0, class_validator_1.IsBoolean)(),
|
|
193
|
+
__metadata("design:type", Boolean)
|
|
194
|
+
], Form2553DataDto.prototype, "isLateElection", void 0);
|
|
195
|
+
__decorate([
|
|
196
|
+
(0, class_validator_1.IsArray)(),
|
|
197
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
198
|
+
__metadata("design:type", Array)
|
|
199
|
+
], Form2553DataDto.prototype, "shareholders", void 0);
|
|
200
|
+
__decorate([
|
|
201
|
+
(0, class_validator_1.IsOptional)(),
|
|
202
|
+
(0, class_validator_1.IsDateString)(),
|
|
203
|
+
__metadata("design:type", String)
|
|
204
|
+
], Form2553DataDto.prototype, "formFilingDate", void 0);
|
|
205
|
+
class Form2553ValidationDto {
|
|
206
|
+
static validateFilingDeadline(incorporationDate, filingDate) {
|
|
207
|
+
const incorporation = new Date(incorporationDate);
|
|
208
|
+
const filing = new Date(filingDate);
|
|
209
|
+
const daysDifference = Math.floor((filing.getTime() - incorporation.getTime()) / (1000 * 60 * 60 * 24));
|
|
210
|
+
return daysDifference <= 75;
|
|
211
|
+
}
|
|
212
|
+
static validateShareholderOwnership(shareholders) {
|
|
213
|
+
const totalPercentage = shareholders.reduce((sum, shareholder) => {
|
|
214
|
+
return sum + (shareholder.percentageOwnership || 0);
|
|
215
|
+
}, 0);
|
|
216
|
+
return Math.abs(totalPercentage - 100) < 0.01;
|
|
217
|
+
}
|
|
218
|
+
static validateEIN(ein) {
|
|
219
|
+
if (ein === "Applied for")
|
|
220
|
+
return true;
|
|
221
|
+
const einRegex = /^\d{2}-\d{7}$/;
|
|
222
|
+
return einRegex.test(ein);
|
|
223
|
+
}
|
|
224
|
+
static validateMaxShareholdersForPDF(shareholders) {
|
|
225
|
+
if (shareholders.length > 4) {
|
|
226
|
+
return {
|
|
227
|
+
isValid: false,
|
|
228
|
+
message: "Only the first 4 shareholders will be included in the PDF. Consider splitting into multiple forms if more shareholders need to be documented.",
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return { isValid: true };
|
|
232
|
+
}
|
|
233
|
+
static validateLateElection(incorporationDate, electionEffectiveDate, filingDate) {
|
|
234
|
+
const incorporation = new Date(incorporationDate);
|
|
235
|
+
const election = new Date(electionEffectiveDate);
|
|
236
|
+
const filing = filingDate ? new Date(filingDate) : new Date();
|
|
237
|
+
const daysSinceIncorporation = Math.floor((filing.getTime() - incorporation.getTime()) / (1000 * 60 * 60 * 24));
|
|
238
|
+
const daysSinceElectionDate = Math.floor((filing.getTime() - election.getTime()) / (1000 * 60 * 60 * 24));
|
|
239
|
+
const isLate = daysSinceIncorporation > 75 || daysSinceElectionDate > 75;
|
|
240
|
+
return {
|
|
241
|
+
isLate,
|
|
242
|
+
daysSinceIncorporation,
|
|
243
|
+
daysSinceElectionDate,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
static validateSCorpEligibility(data) {
|
|
247
|
+
const issues = [];
|
|
248
|
+
if (data.shareholders.length > 100) {
|
|
249
|
+
issues.push("S-Corporation cannot have more than 100 shareholders");
|
|
250
|
+
}
|
|
251
|
+
data.shareholders.forEach((shareholder, index) => {
|
|
252
|
+
if (!shareholder.taxIdNumber) {
|
|
253
|
+
issues.push(`Shareholder ${index + 1} tax ID number is required`);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
const totalPercentage = data.shareholders.reduce((sum, shareholder) => {
|
|
257
|
+
return sum + (shareholder.percentageOwnership || 0);
|
|
258
|
+
}, 0);
|
|
259
|
+
if (Math.abs(totalPercentage - 100) > 0.01) {
|
|
260
|
+
issues.push(`Shareholder ownership percentages must total 100%, currently ${totalPercentage}%`);
|
|
261
|
+
}
|
|
262
|
+
if (!data.corporationName) {
|
|
263
|
+
issues.push("Corporation name is required");
|
|
264
|
+
}
|
|
265
|
+
if (!data.employerIdNumber) {
|
|
266
|
+
issues.push("Employer ID number is required");
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
isEligible: issues.length === 0,
|
|
270
|
+
issues,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.Form2553ValidationDto = Form2553ValidationDto;
|
|
275
|
+
//# sourceMappingURL=form.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.dto.js","sourceRoot":"","sources":["../../../../../src/create/pdf/united-states/form-2553/form.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Form2553DataDto } from "./form.dto";
|
|
2
|
+
declare const formatAddress: (addressLine1: string, addressLine2?: string, city?: string, state?: string, postalCode?: string, country?: string) => string;
|
|
3
|
+
declare const formatFullAddress: (addressLine1: string, addressLine2?: string, city?: string, state?: string, postalCode?: string, country?: string) => {
|
|
4
|
+
line1: string;
|
|
5
|
+
line2: string;
|
|
6
|
+
line3: string;
|
|
7
|
+
};
|
|
8
|
+
declare const splitTextIntoLines: (text: string, maxLength?: number) => string[];
|
|
9
|
+
declare const form2553Coordinates: (data: Form2553DataDto) => Record<string, string>[];
|
|
10
|
+
declare const validateForm2553Data: (data: Form2553DataDto) => void;
|
|
11
|
+
export declare const form2553: (data: Form2553DataDto) => Promise<Buffer>;
|
|
12
|
+
export { validateForm2553Data, formatAddress, formatFullAddress, form2553Coordinates, splitTextIntoLines, };
|
|
13
|
+
export declare const generateForm2553WithValidation: (data: Form2553DataDto, options?: {
|
|
14
|
+
skipSignatureValidation?: boolean;
|
|
15
|
+
skipOwnershipValidation?: boolean;
|
|
16
|
+
skipFilingDeadlineWarning?: boolean;
|
|
17
|
+
maxShareholdersPerPage?: number;
|
|
18
|
+
}) => Promise<Buffer>;
|
|
@@ -0,0 +1,258 @@
|
|
|
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.generateForm2553WithValidation = exports.splitTextIntoLines = exports.form2553Coordinates = exports.formatFullAddress = exports.formatAddress = exports.validateForm2553Data = exports.form2553 = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const util_1 = require("util");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const date_fns_1 = require("date-fns");
|
|
11
|
+
const generator_1 = require("../../util/pdfme/generator");
|
|
12
|
+
const text_1 = __importDefault(require("../../util/pdfme/schemas/text"));
|
|
13
|
+
const image_1 = __importDefault(require("../../util/pdfme/schemas/graphics/image"));
|
|
14
|
+
const buffer_1 = require("../../util/buffer");
|
|
15
|
+
const constants_1 = require("../constants");
|
|
16
|
+
const schema_json_1 = __importDefault(require("./schema.json"));
|
|
17
|
+
const form_dto_1 = require("./form.dto");
|
|
18
|
+
const readFilePromise = (0, util_1.promisify)(fs_1.readFile);
|
|
19
|
+
const DATE_FORMAT = "MM/dd/yyyy";
|
|
20
|
+
const formatAddress = (addressLine1, addressLine2, city, state, postalCode, country) => {
|
|
21
|
+
const parts = [
|
|
22
|
+
addressLine1,
|
|
23
|
+
addressLine2,
|
|
24
|
+
city && state && postalCode ? `${city}, ${state} ${postalCode}` : "",
|
|
25
|
+
country && country !== "United States" && country !== "US" ? country : "",
|
|
26
|
+
].filter(Boolean);
|
|
27
|
+
return parts.join(", ");
|
|
28
|
+
};
|
|
29
|
+
exports.formatAddress = formatAddress;
|
|
30
|
+
const formatFullAddress = (addressLine1, addressLine2, city, state, postalCode, country) => {
|
|
31
|
+
return {
|
|
32
|
+
line1: addressLine1 || "",
|
|
33
|
+
line2: addressLine2 || "",
|
|
34
|
+
line3: `${city || ""}, ${state || ""} ${postalCode || ""}${country && country !== "United States" && country !== "US"
|
|
35
|
+
? `, ${country}`
|
|
36
|
+
: ""}`.trim(),
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.formatFullAddress = formatFullAddress;
|
|
40
|
+
const splitTextIntoLines = (text, maxLength = 80) => {
|
|
41
|
+
if (!text)
|
|
42
|
+
return [];
|
|
43
|
+
const words = text.split(" ");
|
|
44
|
+
const lines = [];
|
|
45
|
+
let currentLine = "";
|
|
46
|
+
for (const word of words) {
|
|
47
|
+
if ((currentLine + word).length <= maxLength) {
|
|
48
|
+
currentLine += (currentLine ? " " : "") + word;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
if (currentLine)
|
|
52
|
+
lines.push(currentLine);
|
|
53
|
+
currentLine = word;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (currentLine)
|
|
57
|
+
lines.push(currentLine);
|
|
58
|
+
return lines;
|
|
59
|
+
};
|
|
60
|
+
exports.splitTextIntoLines = splitTextIntoLines;
|
|
61
|
+
const form2553Coordinates = (data) => {
|
|
62
|
+
const page1 = {
|
|
63
|
+
corporation_name: data.corporationName || "",
|
|
64
|
+
address_line_1: data.corporationAddress.address_line_1 || "",
|
|
65
|
+
address_city_state_zip_country: `${data.corporationAddress.city || ""}, ${data.corporationAddress.state || ""} ${data.corporationAddress.postal_code || ""}${data.corporationAddress.country &&
|
|
66
|
+
data.corporationAddress.country !== "United States" &&
|
|
67
|
+
data.corporationAddress.country !== "US"
|
|
68
|
+
? `, ${data.corporationAddress.country}`
|
|
69
|
+
: ""}`.trim(),
|
|
70
|
+
employer_id_number: data.employerIdNumber || "",
|
|
71
|
+
date_incorporated: data.dateIncorporated
|
|
72
|
+
? (0, date_fns_1.format)(new Date(data.dateIncorporated), DATE_FORMAT)
|
|
73
|
+
: "",
|
|
74
|
+
state_of_incorporation: data.stateOfIncorporation || "",
|
|
75
|
+
name_change_checkbox: data.changedName ? constants_1.CHECKED_IMAGE : "",
|
|
76
|
+
address_change_checkbox: data.changedAddress ? constants_1.CHECKED_IMAGE : "",
|
|
77
|
+
election_effective_date: data.electionEffectiveDate
|
|
78
|
+
? (0, date_fns_1.format)(new Date(data.electionEffectiveDate), DATE_FORMAT)
|
|
79
|
+
: "",
|
|
80
|
+
calendar_year_checkbox: data.selectedTaxYear === form_dto_1.TaxYearType.CALENDAR_YEAR ? constants_1.CHECKED_IMAGE : "",
|
|
81
|
+
fiscal_year_checkbox: data.selectedTaxYear === form_dto_1.TaxYearType.FISCAL_YEAR ? constants_1.CHECKED_IMAGE : "",
|
|
82
|
+
week_52_53_december_checkbox: data.selectedTaxYear === form_dto_1.TaxYearType.WEEK_52_53_DECEMBER
|
|
83
|
+
? constants_1.CHECKED_IMAGE
|
|
84
|
+
: "",
|
|
85
|
+
week_52_53_other_checkbox: data.selectedTaxYear === form_dto_1.TaxYearType.WEEK_52_53_OTHER
|
|
86
|
+
? constants_1.CHECKED_IMAGE
|
|
87
|
+
: "",
|
|
88
|
+
fiscal_year_end_date: data.fiscalYearEndDate || "",
|
|
89
|
+
week_ending_month: data.weekEndingMonth || "",
|
|
90
|
+
more_than_100_shareholders_checkbox: data.moreThan100ShareholdersFamilyTreated ? constants_1.CHECKED_IMAGE : "",
|
|
91
|
+
officer_name_title: `${data.officerName || ""} - ${data.officerTitle || ""}`
|
|
92
|
+
.replace(" - ", " - ")
|
|
93
|
+
.trim(),
|
|
94
|
+
officer_phone: data.officerPhoneNumber || "",
|
|
95
|
+
...(data.isLateElection && {
|
|
96
|
+
late_election_title_page: "Filed Pursuant to Rev Proc 2013-30",
|
|
97
|
+
late_election_explanation_line_1: `The corporation intended to be classified as an S corporation effective ${data.electionEffectiveDate
|
|
98
|
+
? (0, date_fns_1.format)(new Date(data.electionEffectiveDate), DATE_FORMAT)
|
|
99
|
+
: "01/01/2025"} but failed to timely file Form 2553`,
|
|
100
|
+
late_election_explanation_line_2: "due to reasonable cause. Specifically, the responsible party was unaware of the IRS filing deadline required to make the election.",
|
|
101
|
+
late_election_explanation_line_3: "As soon as the mistake was identified, corrective action was taken to file Form 2553.",
|
|
102
|
+
late_election_explanation_line_4: "We respectfully request relief under Revenue Procedure 2013-30.",
|
|
103
|
+
}),
|
|
104
|
+
officer_title: data.officerTitle || "",
|
|
105
|
+
};
|
|
106
|
+
const page2 = {
|
|
107
|
+
corporation_name_page2: data.corporationName || "",
|
|
108
|
+
employer_id_number_page2: data.employerIdNumber || "",
|
|
109
|
+
};
|
|
110
|
+
if (data.shareholders && data.shareholders.length > 0) {
|
|
111
|
+
data.shareholders
|
|
112
|
+
.slice(0, 4)
|
|
113
|
+
.forEach((shareholder, index) => {
|
|
114
|
+
const shareholderPrefix = `shareholder_${index + 1}`;
|
|
115
|
+
page2[`${shareholderPrefix}_name`] = shareholder.name || "";
|
|
116
|
+
const shareholderAddress = [
|
|
117
|
+
shareholder.address.address_line_1,
|
|
118
|
+
shareholder.address.address_line_2,
|
|
119
|
+
`${shareholder.address.city || ""}, ${shareholder.address.state || ""} ${shareholder.address.postal_code || ""}`,
|
|
120
|
+
shareholder.address.country &&
|
|
121
|
+
shareholder.address.country !== "United States" &&
|
|
122
|
+
shareholder.address.country !== "US"
|
|
123
|
+
? shareholder.address.country
|
|
124
|
+
: "",
|
|
125
|
+
]
|
|
126
|
+
.filter(Boolean)
|
|
127
|
+
.join("\n");
|
|
128
|
+
page2[`${shareholderPrefix}_address`] = shareholderAddress;
|
|
129
|
+
page2[`${shareholderPrefix}_shares`] =
|
|
130
|
+
shareholder.numberOfShares?.toString() || "";
|
|
131
|
+
page2[`${shareholderPrefix}_percentage`] =
|
|
132
|
+
shareholder.percentageOwnership?.toString() || "";
|
|
133
|
+
page2[`${shareholderPrefix}_date_acquired`] = shareholder.dateAcquired
|
|
134
|
+
? (0, date_fns_1.format)(new Date(shareholder.dateAcquired), DATE_FORMAT)
|
|
135
|
+
: "";
|
|
136
|
+
page2[`${shareholderPrefix}_tax_id`] = shareholder.taxIdNumber || "";
|
|
137
|
+
page2[`${shareholderPrefix}_tax_year_end`] =
|
|
138
|
+
shareholder.taxYearEnd || "";
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const page3 = {
|
|
142
|
+
corporation_name_page3: data.corporationName || "",
|
|
143
|
+
employer_id_number_page3: data.employerIdNumber || "",
|
|
144
|
+
};
|
|
145
|
+
const page4 = {
|
|
146
|
+
corporation_name_page4: data.corporationName || "",
|
|
147
|
+
employer_id_number_page4: data.employerIdNumber || "",
|
|
148
|
+
};
|
|
149
|
+
return [{ ...page1, ...page2, ...page3, ...page4 }];
|
|
150
|
+
};
|
|
151
|
+
exports.form2553Coordinates = form2553Coordinates;
|
|
152
|
+
let pdfBufferInstance;
|
|
153
|
+
const getPDFInstance = async () => {
|
|
154
|
+
if (!pdfBufferInstance) {
|
|
155
|
+
pdfBufferInstance = await readFilePromise((0, path_1.resolve)(__dirname, "./template.pdf"));
|
|
156
|
+
}
|
|
157
|
+
return pdfBufferInstance;
|
|
158
|
+
};
|
|
159
|
+
const validateForm2553Data = (data) => {
|
|
160
|
+
if (data.employerIdNumber !== "Applied for" &&
|
|
161
|
+
!/^\d{2}-\d{7}$/.test(data.employerIdNumber)) {
|
|
162
|
+
throw new Error("Invalid EIN format. Must be XX-XXXXXXX or 'Applied for'");
|
|
163
|
+
}
|
|
164
|
+
if (data.dateIncorporated && data.formFilingDate) {
|
|
165
|
+
const incorporation = new Date(data.dateIncorporated);
|
|
166
|
+
const filing = new Date(data.formFilingDate);
|
|
167
|
+
const daysDifference = Math.floor((filing.getTime() - incorporation.getTime()) / (1000 * 60 * 60 * 24));
|
|
168
|
+
if (daysDifference > 75 && !data.isLateElection) {
|
|
169
|
+
console.warn("Form 2553 may be filed late. Consider checking late election option and providing explanation.");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (data.shareholders.length > 0) {
|
|
173
|
+
const totalPercentage = data.shareholders.reduce((sum, shareholder) => {
|
|
174
|
+
return sum + (shareholder.percentageOwnership || 0);
|
|
175
|
+
}, 0);
|
|
176
|
+
if (Math.abs(totalPercentage - 100) > 0.01) {
|
|
177
|
+
console.warn(`Shareholder ownership percentages total ${totalPercentage}%, should equal 100%`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (data.shareholders.length > 4) {
|
|
181
|
+
console.warn("Only first 4 shareholders will be included in the PDF");
|
|
182
|
+
}
|
|
183
|
+
if (data.shareholders.length > 100) {
|
|
184
|
+
throw new Error("S-Corporation cannot have more than 100 shareholders");
|
|
185
|
+
}
|
|
186
|
+
if (!data.corporationName) {
|
|
187
|
+
throw new Error("Corporation name is required");
|
|
188
|
+
}
|
|
189
|
+
if (!data.employerIdNumber) {
|
|
190
|
+
throw new Error("Employer ID number is required");
|
|
191
|
+
}
|
|
192
|
+
if (!data.dateIncorporated) {
|
|
193
|
+
throw new Error("Date incorporated is required");
|
|
194
|
+
}
|
|
195
|
+
if (!data.stateOfIncorporation) {
|
|
196
|
+
throw new Error("State of incorporation is required");
|
|
197
|
+
}
|
|
198
|
+
if (!data.electionEffectiveDate) {
|
|
199
|
+
throw new Error("Election effective date is required");
|
|
200
|
+
}
|
|
201
|
+
if (!data.officerName) {
|
|
202
|
+
throw new Error("Officer name is required");
|
|
203
|
+
}
|
|
204
|
+
if (!data.officerTitle) {
|
|
205
|
+
throw new Error("Officer title is required");
|
|
206
|
+
}
|
|
207
|
+
if (!data.officerPhoneNumber) {
|
|
208
|
+
throw new Error("Officer phone number is required");
|
|
209
|
+
}
|
|
210
|
+
if (!data.shareholders || data.shareholders.length === 0) {
|
|
211
|
+
throw new Error("At least one shareholder is required");
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
exports.validateForm2553Data = validateForm2553Data;
|
|
215
|
+
const form2553 = async (data) => {
|
|
216
|
+
validateForm2553Data(data);
|
|
217
|
+
const pdfBuffer = await getPDFInstance();
|
|
218
|
+
const template = {
|
|
219
|
+
basePdf: (0, buffer_1.toArrayBuffer)(pdfBuffer),
|
|
220
|
+
schemas: schema_json_1.default,
|
|
221
|
+
};
|
|
222
|
+
const plugins = {
|
|
223
|
+
Text: text_1.default,
|
|
224
|
+
Image: image_1.default,
|
|
225
|
+
};
|
|
226
|
+
const inputs = form2553Coordinates(data);
|
|
227
|
+
return (0, generator_1.generate)({ template, inputs, plugins }).then((pdf) => {
|
|
228
|
+
return (0, buffer_1.toBuffer)(pdf);
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
exports.form2553 = form2553;
|
|
232
|
+
const generateForm2553WithValidation = async (data, options = {}) => {
|
|
233
|
+
try {
|
|
234
|
+
const maxShareholdersPerPage = options.maxShareholdersPerPage || 4;
|
|
235
|
+
if (!options.skipSignatureValidation) {
|
|
236
|
+
validateForm2553Data(data);
|
|
237
|
+
}
|
|
238
|
+
if (!options.skipOwnershipValidation) {
|
|
239
|
+
const totalPercentage = data.shareholders.reduce((sum, shareholder) => {
|
|
240
|
+
return sum + (shareholder.percentageOwnership || 0);
|
|
241
|
+
}, 0);
|
|
242
|
+
if (Math.abs(totalPercentage - 100) > 0.01) {
|
|
243
|
+
throw new Error(`Shareholder ownership percentages must total 100%, currently ${totalPercentage}%`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (data.shareholders.length > maxShareholdersPerPage) {
|
|
247
|
+
console.warn(`Only first ${maxShareholdersPerPage} shareholders will be included in the PDF`);
|
|
248
|
+
}
|
|
249
|
+
const pdfBuffer = await (0, exports.form2553)(data);
|
|
250
|
+
return pdfBuffer;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
console.error("Error generating Form 2553:", error);
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
exports.generateForm2553WithValidation = generateForm2553WithValidation;
|
|
258
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/create/pdf/united-states/form-2553/index.ts"],"names":[],"mappings":"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"}
|