关于 invoice-management
面向 ServiceNow 采购与应付账款流程的技能,用于处理发票并执行采购订单、收货记录和发票的三方匹配。它可发现数量或价格差异,创建异常案例并更新发票状态。
主要功能
- 01查询待处理发票及采购订单
- 02核对订单、收货与发票
- 03检测数量和价格差异
- 04创建发票异常案例
- 05更新匹配状态并记录结果
适用场景
- 01审核发票是否符合采购订单
- 02核查部分收货对应的发票
- 03将不匹配发票转交调查处理
MCP 相关
该技能使用 MCP 工具查询发票、采购订单和收货记录,创建异常案例,并更新发票状态及工作记录。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill invoice-management安装后在 Claude Code 中输入/invoice-management确认已加载。
详细介绍
发票管理
概述
此技能提供了一套结构化方法,用于管理 ServiceNow Sourcing and Procurement Operations 中的应付账款发票。它可以帮助你:
- 从
sn_proc_invoice表中提取并验证发票数据 - 使用三单匹配(采购订单、收货记录、发票)将发票与采购订单进行匹配
- 识别发票金额、采购订单金额和收货数量之间的差异
- 通过
sn_apo_invoice_case创建并流转发票异常案例 - 跟踪发票审批工作流和付款准备情况
适用场景: 需要审核发票、将发票与采购订单和收货记录进行匹配,或需要调查并解决差异时。
前提条件
- 角色:
sn_procurement.invoice_manager、sn_procurement.analyst或accounts_payable - 插件: 已激活
com.sn_procurement(Sourcing and Procurement Operations) - 访问权限: 对
sn_proc_invoice、proc_po、proc_po_item、proc_rec_slip_item具有读写权限 - 知识: 了解三单匹配原则和所在组织的容差阈值
操作步骤
步骤 1:查询待处理发票
检索等待处理或匹配的发票。
使用 MCP(Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sn_proc_invoice
query: state=pending^ORstate=awaiting_match
fields: sys_id,number,vendor,po_number,invoice_amount,invoice_date,currency,state,due_date
limit: 25
order_by: due_date
使用 REST API:
GET /api/now/table/sn_proc_invoice?sysparm_query=state=pending^ORstate=awaiting_match^ORDERBYdue_date&sysparm_fields=sys_id,number,vendor,po_number,invoice_amount,invoice_date,currency,state,due_date&sysparm_limit=25
步骤 2:检索关联的采购订单
对于每张发票,获取关联的采购订单及其行项目,以开始匹配。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_po
query: number=[PO_NUMBER]
fields: sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency
limit: 1
然后获取采购订单行项目:
Tool: SN-Query-Table
Parameters:
table_name: proc_po_item
query: purchase_order.number=[PO_NUMBER]
fields: sys_id,item_description,quantity,unit_price,total_cost,received_quantity,model,part_number
limit: 50
使用 REST API:
# Get PO header
GET /api/now/table/proc_po?sysparm_query=number=[PO_NUMBER]&sysparm_fields=sys_id,number,vendor,total_cost,state,ordered_date,expected_delivery,currency&sysparm_limit=1
# Get PO line items
GET /api/now/table/proc_po_item?sysparm_query=purchase_order.number=[PO_NUMBER]&sysparm_fields=sys_id,item_description,quantity,unit_price,total_cost,received_quantity,model,part_number&sysparm_limit=50
步骤 3:检索收货记录
查询收货单项目,以核实实际收到的货物。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: proc_rec_slip_item
query: purchase_order.number=[PO_NUMBER]
fields: sys_id,quantity_received,received_date,po_item,receiving_slip,condition,notes
limit: 50
使用 REST API:
GET /api/now/table/proc_rec_slip_item?sysparm_query=purchase_order.number=[PO_NUMBER]&sysparm_fields=sys_id,quantity_received,received_date,po_item,receiving_slip,condition,notes&sysparm_limit=50
步骤 4:执行三单匹配
对照这三份单据。对于每个行项目,验证:
- 数量匹配: 发票数量 <= 收货数量 <= 订购数量
- 价格匹配: 发票单价 == 采购订单单价(在容差范围内,通常为 1-5%)
- 总额匹配: 发票总额 <= 采购订单总额(在容差范围内)
| 检查项 | 公式 | 通过条件 |
|---|---|---|
| 数量 | invoice_qty <= received_qty | 发票数量不超过收货数量 |
| 单价 | abs(invoice_price - po_price) / po_price * 100 | 差异在阈值范围内(例如,2%) |
| 行总额 | invoice_line_total <= po_line_total * (1 + tolerance) | 在容差范围内 |
| 发票总额 | invoice_total <= po_total * (1 + tolerance) | 总金额在容差范围内 |
步骤 5:标记并流转差异
如果匹配失败,请创建发票异常案例以便解决。
使用 MCP:
Tool: SN-Create-Record
Parameters:
table_name: sn_apo_invoice_case
fields:
invoice: [invoice_sys_id]
purchase_order: [po_sys_id]
short_description: "Three-way match failure: quantity discrepancy on PO0012345"
description: "Invoice INV-9876 line 2: invoiced qty 100, received qty 85. Variance: 15 units (17.6%). Exceeds 5% tolerance threshold."
priority: 2
category: quantity_discrepancy
state: new
assigned_to: [procurement_analyst_sys_id]
使用 REST API:
POST /api/now/table/sn_apo_invoice_case
Content-Type: application/json
{
"invoice": "[invoice_sys_id]",
"purchase_order": "[po_sys_id]",
"short_description": "Three-way match failure: quantity discrepancy on PO0012345",
"description": "Invoice INV-9876 line 2: invoiced qty 100, received qty 85. Variance: 15 units (17.6%).",
"priority": "2",
"category": "quantity_discrepancy",
"state": "new"
}
步骤 6:更新发票状态
根据匹配结果,将发票标记为已匹配或异常。
使用 MCP:
Tool: SN-Update-Record
Parameters:
table_name: sn_proc_invoice
sys_id: [invoice_sys_id]
fields:
state: matched
match_status: passed
work_notes: "Three-way match completed. All line items within tolerance. Ready for payment approval."
对于匹配失败的情况:
Tool: SN-Update-Record
Parameters:
table_name: sn_proc_invoice
sys_id: [invoice_sys_id]
fields:
state: exception
match_status: failed
work_notes: "Three-way match failed. Exception case CASE0045678 created for quantity discrepancy on lines 2, 5."
使用 REST API:
PATCH /api/now/table/sn_proc_invoice/[invoice_sys_id]
Content-Type: application/json
{
"state": "exception",
"match_status": "failed",
"work_notes": "Three-way match failed. Exception case created."
}
工具用法
MCP 工具参考
| 工具 | 使用场景 |
|---|---|
SN-Query-Table | 查询发票、采购订单、收货记录和供应商 |
SN-Natural-Language-Search | 按供应商或金额以自然语言搜索发票 |
SN-Create-Record | 创建发票异常案例 |
SN-Update-Record | 更新发票状态和匹配状态 |
SN-Add-Work-Notes | 记录匹配结果和决策 |
REST API 参考
| 端点 | 方法 | 用途 |
|---|---|---|
/api/now/table/sn_proc_invoice | GET | 查询发票 |
/api/now/table/sn_proc_invoice/{sys_id} | PATCH | 更新发票状态 |
/api/now/table/proc_po | GET | 检索采购订单 |
/api/now/table/proc_po_item | GET | 检索采购订单行项目 |
/api/now/table/proc_rec_slip_item | GET | 检索收货记录 |
/api/now/table/sn_apo_invoice_case | POST | 创建异常案例 |
最佳实践
- 设置容差阈值: 按类别定义可接受的偏差百分比(例如,IT 硬件为 2%,办公用品为 5%)
- 按到期日排序: 优先处理最接近付款到期日的发票,以避免滞纳金
- 核实供应商详情: 付款前交叉核对
core_company记录,确认供应商银行账户详情 - 批量处理: 按供应商或 PO 对发票分组,以提高匹配工作流的效率
- 审计跟踪: 始终添加工作备注,记录匹配结果,以满足合规要求
- 部分收货: 处理部分发货时,仅匹配已收货数量,并暂缓处理剩余部分
故障排除
“发票未关联采购订单”
原因: PO 编号字段为空,或包含不匹配的引用
解决方案: 按供应商和日期范围搜索 proc_po,查找正确的 PO;更新发票记录
“未找到收货记录”
原因: ServiceNow 中尚未记录收货信息
解决方案: 按 PO 检查 proc_rec_slip_item;联系仓库确认实物收货情况并创建收货单
“发票金额超过 PO 总额”
原因: 价格上涨、额外费用(运费、税费)或重复开票
解决方案: 创建异常案例;向供应商核实费用是否合理;使用 sysparm_query=vendor=[vendor_id]^invoice_amount=[amount]^invoice_date>=[date] 检查重复发票
“单张发票对应多个 PO”
原因: 供应商将多个订单合并为一张发票 解决方案: 拆分发票,或使用零件编号或商品描述逐行与各个 PO 匹配
示例
示例 1:三方匹配成功
场景: Acme Corp 的发票 INV-2024-0456,金额为 $15,000.00
步骤:
- 查询发票:金额为 $15,000,关联到 PO0012345
- PO0012345 总额:$15,000,包含 3 个行项目
- 根据
proc_rec_slip_item,所有 3 个项目均已全部收货 - 价格偏差:所有行均为 0%
- 结果:匹配通过
Tool: SN-Update-Record
Parameters:
table_name: sn_proc_invoice
sys_id: a1b2c3d4...
fields:
state: matched
match_status: passed
work_notes: "Three-way match passed. PO0012345 fully received. All prices match. Ready for payment."
示例 2:需要解决的差异
场景: 发票 INV-2024-0789 显示 500 件,每件 $12.00($6,000)。PO 显示 500 件,每件 $10.00($5,000)。收货记录确认已收货 500 件。
分析:
- 数量:匹配(500 = 500)
- 单价:$12.00 对比 $10.00 = 20% 偏差(超过 2% 阈值)
- 总额:$6,000 对比 $5,000 = 超出 $1,000
操作: 创建异常案例,标记并提交给采购分析师审核,暂缓付款。
示例 3:部分收货匹配
场景: PO 订购 1,000 件,已收货 750 件,发票数量为 750 件。
分析:
- 发票数量(750)与已收货数量(750)匹配
- 发票数量未超过 PO 数量(750 <= 1,000)
- 结果:部分匹配通过 -- 可批准 750 件的发票
相关技能
procurement/purchase-order-summarization- 汇总 PO 详情和交付状态procurement/procurement-summarization- 采购案例和管道概览procurement/supplier-recommendation- 评估供应商表现,为寻源决策提供依据catalog/approval-workflows- 配置发票审批工作流