@paro.io/expert-shared-components 1.14.73 → 1.14.74

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.
@@ -80,6 +80,13 @@ 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]);
83
90
  const [expanded, setExpanded] = (0, react_1.useState)(true);
84
91
  return (react_1.default.createElement(TaxAxisCard_1.TaxAxisCard, null,
85
92
  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%", "22%", "24%", "32%", "35%", "37%"];
45
+ const FEDERAL_RATE_OPTIONS = ["10%", "12%", "21%", "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 = parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
113
+ const fedRate = entity === "C-Corporation" ? 0.21 : 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: "Ironclad Systems, Inc.",
63
+ cpaName: "Amar",
64
64
  entity: "C-Corporation",
65
- industry: "Professional Services",
66
- revenue: "",
67
- netIncome: "",
68
- ownerComp: "",
69
- employees: "",
70
- year: "2026",
71
- states: [],
65
+ industry: "Technology",
66
+ revenue: "2150000",
67
+ netIncome: "410000",
68
+ ownerComp: "405000",
69
+ employees: "11",
70
+ year: "2023",
71
+ states: ["GA"],
72
72
  filingStatus: "MFJ",
73
- age: "",
73
+ age: "45",
74
74
  sstb: "No",
75
75
  ownsRealEstate: "No",
76
76
  itemizesDeductions: "No",
77
- singleOwner: "Yes",
78
- equipmentPurchased: "0",
77
+ singleOwner: "No",
78
+ equipmentPurchased: "87000",
79
79
  realEstateValue: "0",
80
80
  capitalGains: "0",
81
- federalRate: "24%",
82
- stateRate: "",
81
+ federalRate: "22%",
82
+ stateRate: "5.39",
83
83
  taxDataYears: "1 year",
84
84
  riskTolerance: "3",
85
85
  overtimePremium: "0",
86
86
  tipIncomePct: "0",
87
87
  retirementContributions: "0",
88
- hdhpEnrolled: "No",
88
+ hdhpEnrolled: "Yes",
89
89
  hsaContributions: "0",
90
90
  wotcHires: "No",
91
91
  familyEmployed: "No",
@@ -2,6 +2,9 @@ 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;
5
8
  }
6
- export declare function SampleAnalysisPreview({ sectionNum, eligibleCount }: SampleAnalysisPreviewProps): React.JSX.Element;
9
+ export declare function SampleAnalysisPreview({ sectionNum, eligibleCount, fedRatePct, stateRatePct, stateCode }: SampleAnalysisPreviewProps): React.JSX.Element;
7
10
  export {};
@@ -26,7 +26,9 @@ 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 }) {
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);
30
32
  return (react_1.default.createElement("div", { style: { marginBottom: 24 } },
31
33
  react_1.default.createElement("div", { style: { display: "flex", alignItems: "baseline", gap: 10, marginBottom: 6 } },
32
34
  react_1.default.createElement("span", { style: { fontSize: 11, fontWeight: 700, color: theme_1.T.accent, fontFamily: theme_1.T.body } }, sectionNum),
@@ -62,12 +64,12 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount }) {
62
64
  react_1.default.createElement("span", { style: { color: theme_1.T.orange, fontWeight: 700 } }, "\u00B7 illustrative")),
63
65
  react_1.default.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr auto", gap: "6px 16px", fontSize: 11, fontFamily: theme_1.T.mono, marginBottom: 6 } }, [
64
66
  ["state_income_attributable_to_owner", "$1,750,000"],
65
- ["state_rate", "0.0495 (IL)"],
67
+ ["state_rate", `${stateRateDecimal} (${stateCode})`],
66
68
  ["filing_status", "mfj"],
67
69
  ["MAGI_PROXY: net_income", "$1,750,000"],
68
70
  ["EFFECTIVE_SALT_CAP", "$0 (fully phased out by MFJ income)"],
69
- ["federal_marginal_rate", "0.24"],
70
- ["state_credit_rate", "1.00 (IL full credit)"],
71
+ ["federal_marginal_rate", fedRateDecimal],
72
+ ["state_credit_rate", `1.00 (${stateCode} full credit)`],
71
73
  ["pte_tax_paid", "$86,625"],
72
74
  ].map(([k, v]) => (react_1.default.createElement(react_1.Fragment, { key: k },
73
75
  react_1.default.createElement("span", { style: { color: theme_1.T.text3 } }, k),
@@ -79,8 +81,8 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount }) {
79
81
  { doc: "Form 1120-S", line: "Line 12 \u00B7 Taxes and licenses", field: "pte_tax_paid" },
80
82
  { doc: "Schedule K-1", line: "Box 16, Code A \u00B7 State tax credit info", field: "state_credit_pass_through" },
81
83
  { doc: "Form 1040 Sch A", line: "Line 5a \u00B7 State and local income tax", field: "salt_paid" },
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" },
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" },
84
86
  ].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 } },
85
87
  react_1.default.createElement("span", { style: { color: theme_1.T.text, fontWeight: 600 } }, s.doc),
86
88
  react_1.default.createElement("span", { style: { color: theme_1.T.text2, fontFamily: theme_1.T.mono, fontSize: 10 } }, s.line),
@@ -102,13 +104,20 @@ function SampleAnalysisPreview({ sectionNum, eligibleCount }) {
102
104
  react_1.default.createElement("div", { style: { fontSize: 11, color: theme_1.T.text2, fontFamily: theme_1.T.mono, lineHeight: 1.6 } },
103
105
  "State PTE election form",
104
106
  react_1.default.createElement("br", null),
105
- "(IL: Schedule B, Form IL-1120-ST)",
107
+ "(",
108
+ stateCode,
109
+ ": Schedule B, Form ",
110
+ stateCode,
111
+ "-1120-ST)",
106
112
  react_1.default.createElement("br", null),
107
113
  "Updated Schedule K-1 (Box 13)"))),
108
114
  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 } },
109
115
  react_1.default.createElement("div", null,
110
116
  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"),
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")),
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")),
112
121
  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")))),
113
122
  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 } },
114
123
  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, _h;
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,19 +47,27 @@ 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
- // ═══ SAVINGS RANGE — backend-authoritative when available ═══
50
+ // ═══ RAW SAVINGS RANGE — backend-authoritative when available ═══
51
51
  const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(profile), [profile]);
52
- const displayLo = backendComputePayload
52
+ const rawLo = 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 displayHi = backendComputePayload
55
+ const rawHi = 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 : (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 : (profile.entity === "C-Corporation" ? 21 : (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
+ }
63
71
  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));
64
72
  const optimizedTax = (_e = backendComputePayload === null || backendComputePayload === void 0 ? void 0 : backendComputePayload.gapBlock.optimizedTax) !== null && _e !== void 0 ? _e : (currentTax - realizedSavings);
65
73
  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);
@@ -168,7 +176,7 @@ function TaxAxisProspectReport({ profile, backendComputePayload, outputPayload,
168
176
  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)
169
177
  || `Including: ${remainingNames.join(", ")}${remaining > 4 ? " and more" : ""}`),
170
178
  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.")))),
171
- react_1.default.createElement(SampleAnalysisPreview_1.SampleAnalysisPreview, { sectionNum: sectionNums.sample, eligibleCount: eligible.length }),
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" }),
172
180
  react_1.default.createElement(ProspectDocuments_1.ProspectDocuments, { sectionNum: sectionNums.documents, requiredDocs: requiredDocs, recommendedDocs: recommendedDocs, conditionalDocs: conditionalDocs }),
173
181
  react_1.default.createElement(ProspectNextSteps_1.ProspectNextSteps, { sectionNum: sectionNums.nextSteps, bizName: bizName, onUpgrade: onUpgrade, onPresent: onPresent, onPrint: handlePrint, onReset: onReset, confirmReset: confirmReset, onConfirmResetChange: setConfirmReset })));
174
182
  }
@@ -48,6 +48,8 @@ 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;
51
53
  return true;
52
54
  });
53
55
  }
@@ -62,7 +64,7 @@ function computeAllStrategies(profile) {
62
64
  const age = parseInt(profile.age || "45") || 45;
63
65
  const hsaExisting = (0, exports.parseNum)(profile.hsaContributions);
64
66
  const retirementExisting = (0, exports.parseNum)(profile.retirementContributions);
65
- const fedRate = parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
67
+ const fedRate = profile.entity === "C-Corporation" ? 0.21 : parseFloat((profile.federalRate || "24").replace("%", "")) / 100 || 0.24;
66
68
  const stateRate = parseFloat(profile.stateRate || "4.95") / 100;
67
69
  const combinedRate = fedRate + stateRate;
68
70
  const seTaxRate = 0.153;
@@ -133,7 +135,7 @@ function computeAllStrategies(profile) {
133
135
  const hsaLimit = 8550;
134
136
  const hsaAdditional = Math.max(hsaLimit - hsaExisting, 0);
135
137
  const hsaSavings = Math.round(hsaAdditional * (combinedRate + 0.0765));
136
- results.set(9, { lo: Math.max(Math.round(hsaSavings * 0.90), 0), hi: Math.max(Math.round(hsaSavings * 1.05), 0),
138
+ results.set(9, { lo: Math.max(Math.round(hsaSavings * 0.80), 0), hi: Math.max(Math.round(hsaSavings * 1.15), 0),
137
139
  sources: [{ doc: "Intake", line: "HSA", value: `$${hsaExisting.toLocaleString()}`, field: "YTD Contributions" }, { doc: "IRS 2026", line: "Rev. Proc.", value: "$8,550", field: "Family Limit" }],
138
140
  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" }] });
139
141
  }
@@ -165,5 +167,11 @@ function computeAllStrategies(profile) {
165
167
  results.set(rank, Object.assign(Object.assign({}, v), { lo: Math.round(v.hi / 3.0) }));
166
168
  }
167
169
  }
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
+ }
168
176
  return results;
169
177
  }
@@ -1,13 +1,18 @@
1
- export interface FieldDef {
2
- label: string;
1
+ export interface CatalogFieldDef {
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 DocumentCatalogEntry {
9
+ export interface CatalogEntry {
10
10
  sections: CatalogSection[];
11
- fields: Record<string, FieldDef>;
11
+ fields: Record<string, CatalogFieldDef>;
12
12
  }
13
- export declare const DOCUMENT_FIELD_CATALOG: Record<string, DocumentCatalogEntry>;
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>;
@@ -1,196 +1,410 @@
1
1
  "use strict";
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.
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.
4
6
  Object.defineProperty(exports, "__esModule", { value: true });
5
7
  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
+ */
6
13
  exports.DOCUMENT_FIELD_CATALOG = {
7
- federal_tax_return: {
14
+ // ── Profit & Loss ──
15
+ profit_loss: {
8
16
  sections: [
17
+ { head: "Revenue", fields: ["total_revenue", "cost_of_goods_sold", "gross_profit"] },
9
18
  {
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"],
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
+ ],
20
31
  },
32
+ { head: "Net Income", fields: ["net_operating_income", "income_tax_provision", "net_income"] },
21
33
  ],
22
34
  fields: {
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" },
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" },
36
64
  },
37
65
  },
38
- profit_loss: {
66
+ // ── Balance Sheet ──
67
+ balance_sheet: {
39
68
  sections: [
40
69
  {
41
- head: "Revenue",
42
- fields: ["total_revenue", "gross_revenue", "cost_of_goods_sold", "gross_profit"],
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
+ ],
43
79
  },
44
80
  {
45
- head: "Operating Expenses",
46
- fields: ["total_expenses", "payroll_expense", "rent_expense", "depreciation", "other_expenses"],
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
+ ],
47
87
  },
48
88
  {
49
- head: "Net Income",
50
- fields: ["net_income", "net_margin"],
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
+ ],
51
95
  },
52
96
  ],
53
97
  fields: {
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" },
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: "" },
65
127
  },
66
128
  },
67
- balance_sheet: {
129
+ // ── Federal Tax Return (1120S, 1120, 1065, Schedule C) ──
130
+ federal_tax_return: {
68
131
  sections: [
69
132
  {
70
- head: "Assets",
71
- fields: ["total_assets", "current_assets", "cash", "accounts_receivable", "fixed_assets"],
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
+ ],
72
139
  },
73
140
  {
74
- head: "Liabilities",
75
- fields: ["total_liabilities", "current_liabilities", "accounts_payable", "long_term_debt"],
141
+ head: "Income",
142
+ fields: [
143
+ "gross_receipts_L1a", "returns_and_allowances_L1b", "revenue",
144
+ "cost_of_goods_sold", "gross_profit", "total_income",
145
+ ],
76
146
  },
77
147
  {
78
- head: "Equity",
79
- fields: ["total_equity", "retained_earnings"],
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
+ ],
158
+ },
159
+ {
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
+ ],
80
166
  },
81
167
  ],
82
168
  fields: {
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" },
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" },
94
202
  },
95
203
  },
96
- schedule_k1_s_corp: {
204
+ // ── W-3 (Payroll Summary) ──
205
+ w3: {
97
206
  sections: [
98
207
  {
99
- head: "Ordinary Income",
100
- fields: ["ordinary_income", "net_rental_income", "interest_income", "dividend_income"],
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
+ ],
101
215
  },
102
216
  {
103
- head: "Deductions & Credits",
104
- fields: ["section_179_deduction", "charitable_contributions", "credits"],
217
+ head: "Benefits & Other",
218
+ fields: [
219
+ "dependent_care_benefits_box10", "nonqualified_plans_box11",
220
+ "owner_w2_comp", "employees",
221
+ ],
105
222
  },
106
223
  ],
107
224
  fields: {
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" },
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" },
115
237
  },
116
238
  },
117
- schedule_k1_partnership: {
239
+ // ── Payroll Records ──
240
+ payroll_records: {
118
241
  sections: [
119
242
  {
120
- head: "Ordinary Income",
121
- fields: ["ordinary_income", "net_rental_income", "guaranteed_payments", "interest_income"],
243
+ head: "Totals",
244
+ fields: [
245
+ "employees", "w2_wages_paid_total",
246
+ "total_federal_withholding", "total_ss_withholding",
247
+ "total_medicare_withholding",
248
+ ],
122
249
  },
123
250
  {
124
- head: "Deductions & Credits",
125
- fields: ["section_179_deduction", "charitable_contributions", "self_employment_earnings"],
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
+ ],
126
258
  },
127
259
  ],
128
260
  fields: {
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" },
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: "" },
136
273
  },
137
274
  },
275
+ // ── Fixed Asset Schedule ──
138
276
  fixed_asset_schedule: {
139
277
  sections: [
140
278
  {
141
- head: "Asset Summary",
142
- fields: ["total_asset_cost", "total_accumulated_depreciation", "total_net_book_value", "bonus_depreciation_taken", "section_179_taken"],
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
+ ],
143
292
  },
144
293
  ],
145
294
  fields: {
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" },
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: "" },
151
304
  },
152
305
  },
153
- payroll_records: {
306
+ // ── State Tax Return ──
307
+ state_tax_return: {
154
308
  sections: [
155
309
  {
156
- head: "Payroll Summary",
157
- fields: ["total_payroll", "owner_compensation", "employee_count", "total_wages", "employer_taxes"],
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
+ ],
158
320
  },
159
321
  ],
160
322
  fields: {
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" },
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: "" },
166
333
  },
167
334
  },
168
- form_1099_nec_summary: {
335
+ // ── Form 4562 (Depreciation & Amortization) ──
336
+ form_4562: {
169
337
  sections: [
170
338
  {
171
- head: "1099-NEC Summary",
172
- fields: ["total_nec_payments", "contractor_count", "largest_single_payment"],
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
+ ],
173
360
  },
174
361
  ],
175
362
  fields: {
176
- total_nec_payments: { label: "Total NEC Payments" },
177
- contractor_count: { label: "Contractor Count" },
178
- largest_single_payment: { label: "Largest Single Payment" },
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: "" },
179
377
  },
180
378
  },
181
- state_tax_return: {
379
+ // ── Form 8889 (HSA) ──
380
+ form_8889: {
182
381
  sections: [
183
382
  {
184
- head: "State Tax",
185
- fields: ["state", "state_taxable_income", "state_tax_owed", "state_effective_rate", "state_credits"],
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
+ ],
186
396
  },
187
397
  ],
188
398
  fields: {
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" },
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" },
194
408
  },
195
409
  },
196
410
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paro.io/expert-shared-components",
3
- "version": "1.14.73",
3
+ "version": "1.14.74",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {