关于 tax-calculation
tax-calculation 是面向电商团队的税务计算实施指南,涵盖美国销售税与欧盟 VAT。它按平台和集成方式说明税务配置、实时结账计算及交易记录处理。
主要功能
- 01按销售税关联判断征税地区
- 02提供 Shopify、WooCommerce 等配置步骤
- 03介绍 TaxJar、Avalara 和 Stripe Tax
- 04说明欧盟 VAT 与反向征税
- 05指导付款后提交及退款作废税务交易
适用场景
- 01拓展至有税务义务的新地区
- 02替换需要频繁维护的手动税率
- 03在付款确认前展示准确税额
- 04处理欧盟 B2B 跨境 VAT
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill tax-calculation安装后在 Claude Code 中输入/tax-calculation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/avalara-avatax-integration-with-estimate/criteria.jsontask.mdevals/eu-vat-b2b-reverse-charge-and-vies-valid/criteria.jsontask.mdevals/taxjar-us-checkout-integration-with-cach/criteria.jsontask.md详细介绍
税费计算
概述
在结账时准确计算税费是法律要求,而非优化选项。在美国,有超过 13,000 个征税辖区。欧盟 VAT 规则要求按客户所在地的 VAT 税率收费。计算错误会导致少收税款(你必须承担这笔欠款)或多收税款(需要退款并引发客户投诉)。所有主流平台都内置了税费计算功能,或直接集成 TaxJar 和 Avalara,无需自定义代码即可正确处理税费。
何时使用此技能
- 当你将销售业务拓展到有纳税关联义务的州或国家/地区时
- 当手动设置税率导致合规问题或需要不断更新时
- 当实施欧盟 VAT 合规(OSS/IOSS 注册)时
- 当需要在客户确认付款前显示准确税费时
核心说明
步骤 1:配置税费前先了解纳税关联
你只需要在存在纳税关联(纳税义务)的辖区收税。
美国销售税纳税关联:
- 实体关联:你在某个州有员工、仓库或办公室
- 经济关联:大多数州的门槛为年销售额达到 100,000 美元,或向该州客户完成 200 笔交易(加利福尼亚州和得克萨斯州的门槛为 500,000 美元)
- 配置前请核查各州当前的门槛——门槛会变化
欧盟 VAT:
- 总部位于欧盟的卖家必须对所有面向欧盟客户的销售按客户所在国家/地区的税率收取 VAT
- 非欧盟卖家的欧盟 B2C 年销售额超过 10,000 欧元后,必须注册欧盟 VAT(通过 OSS 方案)
- 欧盟内部的 B2B 销售:适用反向征收机制——由买家通过自行申报处理 VAT
步骤 2:在平台上设置税费计算
Shopify
选项 A:Shopify 内置税费功能(推荐美国商店使用)
- 前往 Settings → Taxes and duties
- 在 Tax regions 下,选择与你存在纳税关联的地区
- 对于美国:Shopify 会根据客户的收货地址,自动按正确的州、县和市税率计算税费——基本的美国税务合规无需第三方服务
- 如果所在州要求对运费征税,请启用 Charge tax on shipping(各州规定不同)
- 如需设置商品级免税(例如,宾夕法尼亚州对服装免税):前往 Products → [Product] → Tax,设置适当的税务类别或创建自定义税务覆盖规则
选项 B:Stripe Tax(通过 Shopify + Stripe)
Shopify 内置税费功能对美国的支持很完善。要满足国际 VAT 合规要求,可通过 Shopify 应用集成安装 Stripe Tax。
选项 C:TaxJar 或 Avalara(适用于复杂的多辖区需求)
- 从 Shopify App Store 安装 TaxJar 或 Avalara AvaTax
- 按照应用的设置向导操作:连接到你的 Shopify 商店,输入存在纳税关联的州,并配置商品税务类别
- 该应用会在结账时用自己的实时计算取代 Shopify 的内置税费计算
- 已确认的交易会自动发送到 TaxJar/Avalara,以生成申报报告
WooCommerce
选项 A:WooCommerce 内置税务功能
- 前往 WooCommerce → Settings → Tax 并启用税费计算
- 设置商店的基本地址(这会影响适用的税率)
- 前往 Tax → Standard rates,手动输入各州/国家或地区的税率
- 限制:手动设置的税率不会自动更新;为确保合规,请使用 TaxJar 或 Avalara
选项 B:TaxJar(推荐用于美国合规)
- 在 taxjar.com 注册并获取 API 令牌
- 安装 TaxJar for WooCommerce 插件(免费,可从 WordPress.org 获取)
- 前往 WooCommerce → TaxJar 并输入 API 令牌
- 启用 Automatic tax calculation — TaxJar 会根据你的纳税关联州和客户地址,在结账时实时计算正确的税率
- 启用 Transaction sync — 已完成的订单会自动发送到 TaxJar,用于生成申报报告
选项 C:Avalara AvaTax
- 在 avalara.com 注册并在 AvaTax 中创建公司
- 安装 Avalara AvaTax for WooCommerce 插件
- 输入 Avalara 控制面板中的 Account ID、License Key 和 Company Code
- 启用税费计算和交易记录
BigCommerce
- 前往 Store Setup → Tax
- BigCommerce 内置了适用于基本美国税率的税费计算功能
- 如需全面合规:前往 Store Setup → Tax → Tax Provider,并连接 Avalara AvaTax 或 TaxJar
- 按照服务提供商的 BigCommerce 设置指南操作 — 两者都提供原生集成,可用实时合规计算替代内置税务引擎
BigCommerce 上的欧盟 VAT: 在 Store Setup → Tax → VAT 下启用 VAT by country,以符合欧盟 VAT 要求。如需全面符合 OSS 要求,请使用 Avalara 的欧盟 VAT 模块。
自定义/无头架构
使用 Stripe Tax(最简单)或直接调用 TaxJar/Avalara API:
选项 A:Stripe Tax(推荐用于基于 Stripe 的商店)
// Enable Stripe Tax on the PaymentIntent — Stripe calculates and collects tax automatically
const paymentIntent = await stripe.paymentIntents.create({
amount: orderSubtotalCents, // Subtotal only — Stripe adds tax
currency: 'usd',
automatic_payment_methods: { enabled: true },
// Stripe Tax configuration
// See: https://stripe.com/docs/tax/integration
});
// Or use Stripe Checkout with automatic_tax enabled:
const session = await stripe.checkout.sessions.create({
line_items: lineItems,
mode: 'payment',
automatic_tax: { enabled: true }, // Stripe Tax handles calculation
customer_details: { address: { country: customerCountry }, address_source: 'shipping' },
success_url: `${domain}/success`,
cancel_url: `${domain}/cart`,
});
在 Stripe Dashboard → Tax → Configure 下配置 Stripe Tax — 设置你的税务登记号,以及各产品类别的税务处理方式。
选项 B:TaxJar API
const Taxjar = require('taxjar');
const taxjar = new Taxjar({ apiKey: process.env.TAXJAR_API_KEY });
async function calculateTaxForOrder({ fromAddress, toAddress, lineItems, shippingCost }) {
const response = await taxjar.taxForOrder({
from_country: fromAddress.country,
from_zip: fromAddress.zip,
from_state: fromAddress.state,
to_country: toAddress.country,
to_zip: toAddress.zip,
to_state: toAddress.state,
to_city: toAddress.city,
amount: lineItems.reduce((sum, i) => sum + i.unit_price * i.quantity, 0),
shipping: shippingCost,
line_items: lineItems.map(item => ({
id: item.id,
quantity: item.quantity,
unit_price: item.unit_price,
product_tax_code: item.tax_code ?? null, // e.g., '20010' for general goods
})),
});
return {
totalTax: response.tax.amount_to_collect,
taxRate: response.tax.rate,
hasNexus: response.tax.has_nexus, // false = no tax to collect
breakdown: response.tax.breakdown,
};
}
// After order is confirmed, commit the transaction for filing reports
async function commitTaxTransaction(order) {
await taxjar.createOrder({
transaction_id: order.id,
transaction_date: new Date().toISOString().split('T')[0],
from_country: WAREHOUSE_ADDRESS.country,
from_zip: WAREHOUSE_ADDRESS.zip,
from_state: WAREHOUSE_ADDRESS.state,
to_country: order.shippingAddress.country,
to_zip: order.shippingAddress.zip,
to_state: order.shippingAddress.state,
amount: order.subtotal,
shipping: order.shippingCost,
sales_tax: order.taxAmount,
line_items: order.lineItems.map(item => ({
id: item.id,
quantity: item.quantity,
unit_price: item.price,
sales_tax: item.taxAmount,
})),
});
}
欧盟 VAT 反向征收(欧盟境内跨境 B2B 交易):
对于欧盟 B2B 交易,在适用零税率前,通过欧盟 VIES 服务验证买方的 VAT 号码:
async function validateEUVATNumber(vatNumber) {
const countryCode = vatNumber.slice(0, 2);
const number = vatNumber.slice(2);
const res = await fetch(
`https://ec.europa.eu/taxation_customs/vies/rest-api/ms/${countryCode}/vat/${number}`
);
const data = await res.json();
return data.isValid === true;
}
第 3 步:订单完成后提交税务交易
税费计算服务要求你在确认付款后“提交”每笔交易 — 这会将交易记录到申报报告中。Shopify/WooCommerce 的 TaxJar 和 Avalara 应用会自动完成此操作。对于自定义集成,请在确认订单后(而不是付款前)调用创建/提交 API。
最佳实践
- 绝不要将税率硬编码 — 税率经常变化;请使用 TaxJar、Avalara、Stripe Tax 或平台内置的税务引擎
- 在结账时实时计算税费 — 在客户确认付款前显示确切的税额;付款时才变化的预估税额会降低客户信任度并导致购物车放弃
- 在付款后而非付款前提交交易 — 只有已提交的交易才会出现在申报报告中;请在确认付款后提交
- 退款时作废税务交易 — 退款时,请在 TaxJar/Avalara 中作废对应的税务交易,以免申报时重复计入
- 妥善处理税务 API 错误 — 如果税务 API 不可用,请应用备用税率(美国平均约为 8.5%),而不是阻止结账
常见问题
| 问题 | 解决方案 |
|---|---|
| 已计算税款,但未提交到申报 API | 确保已配置平台集成(TaxJar 插件、Avalara 插件),使其在订单完成时自动提交;在服务提供商的交易仪表板中进行确认 |
| 欧盟跨境 B2B 销售被收取增值税 | 在应用反向征税前,通过 VIES 验证增值税号码;如果验证失败,则按 B2C 收取增值税 |
| 税务 API 使结账流程增加了 500ms | TaxJar 和 Avalara 的 Shopify/WooCommerce 插件均内置了缓存;对于自定义构建,可按目的地邮政编码和购物车总额缓存税费估算结果 1 小时 |
| Shopify 对某个州收取了错误的税率 | 确认“设置 → 税费”中的关联州列表正确且为最新;检查是否错误配置了商品级税费覆盖设置 |
| 安装 TaxJar 后 WooCommerce 显示“0 tax” | 确认 TaxJar API 密钥正确;查看插件状态页面,检查是否有 API 错误;确认已在 TaxJar 仪表板中配置仓库地址和关联州 |
相关技能
- @checkout-flow-optimization
- @multi-currency
- @order-processing-pipeline
- @stripe-integration
- @tax-compliance-automation