@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.
@@ -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
- // reload the last GENERATION llmRun so the report screens get live data.
198
+ // fetch the session stage and resume at the correct step.
199
199
  (0, react_1.useEffect)(() => {
200
- if (!initialSessionId || !taxAxisApi.getLlmRun)
200
+ if (!initialSessionId)
201
201
  return;
202
- taxAxisApi.getLlmRun(initialSessionId, 'GENERATION')
203
- .then((run) => {
204
- if (run === null || run === void 0 ? void 0 : run.outputPayload) {
205
- setLlmResult(run.outputPayload);
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
- fetchAndSetParsedDocuments(initialSessionId);
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
- .catch(() => { });
211
- // fetchAndSetParsedDocuments intentionally excluded: only runs on mount for initial session restore
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%", "21%", "22%", "24%", "32%", "35%", "37%"];
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 = entity === "C-Corporation" ? 0.21 : parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
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: "Ironclad Systems, Inc.",
63
- cpaName: "Amar",
62
+ bizName: "",
63
+ cpaName: "",
64
64
  entity: "C-Corporation",
65
- industry: "Technology",
66
- revenue: "2150000",
67
- netIncome: "410000",
68
- ownerComp: "405000",
69
- employees: "11",
70
- year: "2023",
71
- states: ["GA"],
65
+ industry: "Professional Services",
66
+ revenue: "",
67
+ netIncome: "",
68
+ ownerComp: "",
69
+ employees: "",
70
+ year: "2026",
71
+ states: [],
72
72
  filingStatus: "MFJ",
73
- age: "45",
73
+ age: "",
74
74
  sstb: "No",
75
75
  ownsRealEstate: "No",
76
76
  itemizesDeductions: "No",
77
- singleOwner: "No",
78
- equipmentPurchased: "87000",
77
+ singleOwner: "Yes",
78
+ equipmentPurchased: "0",
79
79
  realEstateValue: "0",
80
80
  capitalGains: "0",
81
- federalRate: "22%",
82
- stateRate: "5.39",
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: "Yes",
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, fedRatePct, stateRatePct, stateCode }: SampleAnalysisPreviewProps): React.JSX.Element;
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, fedRatePct = 24, stateRatePct = 4.95, stateCode = "IL" }) {
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", `${stateRateDecimal} (${stateCode})`],
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", fedRateDecimal],
72
- ["state_credit_rate", `1.00 (${stateCode} full credit)`],
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: `State Return (${stateCode}-1120-ST)`, line: "PTE election line items", field: "pte_election_status" },
85
- { doc: "Parser-injected", line: `state_pte_lookup[${stateCode}]`, field: "state_credit_rate, pte_deadline" },
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, _h;
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
- // ═══ RAW SAVINGS RANGE — backend-authoritative when available ═══
50
+ // ═══ SAVINGS RANGE — backend-authoritative when available ═══
51
51
  const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(profile), [profile]);
52
- const rawLo = backendComputePayload
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 rawHi = backendComputePayload
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 : (profile.entity === "C-Corporation" ? 21 : (parseFloat((profile.federalRate || "24").replace("%", "")) || 24));
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, fedRatePct: fedRatePct, stateRatePct: stateRatePct, stateCode: ((_h = profile.states) === null || _h === void 0 ? void 0 : _h[0]) || "IL" }),
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 = profile.entity === "C-Corporation" ? 0.21 : parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
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.80), 0), hi: Math.max(Math.round(hsaSavings * 1.15), 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 CatalogFieldDef {
2
- label?: string;
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 CatalogEntry {
9
+ export interface DocumentCatalogEntry {
10
10
  sections: CatalogSection[];
11
- fields: Record<string, CatalogFieldDef>;
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
- // documentFieldCatalog per-documentType section/field metadata for the Review modal.
3
- // Sections group extracted fields into labeled categories (Revenue, Expenses, etc.).
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
- // ── Profit & Loss ──
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: "Operating Expenses",
20
- fields: [
21
- "officer_compensation", "salaries_wages_staff", "employee_benefits",
22
- "payroll_taxes_employer", "employer_retirement_contribution",
23
- "rent_expense", "utilities", "software_subscriptions",
24
- "professional_fees", "advertising_marketing", "travel",
25
- "business_meals", "office_supplies", "insurance_nonhealth",
26
- "repairs_maintenance", "bank_fees", "contract_labor",
27
- "mortgage_interest", "business_interest_nonmortgage",
28
- "depreciation_expense", "amortization_expense", "other_expenses",
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
- total_revenue: { label: "Total Revenue", sourceRef: "Line 1a" },
36
- cost_of_goods_sold: { label: "Cost of Goods Sold", sourceRef: "Line 2" },
37
- gross_profit: { label: "Gross Profit", sourceRef: "Computed" },
38
- officer_compensation: { label: "Officer Compensation", sourceRef: "Line 7" },
39
- salaries_wages_staff: { label: "Wages & Salaries", sourceRef: "Line 13" },
40
- employee_benefits: { label: "Employee Benefits", sourceRef: "" },
41
- payroll_taxes_employer: { label: "Payroll Taxes", sourceRef: "" },
42
- employer_retirement_contribution: { label: "Retirement Contributions", sourceRef: "" },
43
- rent_expense: { label: "Rent / Lease", sourceRef: "Line 15" },
44
- utilities: { label: "Utilities", sourceRef: "" },
45
- software_subscriptions: { label: "Software & Subscriptions", sourceRef: "" },
46
- professional_fees: { label: "Professional Fees", sourceRef: "Line 17" },
47
- advertising_marketing: { label: "Advertising & Marketing", sourceRef: "" },
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
- // ── Balance Sheet ──
67
- balance_sheet: {
38
+ profit_loss: {
68
39
  sections: [
69
40
  {
70
- head: "Assets",
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: "Liabilities",
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: "Equity",
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
- cash_and_equivalents: { label: "Cash & Equivalents", sourceRef: "Line 1" },
99
- accounts_receivable: { label: "Accounts Receivable", sourceRef: "Line 2" },
100
- allowance_for_doubtful_accounts: { label: "Allowance for Doubtful Accts", sourceRef: "" },
101
- prepaid_expenses: { label: "Prepaid Expenses", sourceRef: "" },
102
- inventory: { label: "Inventory", sourceRef: "Line 3" },
103
- total_current_assets: { label: "Total Current Assets", sourceRef: "" },
104
- property_equipment_gross: { label: "Property & Equipment (Gross)", sourceRef: "" },
105
- accumulated_depreciation: { label: "Accumulated Depreciation", sourceRef: "" },
106
- property_equipment_net: { label: "Property & Equipment (Net)", sourceRef: "" },
107
- intangible_assets_gross: { label: "Intangible Assets (Gross)", sourceRef: "" },
108
- accumulated_amortization: { label: "Accumulated Amortization", sourceRef: "" },
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
- // ── Federal Tax Return (1120S, 1120, 1065, Schedule C) ──
130
- federal_tax_return: {
67
+ balance_sheet: {
131
68
  sections: [
132
69
  {
133
- head: "Entity & Filing",
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: "Deductions",
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: "Tax Computation",
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
- entity_tax_classification: { label: "Entity Classification", sourceRef: "Form Title" },
170
- ein: { label: "EIN", sourceRef: "Box B" },
171
- date_incorporated: { label: "Date Incorporated", sourceRef: "Box E" },
172
- accounting_method_box: { label: "Accounting Method", sourceRef: "Sch B Q1" },
173
- industry_naics: { label: "NAICS Code", sourceRef: "Box A" },
174
- amended_return_flag: { label: "Amended Return", sourceRef: "Header" },
175
- initial_return_flag: { label: "Initial Return", sourceRef: "Header" },
176
- final_return_flag: { label: "Final Return", sourceRef: "Header" },
177
- gross_receipts_L1a: { label: "Gross Receipts", sourceRef: "Line 1a" },
178
- returns_and_allowances_L1b: { label: "Returns & Allowances", sourceRef: "Line 1b" },
179
- revenue: { label: "Revenue", sourceRef: "Line 1c" },
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
- // ── W-3 (Payroll Summary) ──
205
- w3: {
96
+ schedule_k1_s_corp: {
206
97
  sections: [
207
98
  {
208
- head: "Wages & Withholding",
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: "Benefits & Other",
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
- wages_tips_other_compensation_box1: { label: "Wages, Tips & Compensation", sourceRef: "Box 1" },
226
- federal_income_tax_withheld_box2: { label: "Federal Income Tax Withheld", sourceRef: "Box 2" },
227
- social_security_wages_box3: { label: "Social Security Wages", sourceRef: "Box 3" },
228
- social_security_tax_withheld_box4: { label: "SS Tax Withheld", sourceRef: "Box 4" },
229
- medicare_wages_box5: { label: "Medicare Wages", sourceRef: "Box 5" },
230
- medicare_tax_withheld_box6: { label: "Medicare Tax Withheld", sourceRef: "Box 6" },
231
- social_security_tips_box7: { label: "Social Security Tips", sourceRef: "Box 7" },
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
- // ── Payroll Records ──
240
- payroll_records: {
117
+ schedule_k1_partnership: {
241
118
  sections: [
242
119
  {
243
- head: "Totals",
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: "Employer Costs",
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
- employees: { label: "Number of Employees", sourceRef: "" },
262
- w2_wages_paid_total: { label: "Total W-2 Wages Paid", sourceRef: "" },
263
- total_federal_withholding: { label: "Federal Withholding", sourceRef: "" },
264
- total_ss_withholding: { label: "Social Security Withholding", sourceRef: "" },
265
- total_medicare_withholding: { label: "Medicare Withholding", sourceRef: "" },
266
- employer_fica_match: { label: "Employer FICA Match", sourceRef: "" },
267
- employer_futa_paid: { label: "FUTA Paid", sourceRef: "" },
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
- total_original_cost: { label: "Total Original Cost", sourceRef: "" },
296
- total_accumulated_depreciation: { label: "Accumulated Depreciation", sourceRef: "" },
297
- total_net_book_value: { label: "Net Book Value", sourceRef: "" },
298
- fixed_asset_additions_current_year: { label: "Current Year Additions", sourceRef: "" },
299
- qualifying_asset_cost: { label: "Qualifying Asset Cost", sourceRef: "≤20yr life" },
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
- // ── State Tax Return ──
307
- state_tax_return: {
153
+ payroll_records: {
308
154
  sections: [
309
155
  {
310
- head: "Filing Summary",
311
- fields: ["tax_type_by_state", "state_nexus_type", "state_apportionment_method"],
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
- tax_type_by_state: { label: "Tax Type", sourceRef: "" },
324
- state_nexus_type: { label: "Nexus Type", sourceRef: "" },
325
- state_apportionment_method: { label: "Apportionment Method", sourceRef: "" },
326
- apportionment_factor: { label: "Apportionment Factor", sourceRef: "" },
327
- state_taxable_income: { label: "State Taxable Income", sourceRef: "" },
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
- // ── Form 4562 (Depreciation & Amortization) ──
336
- form_4562: {
168
+ form_1099_nec_summary: {
337
169
  sections: [
338
170
  {
339
- head: "Section 179",
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
- section_179_max_amount_L1: { label: "§179 Maximum Amount", sourceRef: "Line 1" },
364
- section_179_cost_placed_L2: { label: "§179 Cost of Property", sourceRef: "Line 2" },
365
- dollar_limitation_L5: { label: "Dollar Limitation", sourceRef: "Line 5" },
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
- // ── Form 8889 (HSA) ──
380
- form_8889: {
181
+ state_tax_return: {
381
182
  sections: [
382
183
  {
383
- head: "Coverage & Contributions",
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
- hdhp_coverage_L1: { label: "HDHP Coverage", sourceRef: "Line 1" },
400
- hsa_contributions_L2: { label: "HSA Contributions", sourceRef: "Line 2" },
401
- age_55_catchup_contribution_L3: { label: "Age 55+ Catch-Up", sourceRef: "Line 3" },
402
- employer_contributions_L9: { label: "Employer Contributions", sourceRef: "Line 9" },
403
- deductible_hsa_contributions_L13: { label: "Deductible HSA Contributions", sourceRef: "Line 13" },
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paro.io/expert-shared-components",
3
- "version": "1.14.74",
3
+ "version": "1.14.75",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {