tax-prep
先確認帳已結清,再準備季度預估稅款或 1099 資料包給會計師
中文翻譯
--- name: tax-prep description: 用兩個環節的鏈條準備稅務資料:先由 month-end-prep 確認帳已經結清、對帳完畢,再由 tax-season-organizer 用這些結清後的數字,算出季度預估稅款,或產出年底的 1099-NEC 名單和給會計師的資料包。需要總帳(MYOB、NetSuite、QuickBooks、Xero 或 Zoho Books);有連上 Gusto、PayPal、Stripe 就會用,沒有就改用 CSV 上傳。稅額計算採美國聯邦稅制;非美國企業只會拿到結清帳務的資料包。產出是給 CPA 的準備資料,不是稅務建議,也不會報稅。觸發詞包括「quarterly taxes」「estimated tax payment」「how much should I set aside」「1099s」「1099-NEC」「W-9s」「year-end tax prep」「get my books ready for my accountant」,任何暗示報稅期限快到的說法,或聽起來是在擔心稅單的淨利、YTD 收入問題。如果老闆說該期間的帳已經結清,就直接導向 tax-season-organizer。 allowed-tools: Read, WebFetch --- 跑稅務這條鏈。先處理帳,再處理稅務資料。這個依賴關係不能省,因為用沒對完帳的數字算出來的預估稅款,老闆是會直接寄給 IRS 的。 解析參數: - `--mode`(預設:依日期推斷,10 月到 1 月預設為 `both`,其他時間為 `quarterly`):`quarterly`、`1099` 或 `both` - `--year`(預設:今年) **開場:** 每一份交付物的開頭都要寫「Prepared for review by your accountant — not tax advice.」 **一定要有總帳**:MYOB、NetSuite、QuickBooks、Xero 或 Zoho Books,連了哪個用哪個(`../../shared/connector-neutrality.md`)。沒有的話,開始之前先請對方提供 P&L 匯出檔,以及逐個收款對象(payee)層級的付款匯出檔。 **在 Step 1 之前先檢查國家。** 從 `## Business context` 區塊讀 `Country`(`../../shared/currency-and-locale.md`)。Step 2 的稅額計算是美國聯邦稅制。如果企業不在美國,用一句話說明,照樣跑 Step 1 把帳結清,然後交給老闆一份給會計師的結清帳務資料包,取代美國的預估稅款或 1099 名單。不要跑美國那套計算。 **Expensify 連上時是唯讀的,而且多提供一樣有用的東西:** 沒有附收據的支出。把這個總額和筆數跟預估稅款一起列出來。沒有佐證的扣除額是會計師第一個會問的項目,現在找比 4 月才找便宜得多。 ## Step 0:確認模式 如果沒給 `--mode`,用一句話說出推斷的模式,讓老闆可以改:「現在是 1 月下旬,所以我會準備 Q4 預估稅款和你的 1099 名單。想換別的嗎?」不要做需求訪談,老闆都打 /tax-prep 了。 ## Step 1:先處理帳(month-end-prep) 針對稅務工作依賴的期間跑 `month-end-prep`:`quarterly` 是年初到最近一個完整季度,`1099` 是整個稅務年度。 **重新結帳之前先驗證。** 檢查範圍內的每個月是不是已經結清:對完帳、沒有未處理的標記項目、資料包也產出了。 - **已經結清** → 只驗證。確認對帳結果還成立、確認結帳之後沒有再過帳,然後用一句話說:「3 月到 6 月已經結清,而且對帳結果依然成立。接著做預估稅款。」老闆上週才結完的月份,不要整個重跑一遍。 - **還沒結清** → 對未結清的期間跑結帳。`month-end-prep` 自己的 Step 6 簽核關卡照常有效。 - **部分結清** → 只結還沒結的月份,其他的驗證就好。 **輸入:** 範圍內的期間。**輸出:** 對完帳的 YTD 淨利、對完帳的廠商與承包商付款明細,以及還沒解決的項目清單。 ### Step 2 之前的關卡 在範圍內的帳還沒定案之前,什麼都不要算。如果還有未結項目,說明是哪些,以及它們會對稅額造成什麼影響: > 「還有 11 筆交易沒分類,合計 USD 6,800。在這些入帳科目確定之前,你的預估稅款可能會上下差大約 USD 1,500。請先分類,或叫我直接繼續,我會把它寫成假設。」 如果老闆還是選擇繼續,那就要在交付物裡寫成明確的假設,不是塞在註腳裡。 ## Step 2:稅務資料(tax-season-organizer) 用選定的模式跑 `tax-season-organizer`,只用 Step 1 對完帳的數字。 - **輸入:** 結清帳務後的 YTD 淨利(季度路徑),或對完帳的 payee 層級付款明細(1099 路徑)。 - **輸出:** 附到期日和完整假設表的預估稅款明細,或是附 W-9 狀態的 1099-NEC 候選名單和缺 W-9 的待辦清單,或兩者都有。 - **關卡:** 產出資料包沒有關卡。但永遠不會替人報稅。 兩個模式都跑時,先做 1099 準備,因為它產生的待辦事項期限最早,然後再做季度預估。 要說明數字是從哪來的:「這份預估稅款是以 6 月 30 日結清的帳為基礎,不是原始的 register。」就是這句話讓這條鏈值得跑。 範例,Okonkwo Mechanical:「Q3 預估稅款:USD 7,240,9 月 15 日到期。以 6 月結帳時 YTD 淨利 USD 92,000 為基礎。假設稅率級距為 22%、組織型態為獨資,這兩點請跟你的會計師確認。」 ## 不要做的事 - **不要用沒對完帳的數字算稅額。** 這整件事就是為什麼要做成一條鏈。 - **不要重新結一個已經結清的月份。** 驗證一下就往下走。 - **不要給稅務建議。** 每一份輸出都是給 CPA 的準備資料,標題裡也要這樣寫。 - **不要藏任何假設。** 稅率級距、企業型態、排除的州稅、沒套用的扣除額,全部列出來,讓會計師有可以調整的地方。 - **不要自動合併 payee。**「John Smith」和「John A. Smith」要標記出來交給人判斷。 - **永遠不要替人報稅。** ## 輸出 **依老闆儲存的輸出偏好交付會計師資料包,絕對不要預設產出 markdown 檔。** 檢查 `## Business context` 區塊裡的 `Output preference`(共用的風格指南規則,`../../shared/artifact-style.md`): - **Visual artifact(預設):** 用 house style 把資料包封面渲染成 HTML 頁面,預估稅款當主要的數字卡並附到期日,假設表和會計師檢查清單各自成列。開頭放「not tax advice」那句。資料包裡的各份文件維持原本的格式。 - **docx / md / notion / canva 偏好:** 用該格式交付同樣的內容:DOCX 或 markdown 檔、透過 connector 建立的 Notion 頁面(要有指定的目的地,絕不覆寫既有頁面),或透過 Canva connector 建立的 Canva Doc(每次執行都建新設計、用日期命名,表格改成清單)。如果 Notion 或 Canva 沒連上,就退回 visual artifact,並說明是因為這個原因。 - **Best for skill:** 用 visual artifact,因為這份輸出是資料交給會計師之前,給老闆看的檢閱頁。 最後附上給會計師的下一步清單:要收的缺漏 W-9、要驗證的假設、可能讓數字變動的未結帳務項目,以及要趕的期限。 然後簡短收尾:資料包準備好了,可以交給會計師,是以結清的帳為基礎。自然的下一步是「cash forecast」,`cash-flow-snapshot` 會看預估稅款到期日那天付不付得出來。另外相關的還有:「close the month」(`/close-month`),讓下一季的預估稅款繼續建立在對完帳的數字上;以及「build me a report」(`report-builder`),用來長期追蹤預留的稅款。最多提三個,這次對話裡老闆已經拒絕過的就跳過。 ## 使用沒列出來的工具 這個 skill 裡提到的 connector 是測試過的路徑,不是硬性限制。如果老闆想讓這個流程用一個沒連上或沒列出來的工具,就提議 `build-connector`:它會先查 connector 目錄,沒有的話再透過 Zapier 連接,絕不直接對原始 API 手刻。連線建好之後,這個工具就跟其他選用的 connector 一樣加入這個 skill,並遵守同樣的核准關卡。
英文原文
--- name: tax-prep description: Prepares tax materials as a two-link chain — month-end-prep confirms the books are closed and reconciled first, then tax-season-organizer calculates the quarterly estimated payment or builds the year-end 1099-NEC list and accountant packet from those closed numbers. Requires a ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books); uses Gusto, PayPal, and Stripe when connected, else CSV upload. US federal tax math; a non-US business gets the closed-books packet. Prep material for a CPA, never tax advice, nothing filed. Trigger on "quarterly taxes," "estimated tax payment," "how much should I set aside," "1099s," "1099-NEC," "W-9s," "year-end tax prep," "get my books ready for my accountant," any phrasing that suggests a tax deadline is coming, or a question about net profit or YTD income that sounds like worry about a tax bill. An owner who says the period's books are already closed routes to tax-season-organizer directly. allowed-tools: Read, WebFetch --- Run the tax chain. Books first, then tax materials. The dependency is not optional — an estimate calculated on unreconciled books is a number the owner will send to the IRS. Parse arguments: - `--mode` (default: infer from the date — Oct through Jan defaults to `both`, otherwise `quarterly`) — `quarterly`, `1099`, or `both` - `--year` (default: current year) **Framing:** open every deliverable with "Prepared for review by your accountant — not tax advice." **A ledger is required** — MYOB, NetSuite, QuickBooks, Xero, or Zoho Books, whichever is connected (`../../shared/connector-neutrality.md`). Without one, ask for a P&L export and a payee-level payment export before starting. **Check the country before Step 1.** Read `Country` from the `## Business context` block (`../../shared/currency-and-locale.md`). The tax math in Step 2 is US federal. If the business is not in the US, say so in one line, run Step 1 so the books are closed, and hand the owner the closed-books packet for their accountant in place of a US estimate or 1099 list. Do not run the US calculation. **Expensify, when connected, is read-only and adds one thing worth having:** the expenses with no receipt attached. Surface that total and count alongside the estimate — an unsubstantiated deduction is the item the accountant will ask about first, and it is cheaper to find now than in April. ## Step 0 — Confirm the mode If `--mode` was not given, state the inferred mode in one line and let the owner redirect: "It's late January, so I'll prepare both the Q4 estimate and your 1099 list. Want something different?" Do not run a discovery interview — the owner typed /tax-prep. ## Step 1 — Books first (month-end-prep) Run `month-end-prep` over the periods the tax work depends on: year-to-date through the last completed quarter for `quarterly`, the full tax year for `1099`. **Verify before you re-close.** Check whether each month in scope is already closed — reconciled, no open flagged items, packet produced. - **Already closed** → verify only. Confirm the reconciliation stands, confirm nothing was posted after the close, and say so in one line: "March through June are already closed and still reconcile. Moving to the estimate." Do not re-run the full close on a month the owner finished last week. - **Not closed** → run the close for the open periods. `month-end-prep`'s own Step 6 sign-off gate holds. - **Partially closed** → close only the open months and verify the rest. **In:** the periods in scope. **Out:** reconciled YTD net income, reconciled vendor and contractor payment detail, and a list of anything still unresolved. ### The gate before Step 2 Do not calculate anything until the books in scope are settled. If items are still open, say what they are and what they do to the tax number: > "Eleven transactions are still uncategorized, totalling USD 6,800. Until those are coded, your estimate could be off by roughly USD 1,500 either way. Categorize them, or tell me to proceed and I'll state it as an assumption." If the owner proceeds anyway, that becomes a stated assumption in the deliverable — not a footnote. ## Step 2 — Tax materials (tax-season-organizer) Run `tax-season-organizer` in the chosen mode, using only Step 1's reconciled figures. - **In:** closed-books YTD net income (quarterly path) or reconciled payee-level payment detail (1099 path). - **Out:** the estimated-payment breakdown with due date and full assumptions table, or the 1099-NEC candidate list with W-9 status and the missing-W-9 action list — or both. - **Gate:** none for producing the packet. Nothing is filed, ever. When both modes run, do 1099 prep first — it generates the action items with the earliest deadline — then the quarterly estimate. Say where the number came from: "This estimate is built on closed books through June 30, not the raw register." That sentence is what makes the chain worth running. Example, Okonkwo Mechanical: "Q3 estimate: USD 7,240, due September 15. Built on USD 92,000 YTD net through the June close. Assumes a 22% bracket and sole proprietorship — confirm both with your accountant." ## What not to do - **Do not calculate a tax number off unreconciled books.** That is the entire reason this is a chain. - **Do not re-close a month that is already closed.** Verify it and move on. - **Do not give tax advice.** Every output is prep material for a CPA and says so in its header. - **Do not hide an assumption.** Bracket, business type, excluded state taxes, deductions not applied — list them all so the accountant has the levers. - **Do not merge payees automatically.** "John Smith" and "John A. Smith" get flagged for a human. - **Do not file anything, ever.** ## Output **Deliver the accountant packet per the owner's stored output preference — never default to a markdown file.** Check the `## Business context` block's `Output preference` (shared style guide rule, `../../shared/artifact-style.md`): - **Visual artifact (the default):** render the packet cover as an HTML page in the house style — the estimate as the lead stat tile with its due date, the assumptions table, and the accountant checklist as rows. Open with the not-tax-advice line. The packet documents themselves keep their formats. - **docx / md / notion / canva preference:** deliver the same content in that form — a DOCX or markdown file, a Notion page created via the connector (named destination, never overwriting), or a Canva Doc created via the Canva connector (a new design each run, named with the date; tables become lists); fall back to the visual artifact if Notion or Canva is not connected — and say that is why. - **Best for skill:** use the visual artifact — this output is a review page for the owner before it goes to the accountant. End with a next-steps checklist for the accountant: missing W-9s to collect, assumptions to verify, open book items that could move the number, and the deadlines to hit. Then one short close: the packet is ready for the accountant, built on closed books. The natural next step is "cash forecast" — `cash-flow-snapshot` shows whether the estimated payment clears on its due date. Also nearby: "close the month" (`/close-month`) to keep the next quarter's estimate on reconciled numbers, and "build me a report" (`report-builder`) to track the tax set-aside over time. Offer at most three, and skip any offer the owner already declined this session. ## Using a tool that isn't listed The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer `build-connector` — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.