mcpField
C
cogs-tracking-allocation

cogs-tracking-allocation

github.com/finsilabs其他6090 次安装5 天前更新
代码仓库

关于 cogs-tracking-allocation

面向电商运营的销售成本跟踪与分摊指南,帮助商家配置产品成本、到岸成本、会计分录和毛利报告,涵盖常见电商平台。

主要功能

  1. 01按平台配置销售成本
  2. 02录入产品与变体成本
  3. 03分摊到岸成本
  4. 04会计集成配置指南
  5. 05毛利与库存报告

适用场景

  1. 01跟踪产品毛利
  2. 02将运费和关税计入 SKU 成本
  3. 03转向永续成本跟踪
  4. 04检查采购成本差异

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill cogs-tracking-allocation

安装后在 Claude Code 中输入/cogs-tracking-allocation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

tile.json
evals/cogs-cost-ledger-schema-design/
criteria.json
task.md
evals/fifo-and-weighted-average-cost-assignmen/
criteria.json
task.md
evals/landed-cost-allocation-and-variance-anal/
criteria.json
task.md

详细介绍

COGS 跟踪与分摊

概述

跟踪销售成本(COGS),可以了解每笔订单的实际毛利率——即收入减去所售商品的进货成本。大多数平台都允许你为每件商品输入成本价,会计集成(QuickBooks、Xero)会使用该价格自动生成 COGS 分录。到岸成本分摊(运费、清关费、关税)则需要专用应用,或在会计软件中手动分摊。只有当平台无法满足你的成本核算方法要求(先进先出、加权平均)时,才应构建自定义 COGS 系统。

何时使用此技能

  • 当损益表显示了收入,但由于未跟踪单位成本而无法计算毛利率时
  • 当进口商品且需要将运费、清关费和关税分摊到每个 SKU 的到岸成本中时
  • 当从定期(年末盘点)成本跟踪切换到永续(实时)成本跟踪时
  • 当构建差异分析报告以找出实际采购成本偏离标准成本的 SKU 时
  • 当 ERP 集成(QuickBooks、NetSuite、Xero)要求在销售时生成 COGS 日记账分录时

核心说明

步骤 1:确定平台并选择合适的方法
平台推荐方法原因
Shopify在 Admin 中输入每个变体的成本;使用 Shopify Analytics,或连接 QuickBooks/Xero 生成 COGS 报告Shopify 会存储每个变体的成本价;利润报告会使用该价格计算毛利率
WooCommerce为每件商品输入采购价;连接 WooCommerce Bookings 和会计插件,或使用 Metorik 生成毛利率报告WooCommerce 原生存储成本价;Metorik 提供利润分析
BigCommerce为每件商品填写采购成本字段;通过内置集成连接 QuickBooksBigCommerce 提供成本价字段;QuickBooks 集成会自动过账 COGS
自定义 / Headless构建包含先进先出 / 加权平均逻辑和会计日记账分录的成本分类账当上述集成都无法满足你的成本核算方法或报告需求时,需要采用此方法

步骤 2:为每件商品输入成本价

开始生成 COGS 报告之前,需要为每个商品变体设置成本价。

Shopify
  1. 前往 Admin → Products → [Product] → [Variant]
  2. 在 Pricing 下输入 Cost per item 字段
  3. 然后,Shopify 的 Analytics → Finances → Product sales by variant 报告就会显示每件商品的利润

批量更新成本:使用 Matrixify(App Store),导入包含每个 SKU 成本的 CSV——对应的列名为 Variant Cost。

WooCommerce
  1. 前往 WooCommerce → Products → [Product] → Inventory tab
  2. 在 Purchase cost 字段中输入数值(需要安装 WooCommerce Cost of Goods 插件,或使用由主题 / 插件添加的该字段)
  3. 如需生成报告:安装 Metorik 或连接 QuickBooks for WooCommerce——两者都会读取成本字段并生成毛利率报告

WooCommerce 常用的 COGS 插件:

  • WooCommerce Cost of Goods(SkyVerge)——添加成本字段并生成毛利率报告
  • Metorik——提供分析仪表板,显示每件商品、每笔订单和每个渠道的利润
BigCommerce
  1. 前往 Products → [Product] → Pricing
  2. 在 Cost Price 字段中输入数值
  3. 通过 Apps → BigCommerce for QuickBooks 连接 QuickBooks Online——它会自动将成本价映射到 COGS 分录

步骤 3:连接会计软件以生成 COGS 日记账分录

仅有成本价字段只能在平台内生成报告。如需生成损益表和资产负债表,请连接会计集成,使其在订单履约时过账 COGS。

Shopify → QuickBooks / Xero
  • QuickBooks Online:从 Shopify App Store 安装 QuickBooks Connector by OneSaas。配置:Sales → 已履行订单记入 COGS 科目;将产品映射到 QuickBooks 商品
  • Xero:从 Shopify App Store 安装 Xero by Amaka 或 A2X。A2X 的使用最为广泛——它会将 Shopify 的每日销售汇总为 Xero 汇总日记账分录,其中包括 COGS

强烈推荐 Shopify + Xero 使用 A2X——它会自动处理货币转换、退款、费用和 COGS。

WooCommerce → QuickBooks / Xero
  • QuickBooks:安装 QuickBooks Commerce 或 MyWorks Sync(最可靠的 WooCommerce ↔ QuickBooks 同步工具)
  • Xero:安装 Xero for WooCommerce by Zapier 或 Xero Bridge by Parex,以直接同步
BigCommerce → QuickBooks
  • 从 Apps marketplace 使用内置的 BigCommerce for QuickBooks 应用
  • 在 Settings → Accounting → Cost of Goods Sold account 下配置 COGS 映射

第 4 步:设置到岸成本分摊

到岸成本(运费、保险费、关税和税费)必须在首次销售前计入产品成本,才能准确计算 COGS。

适用于大多数商家的手动方法:

  1. 收到货物并取得运费/海关费用发票
  2. 计算单位到岸成本:到岸成本总额 ÷ 收货总件数
  3. 更新平台中的成本价,将到岸成本计入其中
  4. 按价值分摊:(Product value / Total shipment value) × Total landed cost ÷ Units received

适用于频繁进口的 Shopify 商家:

  • 从 App Store 安装 Shopify Shipping Costs 或 LandedCost.app
  • 这些应用允许你输入货物的到岸成本,并自动将其分摊到收到的 SKU

适用于会计软件用户:

  • 在 QuickBooks 或 Xero 中,使用到岸成本分摊日记账分录,在商品售出前将运费/关税计入库存资产价值

第 5 步:运行 COGS 和利润率报告

输入成本价并连接会计软件后:

Shopify
  • Analytics → Finances → Profit by product — 显示各变体的收入、成本和利润率
  • Analytics → Reports → Product sales — 按日期范围筛选,包含售出件数和利润
WooCommerce + Metorik
  • Metorik → Reports → Profitability — 按产品、订单和时间段显示毛利率
  • Metorik 还会显示每笔订单的成本和利润率 %
QuickBooks / Xero
  • P&L report — COGS 行显示该期间的销售商品总成本
  • Inventory valuation summary — 按 SKU 显示当前现有库存价值

自定义 / 无头架构

对于需要采用 FIFO 进行永续盘存计价的无头店面,请构建成本分类账:

// Cost layer model — one row per purchase order receipt
interface InventoryCostLayer {
  variantId: string;
  receiptDate: Date;
  quantityReceived: number;
  quantityRemaining: number;  // Decrements as units are sold
  unitCostCents: number;      // Purchase price per unit
  landedCostCents: number;    // Allocated freight/duties per unit
}

// FIFO cost assignment when an order is fulfilled
async function assignCogsFifo(variantId: string, locationId: string, quantity: number, orderId: string) {
  let remaining = quantity;
  let totalCostCents = 0;

  return db.transaction(async tx => {
    // Consume oldest cost layers first (FIFO)
    const layers = await tx.inventoryCostLayers.findAll({
      where: { variantId, locationId, quantityRemaining: { gt: 0 } },
      orderBy: { receiptDate: 'asc' },
    });

    for (const layer of layers) {
      if (remaining <= 0) break;
      const units = Math.min(remaining, layer.quantityRemaining);
      const totalUnitCost = layer.unitCostCents + layer.landedCostCents;

      await tx.inventoryCostLayers.update(layer.id, {
        quantityRemaining: layer.quantityRemaining - units,
      });
      await tx.cogsEntries.create({
        orderId, variantId, quantity: units,
        unitCostCents: totalUnitCost,
        costingMethod: 'fifo',
      });

      totalCostCents += units * totalUnitCost;
      remaining -= units;
    }

    if (remaining > 0) throw new Error(`Insufficient cost layers for ${variantId}`);
    return { totalCostCents };
  });
}

// Allocate landed costs to a received shipment (by value)
async function allocateLandedCostsByValue(shipmentId: string, totalLandedCostCents: number) {
  const layers = await db.inventoryCostLayers.findByShipment(shipmentId);
  const totalValue = layers.reduce((s, l) => s + l.unitCostCents * l.quantityReceived, 0);

  for (const layer of layers) {
    const share = (layer.unitCostCents * layer.quantityReceived) / totalValue;
    const perUnitLanded = Math.round((share * totalLandedCostCents) / layer.quantityReceived);
    await db.inventoryCostLayers.update(layer.id, { landedCostCents: perUnitLanded });
  }
}

最佳实践

  • 在首次导入或收货采购订单前输入成本价 — 只有设置成本后发生的订单才能准确计算 COGS;追溯修正需要手动调整
  • 在首次销售前将到岸成本计入单位成本 — 收货后、销售前支付的运费和关税必须进行分摊;否则 COGS 会低估实际成本
  • 为每个产品类别选择一种成本计价方法(FIFO 或加权平均)并坚持使用 — 年中切换需要进行重新估值的日记账分录
  • 每月将平台利润报告与会计软件对账 — 差异通常意味着部分变体缺少成本价
  • 在每个财年开始时设定标准成本以进行差异报告 — 将实际采购价格与标准成本比较,及早发现成本偏移

常见问题

问题解决方案
某些产品的毛利率报告显示为 100%这些变体缺少成本价;Shopify 和 WooCommerce 会将缺失的成本默认为 $0,且不会提示
QuickBooks 中的销货成本与平台的利润报告不一致会计集成可能使用了不同的销货成本账户,或忽略了退款;请检查集成映射设置
到岸成本未计入销货成本必须在首次销售前录入到岸成本;若在首次销售后录入,则需在会计软件中手动调整成本层
成本价包含了不应计入的增值税请输入不含增值税的成本价;税费应在损益表中单独列示,而不属于销货成本
加权平均成本过时根据当前库存层动态重新计算加权平均成本,切勿将其缓存为静态字段

相关技能

  • @inventory-tracking
  • @multi-warehouse
  • @catalog-import-export

评论

支持 Markdown