@paro.io/expert-shared-components 1.14.74 → 1.14.75
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/lib/components/TaxAxis/TaxAxisShell.js +58 -10
- package/lib/tax-axis/components/intake/ClientParametersSection.js +0 -7
- package/lib/tax-axis/components/intake/RefineAnalysisSection.js +1 -1
- package/lib/tax-axis/components/intake/StrategyRadar.js +1 -1
- package/lib/tax-axis/components/intake/intakeSchema.js +15 -15
- package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.d.ts +1 -4
- package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.js +8 -17
- package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +6 -14
- package/lib/tax-axis/lib/compute/index.js +2 -10
- package/lib/tax-axis/lib/documentFieldCatalog.d.ts +5 -10
- package/lib/tax-axis/lib/documentFieldCatalog.js +115 -329
- package/package.json +1 -1
|
@@ -195,20 +195,68 @@ const TaxAxisShell = ({ taxAxisApi, userContext = 'expert', initialSessionId, in
|
|
|
195
195
|
}
|
|
196
196
|
}), [taxAxisApi]);
|
|
197
197
|
// On mount: if a sessionId was injected (e.g. returning to an existing session),
|
|
198
|
-
//
|
|
198
|
+
// fetch the session stage and resume at the correct step.
|
|
199
199
|
(0, react_1.useEffect)(() => {
|
|
200
|
-
if (!initialSessionId
|
|
200
|
+
if (!initialSessionId)
|
|
201
201
|
return;
|
|
202
|
-
taxAxisApi.
|
|
203
|
-
.then((
|
|
204
|
-
|
|
205
|
-
|
|
202
|
+
taxAxisApi.getSession(initialSessionId)
|
|
203
|
+
.then((session) => __awaiter(void 0, void 0, void 0, function* () {
|
|
204
|
+
var _a;
|
|
205
|
+
if (!session)
|
|
206
|
+
return;
|
|
207
|
+
// Restore profile from session fields so DOCUMENT_UPLOAD header renders correctly
|
|
208
|
+
setSessionId(initialSessionId);
|
|
209
|
+
setProfile((prev) => {
|
|
210
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
211
|
+
return prev !== null && prev !== void 0 ? prev : {
|
|
212
|
+
bizName: (_a = session.businessName) !== null && _a !== void 0 ? _a : '',
|
|
213
|
+
entity: (_b = session.entityType) !== null && _b !== void 0 ? _b : '',
|
|
214
|
+
industry: (_c = session.industry) !== null && _c !== void 0 ? _c : '',
|
|
215
|
+
year: String((_d = session.taxYear) !== null && _d !== void 0 ? _d : new Date().getFullYear()),
|
|
216
|
+
revenue: String((_e = session.annualRevenue) !== null && _e !== void 0 ? _e : ''),
|
|
217
|
+
ownerComp: String((_f = session.w2Compensation) !== null && _f !== void 0 ? _f : ''),
|
|
218
|
+
employees: String((_g = session.employeeCount) !== null && _g !== void 0 ? _g : ''),
|
|
219
|
+
states: (_h = session.states) !== null && _h !== void 0 ? _h : [],
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
const stage = (_a = session.stage) !== null && _a !== void 0 ? _a : '';
|
|
223
|
+
if (stage === 'REPORT_READY' || stage === 'COMPLETED') {
|
|
224
|
+
// Load LLM run data and jump to dashboard
|
|
225
|
+
if (taxAxisApi.getLlmRun) {
|
|
226
|
+
try {
|
|
227
|
+
const run = yield taxAxisApi.getLlmRun(initialSessionId, 'GENERATION');
|
|
228
|
+
if (run === null || run === void 0 ? void 0 : run.outputPayload) {
|
|
229
|
+
setLlmResult(run.outputPayload);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch ( /* non-blocking */_b) { /* non-blocking */ }
|
|
233
|
+
}
|
|
234
|
+
yield fetchAndSetParsedDocuments(initialSessionId);
|
|
206
235
|
setStep('DASHBOARD');
|
|
207
|
-
|
|
236
|
+
if (onSessionChange)
|
|
237
|
+
onSessionChange(initialSessionId);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (stage === 'LLM_RUNNING' || stage === 'EVAL_RUNNING') {
|
|
241
|
+
// Jump straight to processing screen and start polling
|
|
242
|
+
setStep('PROCESSING');
|
|
243
|
+
pollForResult(initialSessionId);
|
|
244
|
+
if (onSessionChange)
|
|
245
|
+
onSessionChange(initialSessionId);
|
|
246
|
+
return;
|
|
208
247
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
248
|
+
// INITIALIZED, DOCUMENTS_UPLOADED, PARSING, PARSED, EXTRACTION_REVIEW, FAILED, EVAL_FAILED
|
|
249
|
+
// Resume at document upload so the user can review/add documents or retry
|
|
250
|
+
setStep('DOCUMENT_UPLOAD');
|
|
251
|
+
if (onSessionChange)
|
|
252
|
+
onSessionChange(initialSessionId);
|
|
253
|
+
}))
|
|
254
|
+
.catch(() => {
|
|
255
|
+
// On error fall back to SESSION_SETUP — clear skeleton so page isn't stuck
|
|
256
|
+
if (onSessionChange)
|
|
257
|
+
onSessionChange(null);
|
|
258
|
+
});
|
|
259
|
+
// fetchAndSetParsedDocuments and pollForResult intentionally excluded: only runs on mount
|
|
212
260
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
213
261
|
}, [initialSessionId]);
|
|
214
262
|
const updateSessionId = (0, react_1.useCallback)((nextSessionId) => {
|
|
@@ -80,13 +80,6 @@ function ClientParametersSection({ userContext = "expert", }) {
|
|
|
80
80
|
setValue("period", "YTD");
|
|
81
81
|
}
|
|
82
82
|
}, [isCurrentOrFuture, setValue]);
|
|
83
|
-
// Auto-select 21% federal rate for C-Corporations (flat TCJA rate)
|
|
84
|
-
const selectedEntity = watch("entity");
|
|
85
|
-
react_1.default.useEffect(() => {
|
|
86
|
-
if (selectedEntity === "C-Corporation") {
|
|
87
|
-
setValue("federalRate", "21%");
|
|
88
|
-
}
|
|
89
|
-
}, [selectedEntity, setValue]);
|
|
90
83
|
const [expanded, setExpanded] = (0, react_1.useState)(true);
|
|
91
84
|
return (react_1.default.createElement(TaxAxisCard_1.TaxAxisCard, null,
|
|
92
85
|
react_1.default.createElement("div", { onClick: () => setExpanded((prev) => !prev), className: "flex items-center justify-between cursor-pointer", style: { marginBottom: expanded ? 14 : 0 } },
|
|
@@ -42,7 +42,7 @@ const SSTB_OPTIONS = ["Yes", "No", "Unsure"];
|
|
|
42
42
|
const REAL_ESTATE_OPTIONS = ["No", "Yes — Commercial", "Yes — Residential", "Yes — Both"];
|
|
43
43
|
const ITEMIZES_OPTIONS = ["Yes", "No", "Unsure"];
|
|
44
44
|
const SINGLE_OWNER_OPTIONS = ["Yes", "No"];
|
|
45
|
-
const FEDERAL_RATE_OPTIONS = ["10%", "12%", "
|
|
45
|
+
const FEDERAL_RATE_OPTIONS = ["10%", "12%", "22%", "24%", "32%", "35%", "37%"];
|
|
46
46
|
const TAX_DATA_YEARS_OPTIONS = ["1 year", "2 years", "3 years", "4 years", "5 years"];
|
|
47
47
|
// Risk Tolerance: mock stores first char ("1"-"5") as value.
|
|
48
48
|
// NOTE: intakeDefaultValues sets riskTolerance to "M" (spec) but the mock
|
|
@@ -110,7 +110,7 @@ function StrategyRadar({ profile }) {
|
|
|
110
110
|
// so [profile] as a dep would never re-fire the memo on field changes
|
|
111
111
|
const profileKey = JSON.stringify(profile);
|
|
112
112
|
const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(safeProfile), [profileKey]);
|
|
113
|
-
const fedRate =
|
|
113
|
+
const fedRate = parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
|
|
114
114
|
const stateRate = parseFloat(profile.stateRate || "4.95") / 100;
|
|
115
115
|
const netIncome = parseInt((profile.netIncome || "0").replace(/,/g, "")) || Math.round(rev * 0.3);
|
|
116
116
|
let loSum = eligibleStrategies.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0);
|
|
@@ -59,33 +59,33 @@ exports.intakeSchema = Yup.object().shape({
|
|
|
59
59
|
period: Yup.string().ensure(),
|
|
60
60
|
});
|
|
61
61
|
exports.intakeDefaultValues = {
|
|
62
|
-
bizName: "
|
|
63
|
-
cpaName: "
|
|
62
|
+
bizName: "",
|
|
63
|
+
cpaName: "",
|
|
64
64
|
entity: "C-Corporation",
|
|
65
|
-
industry: "
|
|
66
|
-
revenue: "
|
|
67
|
-
netIncome: "
|
|
68
|
-
ownerComp: "
|
|
69
|
-
employees: "
|
|
70
|
-
year: "
|
|
71
|
-
states: [
|
|
65
|
+
industry: "Professional Services",
|
|
66
|
+
revenue: "",
|
|
67
|
+
netIncome: "",
|
|
68
|
+
ownerComp: "",
|
|
69
|
+
employees: "",
|
|
70
|
+
year: "2026",
|
|
71
|
+
states: [],
|
|
72
72
|
filingStatus: "MFJ",
|
|
73
|
-
age: "
|
|
73
|
+
age: "",
|
|
74
74
|
sstb: "No",
|
|
75
75
|
ownsRealEstate: "No",
|
|
76
76
|
itemizesDeductions: "No",
|
|
77
|
-
singleOwner: "
|
|
78
|
-
equipmentPurchased: "
|
|
77
|
+
singleOwner: "Yes",
|
|
78
|
+
equipmentPurchased: "0",
|
|
79
79
|
realEstateValue: "0",
|
|
80
80
|
capitalGains: "0",
|
|
81
|
-
federalRate: "
|
|
82
|
-
stateRate: "
|
|
81
|
+
federalRate: "24%",
|
|
82
|
+
stateRate: "",
|
|
83
83
|
taxDataYears: "1 year",
|
|
84
84
|
riskTolerance: "3",
|
|
85
85
|
overtimePremium: "0",
|
|
86
86
|
tipIncomePct: "0",
|
|
87
87
|
retirementContributions: "0",
|
|
88
|
-
hdhpEnrolled: "
|
|
88
|
+
hdhpEnrolled: "No",
|
|
89
89
|
hsaContributions: "0",
|
|
90
90
|
wotcHires: "No",
|
|
91
91
|
familyEmployed: "No",
|
|
@@ -2,9 +2,6 @@ import React from "react";
|
|
|
2
2
|
interface SampleAnalysisPreviewProps {
|
|
3
3
|
sectionNum: string;
|
|
4
4
|
eligibleCount: number;
|
|
5
|
-
fedRatePct?: number;
|
|
6
|
-
stateRatePct?: number;
|
|
7
|
-
stateCode?: string;
|
|
8
5
|
}
|
|
9
|
-
export declare function SampleAnalysisPreview({ sectionNum, eligibleCount
|
|
6
|
+
export declare function SampleAnalysisPreview({ sectionNum, eligibleCount }: SampleAnalysisPreviewProps): React.JSX.Element;
|
|
10
7
|
export {};
|
|
@@ -26,9 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.SampleAnalysisPreview = SampleAnalysisPreview;
|
|
27
27
|
const react_1 = __importStar(require("react"));
|
|
28
28
|
const theme_1 = require("./theme");
|
|
29
|
-
function SampleAnalysisPreview({ sectionNum, eligibleCount
|
|
30
|
-
const fedRateDecimal = (fedRatePct / 100).toFixed(2);
|
|
31
|
-
const stateRateDecimal = (stateRatePct / 100).toFixed(4);
|
|
29
|
+
function SampleAnalysisPreview({ sectionNum, eligibleCount }) {
|
|
32
30
|
return (react_1.default.createElement("div", { style: { marginBottom: 24 } },
|
|
33
31
|
react_1.default.createElement("div", { style: { display: "flex", alignItems: "baseline", gap: 10, marginBottom: 6 } },
|
|
34
32
|
react_1.default.createElement("span", { style: { fontSize: 11, fontWeight: 700, color: theme_1.T.accent, fontFamily: theme_1.T.body } }, sectionNum),
|
|
@@ -64,12 +62,12 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount, fedRatePct = 24, sta
|
|
|
64
62
|
react_1.default.createElement("span", { style: { color: theme_1.T.orange, fontWeight: 700 } }, "\u00B7 illustrative")),
|
|
65
63
|
react_1.default.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr auto", gap: "6px 16px", fontSize: 11, fontFamily: theme_1.T.mono, marginBottom: 6 } }, [
|
|
66
64
|
["state_income_attributable_to_owner", "$1,750,000"],
|
|
67
|
-
["state_rate",
|
|
65
|
+
["state_rate", "0.0495 (IL)"],
|
|
68
66
|
["filing_status", "mfj"],
|
|
69
67
|
["MAGI_PROXY: net_income", "$1,750,000"],
|
|
70
68
|
["EFFECTIVE_SALT_CAP", "$0 (fully phased out by MFJ income)"],
|
|
71
|
-
["federal_marginal_rate",
|
|
72
|
-
["state_credit_rate",
|
|
69
|
+
["federal_marginal_rate", "0.24"],
|
|
70
|
+
["state_credit_rate", "1.00 (IL full credit)"],
|
|
73
71
|
["pte_tax_paid", "$86,625"],
|
|
74
72
|
].map(([k, v]) => (react_1.default.createElement(react_1.Fragment, { key: k },
|
|
75
73
|
react_1.default.createElement("span", { style: { color: theme_1.T.text3 } }, k),
|
|
@@ -81,8 +79,8 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount, fedRatePct = 24, sta
|
|
|
81
79
|
{ doc: "Form 1120-S", line: "Line 12 \u00B7 Taxes and licenses", field: "pte_tax_paid" },
|
|
82
80
|
{ doc: "Schedule K-1", line: "Box 16, Code A \u00B7 State tax credit info", field: "state_credit_pass_through" },
|
|
83
81
|
{ doc: "Form 1040 Sch A", line: "Line 5a \u00B7 State and local income tax", field: "salt_paid" },
|
|
84
|
-
{ doc:
|
|
85
|
-
{ doc: "Parser-injected", line:
|
|
82
|
+
{ doc: "State Return (IL-1120-ST)", line: "PTE election line items", field: "pte_election_status" },
|
|
83
|
+
{ doc: "Parser-injected", line: "state_pte_lookup[IL]", field: "state_credit_rate, pte_deadline" },
|
|
86
84
|
].map((s, idx) => (react_1.default.createElement("div", { key: idx, style: { display: "grid", gridTemplateColumns: "1.1fr 1.4fr 1fr", gap: 12, fontSize: 11, fontFamily: theme_1.T.body, padding: "7px 12px", background: theme_1.T.surface2, border: `1px solid ${theme_1.T.border}`, borderRadius: 6 } },
|
|
87
85
|
react_1.default.createElement("span", { style: { color: theme_1.T.text, fontWeight: 600 } }, s.doc),
|
|
88
86
|
react_1.default.createElement("span", { style: { color: theme_1.T.text2, fontFamily: theme_1.T.mono, fontSize: 10 } }, s.line),
|
|
@@ -104,20 +102,13 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount, fedRatePct = 24, sta
|
|
|
104
102
|
react_1.default.createElement("div", { style: { fontSize: 11, color: theme_1.T.text2, fontFamily: theme_1.T.mono, lineHeight: 1.6 } },
|
|
105
103
|
"State PTE election form",
|
|
106
104
|
react_1.default.createElement("br", null),
|
|
107
|
-
"(",
|
|
108
|
-
stateCode,
|
|
109
|
-
": Schedule B, Form ",
|
|
110
|
-
stateCode,
|
|
111
|
-
"-1120-ST)",
|
|
105
|
+
"(IL: Schedule B, Form IL-1120-ST)",
|
|
112
106
|
react_1.default.createElement("br", null),
|
|
113
107
|
"Updated Schedule K-1 (Box 13)"))),
|
|
114
108
|
react_1.default.createElement("div", { style: { marginTop: 14, paddingTop: 14, borderTop: `1px solid ${theme_1.T.border}`, display: "flex", justifyContent: "space-between", alignItems: "center", gap: 14 } },
|
|
115
109
|
react_1.default.createElement("div", null,
|
|
116
110
|
react_1.default.createElement("div", { style: { fontSize: 9, fontWeight: 700, color: theme_1.T.orange, textTransform: "uppercase", letterSpacing: "0.12em", fontFamily: theme_1.T.body, marginBottom: 3 } }, "deadline_flag"),
|
|
117
|
-
react_1.default.createElement("div", { style: { fontSize: 11, color: theme_1.T.text2, fontFamily: theme_1.T.body } },
|
|
118
|
-
"Per state_pte_lookup \u2014 ",
|
|
119
|
-
stateCode,
|
|
120
|
-
": file with original return")),
|
|
111
|
+
react_1.default.createElement("div", { style: { fontSize: 11, color: theme_1.T.text2, fontFamily: theme_1.T.body } }, "Per state_pte_lookup \u2014 IL: file with original return")),
|
|
121
112
|
react_1.default.createElement("span", { style: { fontSize: 9, fontWeight: 700, padding: "4px 9px", background: theme_1.T.surface2, border: `1px solid ${theme_1.T.border}`, borderRadius: 4, color: theme_1.T.text3, fontFamily: theme_1.T.mono, letterSpacing: 0.6, textTransform: "uppercase" } }, "algorithm_version V9.0")))),
|
|
122
113
|
react_1.default.createElement("div", { style: { marginTop: 14, padding: "14px 18px", background: `linear-gradient(135deg,${theme_1.T.accentBg} 0%,rgba(36,131,132,0.04) 100%)`, border: `1px solid ${theme_1.T.accent}`, borderRadius: 10, display: "flex", alignItems: "center", gap: 14 } },
|
|
123
114
|
react_1.default.createElement("div", { style: { flex: 1, fontSize: 13, color: theme_1.T.text, fontFamily: theme_1.T.body, lineHeight: 1.55 } },
|
|
@@ -36,7 +36,7 @@ const ProspectDocuments_1 = require("./ProspectDocuments");
|
|
|
36
36
|
const ProspectNextSteps_1 = require("./ProspectNextSteps");
|
|
37
37
|
const ProspectPrintView_1 = require("./ProspectPrintView");
|
|
38
38
|
function TaxAxisProspectReport({ profile, backendComputePayload, outputPayload, onUpgrade, onPresent, onReset, }) {
|
|
39
|
-
var _a, _b, _c, _d, _e, _f, _g
|
|
39
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
40
40
|
const bizName = profile.bizName || "Client";
|
|
41
41
|
const [confirmReset, setConfirmReset] = (0, react_1.useState)(false);
|
|
42
42
|
const [printMode, setPrintMode] = (0, react_1.useState)(false);
|
|
@@ -47,27 +47,19 @@ function TaxAxisProspectReport({ profile, backendComputePayload, outputPayload,
|
|
|
47
47
|
const top3 = (0, react_1.useMemo)(() => [...eligible].sort((a, b) => b.score - a.score).slice(0, 3), [eligible]);
|
|
48
48
|
const remaining = eligible.length - top3.length;
|
|
49
49
|
const remainingNames = eligible.filter(s => !top3.includes(s)).slice(0, 4).map(s => s.name);
|
|
50
|
-
// ═══
|
|
50
|
+
// ═══ SAVINGS RANGE — backend-authoritative when available ═══
|
|
51
51
|
const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(profile), [profile]);
|
|
52
|
-
const
|
|
52
|
+
const displayLo = backendComputePayload
|
|
53
53
|
? Math.round(backendComputePayload.savingsLo / 1000)
|
|
54
54
|
: Math.round(eligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0) / 1000);
|
|
55
|
-
const
|
|
55
|
+
const displayHi = backendComputePayload
|
|
56
56
|
? Math.round(backendComputePayload.savingsHi / 1000)
|
|
57
57
|
: Math.round(eligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.hi) !== null && _b !== void 0 ? _b : s.hi); }, 0) / 1000);
|
|
58
58
|
// ═══ GAP BLOCK — backend-authoritative when available ═══
|
|
59
|
-
const fedRatePct = (_a = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.fedRatePct) !== null && _a !== void 0 ? _a : (
|
|
59
|
+
const fedRatePct = (_a = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.fedRatePct) !== null && _a !== void 0 ? _a : (parseFloat((profile.federalRate || "24").replace("%", "")) || 24);
|
|
60
60
|
const stateRatePct = (_b = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.stateRatePct) !== null && _b !== void 0 ? _b : (parseFloat(profile.stateRate || "4.95") || 4.95);
|
|
61
61
|
const currentTax = (_c = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.currentTax) !== null && _c !== void 0 ? _c : Math.round(((0, compute_1.parseNum)(profile.netIncome) || Math.round((0, compute_1.parseNum)(profile.revenue) * 0.20))
|
|
62
62
|
* (fedRatePct + stateRatePct) / 100);
|
|
63
|
-
// ═══ SAVINGS CAP — headline savings cannot exceed total tax liability ═══
|
|
64
|
-
const currentTaxK = Math.round(currentTax / 1000);
|
|
65
|
-
let displayHi = Math.min(rawHi, currentTaxK);
|
|
66
|
-
let displayLo = Math.min(rawLo, Math.round(currentTax * 0.6 / 1000));
|
|
67
|
-
// If cap squashed lo close to hi, re-spread to maintain a meaningful range
|
|
68
|
-
if (displayHi > 0 && displayLo >= displayHi * 0.9) {
|
|
69
|
-
displayLo = Math.round(displayHi / 3);
|
|
70
|
-
}
|
|
71
63
|
const realizedSavings = (_d = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.realizedSavings) !== null && _d !== void 0 ? _d : Math.min(Math.round((displayLo + displayHi) / 2 * 1000 * 0.325), Math.round(currentTax * 0.6));
|
|
72
64
|
const optimizedTax = (_e = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.optimizedTax) !== null && _e !== void 0 ? _e : (currentTax - realizedSavings);
|
|
73
65
|
const realizedPctOfCurrent = (_f = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.realizedPctOfCurrent) !== null && _f !== void 0 ? _f : (currentTax > 0 ? Math.round((realizedSavings / currentTax) * 100) : 0);
|
|
@@ -176,7 +168,7 @@ function TaxAxisProspectReport({ profile, backendComputePayload, outputPayload,
|
|
|
176
168
|
react_1.default.createElement("div", { style: { fontSize: 13, color: theme_1.T.text2, fontFamily: theme_1.T.body, lineHeight: 1.7, marginBottom: 10 } }, (outputPayload === null || outputPayload === void 0 ? void 0 : outputPayload.additionalStrategiesBlurb)
|
|
177
169
|
|| `Including: ${remainingNames.join(", ")}${remaining > 4 ? " and more" : ""}`),
|
|
178
170
|
react_1.default.createElement("div", { style: { fontSize: 12, color: theme_1.T.text3, fontFamily: theme_1.T.body, lineHeight: 1.6, borderLeft: `3px solid ${theme_1.T.accent}`, paddingLeft: 12 } }, "Full analysis with documents unlocks specific savings estimates for every eligible strategy.")))),
|
|
179
|
-
react_1.default.createElement(SampleAnalysisPreview_1.SampleAnalysisPreview, { sectionNum: sectionNums.sample, eligibleCount: eligible.length
|
|
171
|
+
react_1.default.createElement(SampleAnalysisPreview_1.SampleAnalysisPreview, { sectionNum: sectionNums.sample, eligibleCount: eligible.length }),
|
|
180
172
|
react_1.default.createElement(ProspectDocuments_1.ProspectDocuments, { sectionNum: sectionNums.documents, requiredDocs: requiredDocs, recommendedDocs: recommendedDocs, conditionalDocs: conditionalDocs }),
|
|
181
173
|
react_1.default.createElement(ProspectNextSteps_1.ProspectNextSteps, { sectionNum: sectionNums.nextSteps, bizName: bizName, onUpgrade: onUpgrade, onPresent: onPresent, onPrint: handlePrint, onReset: onReset, confirmReset: confirmReset, onConfirmResetChange: setConfirmReset })));
|
|
182
174
|
}
|
|
@@ -48,8 +48,6 @@ function filterEligibleStrategies(profile) {
|
|
|
48
48
|
return false;
|
|
49
49
|
if (s.needsOwnerComp && ownerComp <= 0)
|
|
50
50
|
return false;
|
|
51
|
-
if (s.rank === 8 && (profile.ownsRealEstate || "No") === "No")
|
|
52
|
-
return false;
|
|
53
51
|
return true;
|
|
54
52
|
});
|
|
55
53
|
}
|
|
@@ -64,7 +62,7 @@ function computeAllStrategies(profile) {
|
|
|
64
62
|
const age = parseInt(profile.age || "45") || 45;
|
|
65
63
|
const hsaExisting = (0, exports.parseNum)(profile.hsaContributions);
|
|
66
64
|
const retirementExisting = (0, exports.parseNum)(profile.retirementContributions);
|
|
67
|
-
const fedRate =
|
|
65
|
+
const fedRate = parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
|
|
68
66
|
const stateRate = parseFloat(profile.stateRate || "4.95") / 100;
|
|
69
67
|
const combinedRate = fedRate + stateRate;
|
|
70
68
|
const seTaxRate = 0.153;
|
|
@@ -135,7 +133,7 @@ function computeAllStrategies(profile) {
|
|
|
135
133
|
const hsaLimit = 8550;
|
|
136
134
|
const hsaAdditional = Math.max(hsaLimit - hsaExisting, 0);
|
|
137
135
|
const hsaSavings = Math.round(hsaAdditional * (combinedRate + 0.0765));
|
|
138
|
-
results.set(9, { lo: Math.max(Math.round(hsaSavings * 0.
|
|
136
|
+
results.set(9, { lo: Math.max(Math.round(hsaSavings * 0.90), 0), hi: Math.max(Math.round(hsaSavings * 1.05), 0),
|
|
139
137
|
sources: [{ doc: "Intake", line: "HSA", value: `$${hsaExisting.toLocaleString()}`, field: "YTD Contributions" }, { doc: "IRS 2026", line: "Rev. Proc.", value: "$8,550", field: "Family Limit" }],
|
|
140
138
|
trace: [{ n: 1, step: "2026 family limit", formula: "Rev. Proc. 2025-32", result: "$8,550", src: "IRS" }, { n: 2, step: "Already contributed", formula: "W-2 Box 12 Code W", result: `$${hsaExisting.toLocaleString()}`, src: "Intake" }, { n: 3, step: "Remaining room", formula: `8,550 \u2212 ${hsaExisting.toLocaleString()}`, result: `$${hsaAdditional.toLocaleString()}`, src: "Computed" }, { n: 4, step: "Tax savings", formula: `${hsaAdditional.toLocaleString()} \u00D7 ${((combinedRate + 0.0765) * 100).toFixed(1)}%`, result: `$${hsaSavings.toLocaleString()}`, src: "Triple tax" }] });
|
|
141
139
|
}
|
|
@@ -167,11 +165,5 @@ function computeAllStrategies(profile) {
|
|
|
167
165
|
results.set(rank, Object.assign(Object.assign({}, v), { lo: Math.round(v.hi / 3.0) }));
|
|
168
166
|
}
|
|
169
167
|
}
|
|
170
|
-
// Safety net: ensure lo and hi don't round to same K (prevents "$XK–$XK" display)
|
|
171
|
-
for (const [rank, v] of results) {
|
|
172
|
-
if (v.hi > 0 && v.lo > 0 && Math.round(v.lo / 1000) >= Math.round(v.hi / 1000)) {
|
|
173
|
-
results.set(rank, Object.assign(Object.assign({}, v), { lo: Math.round(v.hi * 0.85) }));
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
168
|
return results;
|
|
177
169
|
}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
export interface
|
|
2
|
-
label
|
|
1
|
+
export interface FieldDef {
|
|
2
|
+
label: string;
|
|
3
3
|
sourceRef?: string;
|
|
4
4
|
}
|
|
5
5
|
export interface CatalogSection {
|
|
6
6
|
head: string;
|
|
7
7
|
fields: string[];
|
|
8
8
|
}
|
|
9
|
-
export interface
|
|
9
|
+
export interface DocumentCatalogEntry {
|
|
10
10
|
sections: CatalogSection[];
|
|
11
|
-
fields: Record<string,
|
|
11
|
+
fields: Record<string, FieldDef>;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
* Keyed by documentType string returned by the backend in parsedData.documentType.
|
|
15
|
-
* When DocumentReviewModal receives parsedData, it looks up the documentType here
|
|
16
|
-
* to get section groupings and field labels. Falls back to flat rendering if no entry.
|
|
17
|
-
*/
|
|
18
|
-
export declare const DOCUMENT_FIELD_CATALOG: Record<string, CatalogEntry>;
|
|
13
|
+
export declare const DOCUMENT_FIELD_CATALOG: Record<string, DocumentCatalogEntry>;
|
|
@@ -1,410 +1,196 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// Field defs provide human-readable labels and source line references.
|
|
5
|
-
// Built from backend extraction schemas in paro-graphql-api/src/tax-axis/catalog/documentCatalog.ts.
|
|
2
|
+
// Catalog that maps canonical documentType keys to their review sections and field metadata.
|
|
3
|
+
// Used by DocumentReviewModal to render structured field review UI from parsedData.
|
|
6
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
5
|
exports.DOCUMENT_FIELD_CATALOG = void 0;
|
|
8
|
-
/**
|
|
9
|
-
* Keyed by documentType string returned by the backend in parsedData.documentType.
|
|
10
|
-
* When DocumentReviewModal receives parsedData, it looks up the documentType here
|
|
11
|
-
* to get section groupings and field labels. Falls back to flat rendering if no entry.
|
|
12
|
-
*/
|
|
13
6
|
exports.DOCUMENT_FIELD_CATALOG = {
|
|
14
|
-
|
|
15
|
-
profit_loss: {
|
|
7
|
+
federal_tax_return: {
|
|
16
8
|
sections: [
|
|
17
|
-
{ head: "Revenue", fields: ["total_revenue", "cost_of_goods_sold", "gross_profit"] },
|
|
18
9
|
{
|
|
19
|
-
head: "
|
|
20
|
-
fields: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"total_operating_expenses",
|
|
30
|
-
],
|
|
10
|
+
head: "Income",
|
|
11
|
+
fields: ["total_income", "wages", "business_income", "capital_gains", "other_income"],
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
head: "Deductions",
|
|
15
|
+
fields: ["total_deductions", "qbi_deduction", "standard_deduction", "itemized_deductions"],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
head: "Tax",
|
|
19
|
+
fields: ["taxable_income", "total_tax", "self_employment_tax", "effective_rate"],
|
|
31
20
|
},
|
|
32
|
-
{ head: "Net Income", fields: ["net_operating_income", "income_tax_provision", "net_income"] },
|
|
33
21
|
],
|
|
34
22
|
fields: {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
travel: { label: "Travel", sourceRef: "" },
|
|
49
|
-
business_meals: { label: "Meals & Entertainment", sourceRef: "Line 19" },
|
|
50
|
-
office_supplies: { label: "Office Supplies", sourceRef: "" },
|
|
51
|
-
insurance_nonhealth: { label: "Insurance (Non-Health)", sourceRef: "" },
|
|
52
|
-
repairs_maintenance: { label: "Repairs & Maintenance", sourceRef: "" },
|
|
53
|
-
bank_fees: { label: "Bank Fees", sourceRef: "" },
|
|
54
|
-
contract_labor: { label: "Contract Labor", sourceRef: "" },
|
|
55
|
-
mortgage_interest: { label: "Mortgage Interest", sourceRef: "" },
|
|
56
|
-
business_interest_nonmortgage: { label: "Business Interest", sourceRef: "" },
|
|
57
|
-
depreciation_expense: { label: "Depreciation", sourceRef: "Line 14" },
|
|
58
|
-
amortization_expense: { label: "Amortization", sourceRef: "" },
|
|
59
|
-
other_expenses: { label: "Other Expenses", sourceRef: "" },
|
|
60
|
-
total_operating_expenses: { label: "Total Operating Expenses", sourceRef: "" },
|
|
61
|
-
net_operating_income: { label: "Net Operating Income", sourceRef: "Line 21" },
|
|
62
|
-
income_tax_provision: { label: "Income Tax Provision", sourceRef: "" },
|
|
63
|
-
net_income: { label: "Net Income", sourceRef: "Line 30" },
|
|
23
|
+
total_income: { label: "Total Income", sourceRef: "Form 1040 Line 9" },
|
|
24
|
+
wages: { label: "Wages & Salary", sourceRef: "Form 1040 Line 1a" },
|
|
25
|
+
business_income: { label: "Business Income (Schedule C)", sourceRef: "Form 1040 Line 8" },
|
|
26
|
+
capital_gains: { label: "Capital Gains", sourceRef: "Form 1040 Line 7" },
|
|
27
|
+
other_income: { label: "Other Income", sourceRef: "Form 1040 Line 8z" },
|
|
28
|
+
total_deductions: { label: "Total Deductions", sourceRef: "Form 1040 Line 12" },
|
|
29
|
+
qbi_deduction: { label: "QBI Deduction (§199A)", sourceRef: "Form 1040 Line 13" },
|
|
30
|
+
standard_deduction: { label: "Standard Deduction", sourceRef: "Form 1040 Line 12a" },
|
|
31
|
+
itemized_deductions: { label: "Itemized Deductions", sourceRef: "Schedule A Total" },
|
|
32
|
+
taxable_income: { label: "Taxable Income", sourceRef: "Form 1040 Line 15" },
|
|
33
|
+
total_tax: { label: "Total Tax", sourceRef: "Form 1040 Line 24" },
|
|
34
|
+
self_employment_tax: { label: "Self-Employment Tax", sourceRef: "Schedule SE" },
|
|
35
|
+
effective_rate: { label: "Effective Tax Rate" },
|
|
64
36
|
},
|
|
65
37
|
},
|
|
66
|
-
|
|
67
|
-
balance_sheet: {
|
|
38
|
+
profit_loss: {
|
|
68
39
|
sections: [
|
|
69
40
|
{
|
|
70
|
-
head: "
|
|
71
|
-
fields: [
|
|
72
|
-
"cash_and_equivalents", "accounts_receivable",
|
|
73
|
-
"allowance_for_doubtful_accounts", "prepaid_expenses", "inventory",
|
|
74
|
-
"total_current_assets", "property_equipment_gross",
|
|
75
|
-
"accumulated_depreciation", "property_equipment_net",
|
|
76
|
-
"intangible_assets_gross", "accumulated_amortization",
|
|
77
|
-
"intangible_assets_net", "security_deposits_held_as_asset", "total_assets",
|
|
78
|
-
],
|
|
41
|
+
head: "Revenue",
|
|
42
|
+
fields: ["total_revenue", "gross_revenue", "cost_of_goods_sold", "gross_profit"],
|
|
79
43
|
},
|
|
80
44
|
{
|
|
81
|
-
head: "
|
|
82
|
-
fields: [
|
|
83
|
-
"accounts_payable", "accrued_liabilities", "deferred_revenue",
|
|
84
|
-
"short_term_debt", "long_term_debt_current_portion",
|
|
85
|
-
"total_current_liabilities", "long_term_debt", "total_liabilities",
|
|
86
|
-
],
|
|
45
|
+
head: "Operating Expenses",
|
|
46
|
+
fields: ["total_expenses", "payroll_expense", "rent_expense", "depreciation", "other_expenses"],
|
|
87
47
|
},
|
|
88
48
|
{
|
|
89
|
-
head: "
|
|
90
|
-
fields: [
|
|
91
|
-
"common_stock_par_value", "additional_paid_in_capital",
|
|
92
|
-
"retained_earnings", "aaa_balance", "owners_equity",
|
|
93
|
-
"total_equity", "total_liabilities_and_equity",
|
|
94
|
-
],
|
|
49
|
+
head: "Net Income",
|
|
50
|
+
fields: ["net_income", "net_margin"],
|
|
95
51
|
},
|
|
96
52
|
],
|
|
97
53
|
fields: {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
intangible_assets_net: { label: "Intangible Assets (Net)", sourceRef: "" },
|
|
110
|
-
security_deposits_held_as_asset: { label: "Security Deposits", sourceRef: "" },
|
|
111
|
-
total_assets: { label: "Total Assets", sourceRef: "Line 11" },
|
|
112
|
-
accounts_payable: { label: "Accounts Payable", sourceRef: "Line 15" },
|
|
113
|
-
accrued_liabilities: { label: "Accrued Liabilities", sourceRef: "" },
|
|
114
|
-
deferred_revenue: { label: "Deferred Revenue", sourceRef: "" },
|
|
115
|
-
short_term_debt: { label: "Short-Term Debt", sourceRef: "" },
|
|
116
|
-
long_term_debt_current_portion: { label: "Current Portion of LT Debt", sourceRef: "" },
|
|
117
|
-
total_current_liabilities: { label: "Total Current Liabilities", sourceRef: "" },
|
|
118
|
-
long_term_debt: { label: "Long-Term Debt", sourceRef: "Line 17" },
|
|
119
|
-
total_liabilities: { label: "Total Liabilities", sourceRef: "Line 22" },
|
|
120
|
-
common_stock_par_value: { label: "Common Stock", sourceRef: "" },
|
|
121
|
-
additional_paid_in_capital: { label: "Additional Paid-in Capital", sourceRef: "" },
|
|
122
|
-
retained_earnings: { label: "Retained Earnings", sourceRef: "Line 24" },
|
|
123
|
-
aaa_balance: { label: "AAA Balance", sourceRef: "" },
|
|
124
|
-
owners_equity: { label: "Owner's Equity", sourceRef: "" },
|
|
125
|
-
total_equity: { label: "Total Equity", sourceRef: "Line 27" },
|
|
126
|
-
total_liabilities_and_equity: { label: "Total Liabilities & Equity", sourceRef: "" },
|
|
54
|
+
total_revenue: { label: "Total Revenue" },
|
|
55
|
+
gross_revenue: { label: "Gross Revenue" },
|
|
56
|
+
cost_of_goods_sold: { label: "Cost of Goods Sold (COGS)" },
|
|
57
|
+
gross_profit: { label: "Gross Profit" },
|
|
58
|
+
total_expenses: { label: "Total Operating Expenses" },
|
|
59
|
+
payroll_expense: { label: "Payroll & Compensation" },
|
|
60
|
+
rent_expense: { label: "Rent / Lease" },
|
|
61
|
+
depreciation: { label: "Depreciation & Amortization" },
|
|
62
|
+
other_expenses: { label: "Other Expenses" },
|
|
63
|
+
net_income: { label: "Net Income" },
|
|
64
|
+
net_margin: { label: "Net Profit Margin" },
|
|
127
65
|
},
|
|
128
66
|
},
|
|
129
|
-
|
|
130
|
-
federal_tax_return: {
|
|
67
|
+
balance_sheet: {
|
|
131
68
|
sections: [
|
|
132
69
|
{
|
|
133
|
-
head: "
|
|
134
|
-
fields: [
|
|
135
|
-
"entity_tax_classification", "ein", "date_incorporated",
|
|
136
|
-
"accounting_method_box", "industry_naics",
|
|
137
|
-
"amended_return_flag", "initial_return_flag", "final_return_flag",
|
|
138
|
-
],
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
head: "Income",
|
|
142
|
-
fields: [
|
|
143
|
-
"gross_receipts_L1a", "returns_and_allowances_L1b", "revenue",
|
|
144
|
-
"cost_of_goods_sold", "gross_profit", "total_income",
|
|
145
|
-
],
|
|
70
|
+
head: "Assets",
|
|
71
|
+
fields: ["total_assets", "current_assets", "cash", "accounts_receivable", "fixed_assets"],
|
|
146
72
|
},
|
|
147
73
|
{
|
|
148
|
-
head: "
|
|
149
|
-
fields: [
|
|
150
|
-
"compensation_of_officers_line", "salaries_wages_line",
|
|
151
|
-
"repairs_maintenance", "rent_expense_line",
|
|
152
|
-
"taxes_and_licenses_line", "interest_expense_line",
|
|
153
|
-
"charitable_contributions", "depreciation_line",
|
|
154
|
-
"advertising_expense", "pension_profit_sharing",
|
|
155
|
-
"employee_benefit_programs", "other_deductions_line",
|
|
156
|
-
"total_deductions",
|
|
157
|
-
],
|
|
74
|
+
head: "Liabilities",
|
|
75
|
+
fields: ["total_liabilities", "current_liabilities", "accounts_payable", "long_term_debt"],
|
|
158
76
|
},
|
|
159
77
|
{
|
|
160
|
-
head: "
|
|
161
|
-
fields: [
|
|
162
|
-
"net_income", "nol_deduction", "total_tax",
|
|
163
|
-
"estimated_tax_payments", "tax_due_or_overpayment",
|
|
164
|
-
"self_emp_hi",
|
|
165
|
-
],
|
|
78
|
+
head: "Equity",
|
|
79
|
+
fields: ["total_equity", "retained_earnings"],
|
|
166
80
|
},
|
|
167
81
|
],
|
|
168
82
|
fields: {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
cost_of_goods_sold: { label: "Cost of Goods Sold", sourceRef: "Line 2" },
|
|
181
|
-
gross_profit: { label: "Gross Profit", sourceRef: "Line 3" },
|
|
182
|
-
total_income: { label: "Total Income", sourceRef: "Line 6" },
|
|
183
|
-
compensation_of_officers_line: { label: "Officer Compensation", sourceRef: "Line 7" },
|
|
184
|
-
salaries_wages_line: { label: "Salaries & Wages", sourceRef: "Line 8" },
|
|
185
|
-
repairs_maintenance: { label: "Repairs & Maintenance", sourceRef: "Line 9" },
|
|
186
|
-
rent_expense_line: { label: "Rent Expense", sourceRef: "Line 11" },
|
|
187
|
-
taxes_and_licenses_line: { label: "Taxes & Licenses", sourceRef: "Line 12" },
|
|
188
|
-
interest_expense_line: { label: "Interest Expense", sourceRef: "Line 13" },
|
|
189
|
-
charitable_contributions: { label: "Charitable Contributions", sourceRef: "Line 19" },
|
|
190
|
-
depreciation_line: { label: "Depreciation", sourceRef: "Line 14" },
|
|
191
|
-
advertising_expense: { label: "Advertising", sourceRef: "Line 16" },
|
|
192
|
-
pension_profit_sharing: { label: "Pension & Profit Sharing", sourceRef: "Line 17" },
|
|
193
|
-
employee_benefit_programs: { label: "Employee Benefits", sourceRef: "Line 18" },
|
|
194
|
-
other_deductions_line: { label: "Other Deductions", sourceRef: "Line 19" },
|
|
195
|
-
total_deductions: { label: "Total Deductions", sourceRef: "Line 20" },
|
|
196
|
-
net_income: { label: "Net Income", sourceRef: "Line 21" },
|
|
197
|
-
nol_deduction: { label: "NOL Deduction", sourceRef: "Line 29a" },
|
|
198
|
-
total_tax: { label: "Total Tax", sourceRef: "Line 31" },
|
|
199
|
-
estimated_tax_payments: { label: "Estimated Tax Payments", sourceRef: "Line 32b" },
|
|
200
|
-
tax_due_or_overpayment: { label: "Tax Due / Overpayment", sourceRef: "" },
|
|
201
|
-
self_emp_hi: { label: "Self-Employed Health Insurance", sourceRef: "Sch 1 L17" },
|
|
83
|
+
total_assets: { label: "Total Assets" },
|
|
84
|
+
current_assets: { label: "Current Assets" },
|
|
85
|
+
cash: { label: "Cash & Equivalents" },
|
|
86
|
+
accounts_receivable: { label: "Accounts Receivable" },
|
|
87
|
+
fixed_assets: { label: "Fixed Assets (Net)" },
|
|
88
|
+
total_liabilities: { label: "Total Liabilities" },
|
|
89
|
+
current_liabilities: { label: "Current Liabilities" },
|
|
90
|
+
accounts_payable: { label: "Accounts Payable" },
|
|
91
|
+
long_term_debt: { label: "Long-Term Debt" },
|
|
92
|
+
total_equity: { label: "Total Equity" },
|
|
93
|
+
retained_earnings: { label: "Retained Earnings" },
|
|
202
94
|
},
|
|
203
95
|
},
|
|
204
|
-
|
|
205
|
-
w3: {
|
|
96
|
+
schedule_k1_s_corp: {
|
|
206
97
|
sections: [
|
|
207
98
|
{
|
|
208
|
-
head: "
|
|
209
|
-
fields: [
|
|
210
|
-
"wages_tips_other_compensation_box1", "federal_income_tax_withheld_box2",
|
|
211
|
-
"social_security_wages_box3", "social_security_tax_withheld_box4",
|
|
212
|
-
"medicare_wages_box5", "medicare_tax_withheld_box6",
|
|
213
|
-
"social_security_tips_box7", "allocated_tips_box8",
|
|
214
|
-
],
|
|
99
|
+
head: "Ordinary Income",
|
|
100
|
+
fields: ["ordinary_income", "net_rental_income", "interest_income", "dividend_income"],
|
|
215
101
|
},
|
|
216
102
|
{
|
|
217
|
-
head: "
|
|
218
|
-
fields: [
|
|
219
|
-
"dependent_care_benefits_box10", "nonqualified_plans_box11",
|
|
220
|
-
"owner_w2_comp", "employees",
|
|
221
|
-
],
|
|
103
|
+
head: "Deductions & Credits",
|
|
104
|
+
fields: ["section_179_deduction", "charitable_contributions", "credits"],
|
|
222
105
|
},
|
|
223
106
|
],
|
|
224
107
|
fields: {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
allocated_tips_box8: { label: "Allocated Tips", sourceRef: "Box 8" },
|
|
233
|
-
dependent_care_benefits_box10: { label: "Dependent Care Benefits", sourceRef: "Box 10" },
|
|
234
|
-
nonqualified_plans_box11: { label: "Nonqualified Plans", sourceRef: "Box 11" },
|
|
235
|
-
owner_w2_comp: { label: "Owner W-2 Compensation", sourceRef: "Box 1 (Officer)" },
|
|
236
|
-
employees: { label: "Number of Employees", sourceRef: "Box d" },
|
|
108
|
+
ordinary_income: { label: "Ordinary Business Income (Loss)", sourceRef: "K-1 Box 1" },
|
|
109
|
+
net_rental_income: { label: "Net Rental Real Estate Income", sourceRef: "K-1 Box 2" },
|
|
110
|
+
interest_income: { label: "Interest Income", sourceRef: "K-1 Box 4" },
|
|
111
|
+
dividend_income: { label: "Ordinary Dividends", sourceRef: "K-1 Box 5a" },
|
|
112
|
+
section_179_deduction: { label: "Section 179 Deduction", sourceRef: "K-1 Box 11" },
|
|
113
|
+
charitable_contributions: { label: "Charitable Contributions", sourceRef: "K-1 Box 12" },
|
|
114
|
+
credits: { label: "Credits", sourceRef: "K-1 Box 13" },
|
|
237
115
|
},
|
|
238
116
|
},
|
|
239
|
-
|
|
240
|
-
payroll_records: {
|
|
117
|
+
schedule_k1_partnership: {
|
|
241
118
|
sections: [
|
|
242
119
|
{
|
|
243
|
-
head: "
|
|
244
|
-
fields: [
|
|
245
|
-
"employees", "w2_wages_paid_total",
|
|
246
|
-
"total_federal_withholding", "total_ss_withholding",
|
|
247
|
-
"total_medicare_withholding",
|
|
248
|
-
],
|
|
120
|
+
head: "Ordinary Income",
|
|
121
|
+
fields: ["ordinary_income", "net_rental_income", "guaranteed_payments", "interest_income"],
|
|
249
122
|
},
|
|
250
123
|
{
|
|
251
|
-
head: "
|
|
252
|
-
fields: [
|
|
253
|
-
"employer_fica_match", "employer_futa_paid",
|
|
254
|
-
"employer_401k_match_total", "bonuses_paid_total",
|
|
255
|
-
"commissions_paid_total", "overtime_pay_total",
|
|
256
|
-
"tip_income_reported",
|
|
257
|
-
],
|
|
124
|
+
head: "Deductions & Credits",
|
|
125
|
+
fields: ["section_179_deduction", "charitable_contributions", "self_employment_earnings"],
|
|
258
126
|
},
|
|
259
127
|
],
|
|
260
128
|
fields: {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
employer_401k_match_total: { label: "401(k) Match Total", sourceRef: "" },
|
|
269
|
-
bonuses_paid_total: { label: "Bonuses Paid", sourceRef: "" },
|
|
270
|
-
commissions_paid_total: { label: "Commissions Paid", sourceRef: "" },
|
|
271
|
-
overtime_pay_total: { label: "Overtime Pay", sourceRef: "" },
|
|
272
|
-
tip_income_reported: { label: "Tip Income Reported", sourceRef: "" },
|
|
129
|
+
ordinary_income: { label: "Ordinary Business Income (Loss)", sourceRef: "K-1 Box 1" },
|
|
130
|
+
net_rental_income: { label: "Net Rental Real Estate Income", sourceRef: "K-1 Box 2" },
|
|
131
|
+
guaranteed_payments: { label: "Guaranteed Payments", sourceRef: "K-1 Box 4" },
|
|
132
|
+
interest_income: { label: "Interest Income", sourceRef: "K-1 Box 5" },
|
|
133
|
+
section_179_deduction: { label: "Section 179 Deduction", sourceRef: "K-1 Box 12" },
|
|
134
|
+
charitable_contributions: { label: "Charitable Contributions", sourceRef: "K-1 Box 13" },
|
|
135
|
+
self_employment_earnings: { label: "Self-Employment Earnings", sourceRef: "K-1 Box 14" },
|
|
273
136
|
},
|
|
274
137
|
},
|
|
275
|
-
// ── Fixed Asset Schedule ──
|
|
276
138
|
fixed_asset_schedule: {
|
|
277
139
|
sections: [
|
|
278
140
|
{
|
|
279
|
-
head: "Summary",
|
|
280
|
-
fields: [
|
|
281
|
-
"total_original_cost", "total_accumulated_depreciation",
|
|
282
|
-
"total_net_book_value", "fixed_asset_additions_current_year",
|
|
283
|
-
"qualifying_asset_cost",
|
|
284
|
-
],
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
head: "Depreciation & Amortization",
|
|
288
|
-
fields: [
|
|
289
|
-
"total_section_179_claimed", "total_bonus_depreciation_claimed",
|
|
290
|
-
"qip_value", "ubia_total",
|
|
291
|
-
],
|
|
141
|
+
head: "Asset Summary",
|
|
142
|
+
fields: ["total_asset_cost", "total_accumulated_depreciation", "total_net_book_value", "bonus_depreciation_taken", "section_179_taken"],
|
|
292
143
|
},
|
|
293
144
|
],
|
|
294
145
|
fields: {
|
|
295
|
-
|
|
296
|
-
total_accumulated_depreciation: { label: "Accumulated Depreciation"
|
|
297
|
-
total_net_book_value: { label: "Net Book Value"
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
total_section_179_claimed: { label: "Section 179 Claimed", sourceRef: "" },
|
|
301
|
-
total_bonus_depreciation_claimed: { label: "Bonus Depreciation Claimed", sourceRef: "" },
|
|
302
|
-
qip_value: { label: "QIP Value", sourceRef: "" },
|
|
303
|
-
ubia_total: { label: "UBIA Total", sourceRef: "" },
|
|
146
|
+
total_asset_cost: { label: "Total Asset Cost Basis" },
|
|
147
|
+
total_accumulated_depreciation: { label: "Total Accumulated Depreciation" },
|
|
148
|
+
total_net_book_value: { label: "Total Net Book Value" },
|
|
149
|
+
bonus_depreciation_taken: { label: "Bonus Depreciation Taken" },
|
|
150
|
+
section_179_taken: { label: "Section 179 Deduction Taken" },
|
|
304
151
|
},
|
|
305
152
|
},
|
|
306
|
-
|
|
307
|
-
state_tax_return: {
|
|
153
|
+
payroll_records: {
|
|
308
154
|
sections: [
|
|
309
155
|
{
|
|
310
|
-
head: "
|
|
311
|
-
fields: ["
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
head: "Tax Computation",
|
|
315
|
-
fields: [
|
|
316
|
-
"apportionment_factor", "state_taxable_income", "state_tax_paid",
|
|
317
|
-
"state_estimated_payments_made", "pte_election_status", "pte_tax_paid",
|
|
318
|
-
"il_replacement_tax",
|
|
319
|
-
],
|
|
156
|
+
head: "Payroll Summary",
|
|
157
|
+
fields: ["total_payroll", "owner_compensation", "employee_count", "total_wages", "employer_taxes"],
|
|
320
158
|
},
|
|
321
159
|
],
|
|
322
160
|
fields: {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
state_tax_paid: { label: "State Tax Paid", sourceRef: "Total" },
|
|
329
|
-
state_estimated_payments_made: { label: "Estimated Payments Made", sourceRef: "" },
|
|
330
|
-
pte_election_status: { label: "PTE Election Status", sourceRef: "" },
|
|
331
|
-
pte_tax_paid: { label: "PTE Tax Paid", sourceRef: "" },
|
|
332
|
-
il_replacement_tax: { label: "IL Replacement Tax", sourceRef: "" },
|
|
161
|
+
total_payroll: { label: "Total Payroll Cost" },
|
|
162
|
+
owner_compensation: { label: "Owner / Officer Compensation" },
|
|
163
|
+
employee_count: { label: "Employee Count" },
|
|
164
|
+
total_wages: { label: "Total Wages Paid" },
|
|
165
|
+
employer_taxes: { label: "Employer Payroll Taxes" },
|
|
333
166
|
},
|
|
334
167
|
},
|
|
335
|
-
|
|
336
|
-
form_4562: {
|
|
168
|
+
form_1099_nec_summary: {
|
|
337
169
|
sections: [
|
|
338
170
|
{
|
|
339
|
-
head: "
|
|
340
|
-
fields: [
|
|
341
|
-
"section_179_max_amount_L1", "section_179_cost_placed_L2",
|
|
342
|
-
"dollar_limitation_L5", "section_179_expense_L12",
|
|
343
|
-
"section_179_carryover_to_next_year_L13",
|
|
344
|
-
],
|
|
345
|
-
},
|
|
346
|
-
{
|
|
347
|
-
head: "MACRS & Bonus",
|
|
348
|
-
fields: [
|
|
349
|
-
"bonus_depreciation_claimed_L14", "bonus_elected_out_flag",
|
|
350
|
-
"macrs_prior_year_assets_L17", "macrs_current_year_gds",
|
|
351
|
-
"macrs_current_year_ads",
|
|
352
|
-
],
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
head: "Totals",
|
|
356
|
-
fields: [
|
|
357
|
-
"total_depreciation_L22", "fixed_asset_additions",
|
|
358
|
-
"qualifying_asset_cost", "qip_present",
|
|
359
|
-
],
|
|
171
|
+
head: "1099-NEC Summary",
|
|
172
|
+
fields: ["total_nec_payments", "contractor_count", "largest_single_payment"],
|
|
360
173
|
},
|
|
361
174
|
],
|
|
362
175
|
fields: {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
section_179_expense_L12: { label: "§179 Expense Deduction", sourceRef: "Line 12" },
|
|
367
|
-
section_179_carryover_to_next_year_L13: { label: "§179 Carryover", sourceRef: "Line 13" },
|
|
368
|
-
bonus_depreciation_claimed_L14: { label: "Bonus Depreciation", sourceRef: "Line 14" },
|
|
369
|
-
bonus_elected_out_flag: { label: "Bonus Elected Out", sourceRef: "Election" },
|
|
370
|
-
macrs_prior_year_assets_L17: { label: "MACRS Prior Year Assets", sourceRef: "Line 17" },
|
|
371
|
-
macrs_current_year_gds: { label: "MACRS Current Year (GDS)", sourceRef: "Section B" },
|
|
372
|
-
macrs_current_year_ads: { label: "MACRS Current Year (ADS)", sourceRef: "Section C" },
|
|
373
|
-
total_depreciation_L22: { label: "Total Depreciation", sourceRef: "Line 22" },
|
|
374
|
-
fixed_asset_additions: { label: "Fixed Asset Additions", sourceRef: "" },
|
|
375
|
-
qualifying_asset_cost: { label: "Qualifying Asset Cost", sourceRef: "≤20yr" },
|
|
376
|
-
qip_present: { label: "QIP Present", sourceRef: "" },
|
|
176
|
+
total_nec_payments: { label: "Total NEC Payments" },
|
|
177
|
+
contractor_count: { label: "Contractor Count" },
|
|
178
|
+
largest_single_payment: { label: "Largest Single Payment" },
|
|
377
179
|
},
|
|
378
180
|
},
|
|
379
|
-
|
|
380
|
-
form_8889: {
|
|
181
|
+
state_tax_return: {
|
|
381
182
|
sections: [
|
|
382
183
|
{
|
|
383
|
-
head: "
|
|
384
|
-
fields: [
|
|
385
|
-
"hdhp_coverage_L1", "hsa_contributions_L2",
|
|
386
|
-
"age_55_catchup_contribution_L3", "employer_contributions_L9",
|
|
387
|
-
"deductible_hsa_contributions_L13",
|
|
388
|
-
],
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
head: "Distributions",
|
|
392
|
-
fields: [
|
|
393
|
-
"total_distributions_L14a", "qualified_medical_expenses_L15",
|
|
394
|
-
"taxable_hsa_distributions_L16", "additional_20pct_tax_L17b",
|
|
395
|
-
],
|
|
184
|
+
head: "State Tax",
|
|
185
|
+
fields: ["state", "state_taxable_income", "state_tax_owed", "state_effective_rate", "state_credits"],
|
|
396
186
|
},
|
|
397
187
|
],
|
|
398
188
|
fields: {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
total_distributions_L14a: { label: "Total Distributions", sourceRef: "Line 14a" },
|
|
405
|
-
qualified_medical_expenses_L15: { label: "Qualified Medical Expenses", sourceRef: "Line 15" },
|
|
406
|
-
taxable_hsa_distributions_L16: { label: "Taxable HSA Distributions", sourceRef: "Line 16" },
|
|
407
|
-
additional_20pct_tax_L17b: { label: "Additional 20% Tax", sourceRef: "Line 17b" },
|
|
189
|
+
state: { label: "State" },
|
|
190
|
+
state_taxable_income: { label: "State Taxable Income" },
|
|
191
|
+
state_tax_owed: { label: "State Tax Owed" },
|
|
192
|
+
state_effective_rate: { label: "State Effective Rate" },
|
|
193
|
+
state_credits: { label: "State Credits Applied" },
|
|
408
194
|
},
|
|
409
195
|
},
|
|
410
196
|
};
|