SAP事务取证
ERP事务数据的取证模式发现。不是规则引擎,而是学习系统。
问题
现有的取证工具附带了硬编码规则。“标记超过$X的发票。”“供应商主数据更改时发出警报。”这些规则会忽略新的模式,并对不相关的模式进行攻击。每个ERP都是不同的。每个客户的欺诈签名都是不同的。静态规则引擎无法跟上。
方法
该项目有两层:
- 检测层 --23个MCP工具实施了众所周知的取证检查(SoD冲突、一致性偏差、日志异常、现实差距)。确定性,经过测试,可从Claude Code调用。
- 发现层 --一个工人/评论家/拉尔夫循环,提出 *新* 从数据中提取模式,根据证据验证它们,并扩展一个持久模式库。看 模式发现/.
检测层会找到你知道要寻找的东西。发现层会发现你没有发现的东西。
60秒内试试
无需SAP访问权限。包括合成数据。
git clone https://github.com/chrbailey/SAP-Transaction-Forensics.git
cd SAP-Transaction-Forensics
make demo # generates synthetic data + runs analysis
cd mcp-server && npm install && npm run build && cd ..
claude # opens Claude Code with 18 forensic tools wired up然后问克劳德: *“对o2c简单参考模型进行一致性检查。”*
完整演练: QUICKSTART.md ·五个问题演示: scripts/demo-walkythrough.md ·模式发现: 模式发现/README.md
这不是什么
- 不是治理工具。 有关AI代理操作的预执行批准,请参阅 PromptSpeak.
- 不是一个自我修复的系统。 它发现了问题。人类决定做什么。
- 不是商业产品。 麻省理工学院许可。由独立顾问(Christopher Bailey,ERP Access Inc,29年ERP经验-SAP、NetSuite、Oracle、Workday)打造。
______________________________________________________________________
 ](https://nodejs.org/)   
______________________________________________________________________
新增内容:证据基础设施
从提取到审阅者移交的完整证据生命周期,每一步都有加密验证。
| 特性 | 描述 |
|---|---|
| 物源图 | 字段级DAG将每个发现跟踪到系统/表/记录/字段/值/时间戳 |
| 提取注册表 | 跨SAP、Salesforce和NetSuite的19条命名、版本化、确定性提取路径 |
| 矛盾引擎 | 12类分类法,带有风险评分和类型特定权重 |
| 架构验证器 | 19个表IDES参考模式(438个字段),带有飞行前验证和定制检测 |
| 现实差距检测器 | 三向差距分析:参考模型、记录的业务规则和实际事件日志 |
| 查找生命周期 | 具有SQLite持久性、转换历史和重复数据删除功能的8状态机 |
| 审阅者交接 | 无需模型访问即可验证的自包含审计工件 |
| 1663测试 | 1639个TypeScript(70个套件)+24个Python(模式发现),零回归 |
证据链示例
Finding: AMOUNT_DIVERGENCE on Sales Order 0000045123
Evidence:
Left: SAP.VBAK.0000045123.NETWR = 125,000.00 (extracted 2025-09-15T14:22:00Z)
Right: SFDC.Opportunity.006R00000123.Amount = 118,750.00 (extracted 2025-09-15T14:22:01Z)
Delta: 5.3% ($6,250.00)
Provenance:
Extraction Path: sap-o2c-order-headers v1.0
Replay Hash: sha256:a7f3b2...
State: CONFIRMED → REMEDIATION (transitioned 2025-09-16 by reviewer@corp.com)______________________________________________________________________
替代路径(无Claude代码)
如果你没有使用Claude Code,底层工具仍然可以直接运行:
选项A:Docker Compose(浏览器用户界面)
docker-compose up --build
# Open browser to http://localhost:8080选项B:分析CSV导出
# Export from SE16: VBAK, VBAP, LIKP, LIPS, VBRK, VBRP, STXH/STXL
# Place files in ./input-data/
docker-compose run pattern-engine --input-dir /app/input-data --output-dir /app/output选项C:实时RFC连接
# Copy and edit configuration
cp .env.rfc.example .env.rfc
# Edit .env.rfc with your SAP connection details
# Run with RFC adapter
docker-compose --profile rfc up mcp-server-rfc看 安装指南 有关详细的设置说明。
选项D:分析Salesforce数据
# 1. Generate synthetic SFDC data (200 Opportunities, 10 planted anomaly patterns)
cd synthetic-data
python3 src/generate_sfdc.py --count 200 --accounts 50 --output sfdc_output/ --seed 42
# 2. Run the forensic analysis
cd ../pattern-engine
python3 pattern-engine/scripts/analyze_sfdc.py
# Or bring your own SFDC export:
# Place Opportunity, Account, StageHistory CSVs in ./data/sfdc/
# python3 pattern-engine/scripts/analyze_sfdc.py --data-dir ../data/sfdc______________________________________________________________________
证据基础设施
证据基础设施提供了一个完整的监管链,从原始系统数据到法医调查结果,再到审查员准备的审计数据包。
物源图
每个发现都可以通过有向无环图(DAG)追溯到特定系统中特定记录中的特定字段。每条提取记录都记录了:
- 系统 -SAP、Salesforce或NetSuite
- 表格 -源表(例如,VBAK、Opportunity)
- 记录ID -具体文件或记录
- 领域 -单个字段名称
- 价值 -提取时的提取值
- 时间戳 -提取发生时
- 回放哈希 -SHA-256哈希用于独立重新验证
导出格式:DAG JSON(全图)、平面(表格)、Markdown(人类可读)。
提取注册表
19个命名的、版本化的、确定性的提取路径确保了可重复的数据收集:
| 域 | 路径 | 描述 |
|---|---|---|
| SAP O2C | sap-o2c-order-headers | 销售订单标题字段(VBAK) |
sap-o2c-order-items | 行项目详细信息(VBAP) | |
sap-o2c-doc-flow | 文档流链(VBFA) | |
sap-o2c-delivery-timing | 请求交付与实际交付(LIKP/LIPS) | |
sap-o2c-invoice-timing | 发票创建和过账(VBRK/VBRP) | |
| SAP FI/CO | sap-fico-journal-entries | 日记账条目标题(BKPF) |
sap-fico-line-items | 日记账行项目(BSEG) | |
sap-fico-sod-conflicts | 职责分离分析 | |
sap-fico-gl-balances | 总账账户余额 | |
| SAP P2P | sap-p2p-purchase-orders | 采购订单数据(EKKO/EKPO) |
sap-p2p-requisitions | 请购单(EBAN) | |
sap-p2p-goods-receipts | 收货单(MKPF/MSEG) | |
sap-p2p-invoice-verification | 发票验证(RBKP/RSEG) | |
| 赛富时 | sfdc-opportunities | 机会管道数据 |
sfdc-stage-history | 阶段转换历史 | |
sfdc-activities | 记录中的任务和事件 | |
| NetSuite | netsuite-user-activity | 用户活动审计跟踪 |
netsuite-transaction-summary | 交易摘要 | |
netsuite-login-history | 登录和访问历史记录 |
每个路径都有版本控制,并为相同的输入产生确定性输出,从而实现SHA-256重放验证。
矛盾引擎
使用12类分类法进行跨系统矛盾检测:
| 类别 | 它检测到什么 |
|---|---|
AMOUNT_DIVERGENCE | 不同系统之间差异超出容忍范围的美元金额 |
DATE_CONFLICT | 匹配记录之间的日期不一致 |
STATUS_INCOMPATIBLE | 逻辑上不能共存的状态字段 |
ENTITY_MISMATCH | 跨系统不匹配的客户/供应商/物料ID |
QUANTITY_DIVERGENCE | 超出公差的数量 |
APPROVAL_BYPASS | 绕过所需审批步骤的交易 |
TEMPORAL_IMPOSSIBILITY | 以不可能的顺序发生的事件 |
DUPLICATE_REFERENCE | 多条记录声称具有相同的参考号 |
ORPHAN_RECORD | 一个系统中的记录,另一个系统没有对应记录 |
RETROACTIVE_CHANGE | 记录定稿后所做的更改 |
SOD_VIOLATION | 同一用户执行相互冲突的职责 |
SCHEMA_GHOST | 引用不存在的架构元素的字段或值 |
风险评分使用特定类型的权重。严重级别:严重、高、中、低、信息。
架构验证器
在提取任何数据之前,根据客户端模式对提取路径进行飞行前验证。
- 参考架构:来自实际SAP IDES转储的19个表、438个字段
- 路径验证:验证提取路径引用的每个字段是否存在于客户端架构中
- 定制检测:标识Z表、Z字段和自定义命名空间
- 差距报告:准确显示哪些字段缺失以及哪些路径受到影响
现实差距检测器
三向差距分析,比较应该发生的事情、记录的事情和实际发生的事情:
| 间隙类型 | 比较 | 示例 |
|---|---|---|
| 设计差距 | 参考模型与记录规则 | SoD政策存在,但未配置强制控制 |
| 合规差距 | 记录的规则与实际事件 | 需要三方匹配,但发票没有GR |
| 阴影处理 | 实际事件与所有记录的模型 | 周末发布的货物收据,没有审批流程 |
包括一个规则解析器,其中包含SAP、NetSuite和Salesforce的标准规则集。
查找生命周期管理器
8状态机跟踪从检测到分辨率的每个发现:
DETECTED → TRIAGED → INVESTIGATING → CONFIRMED → REMEDIATION → RESOLVED
↘ ↘ ↗
FALSE_POSITIVE ACCEPTED_RISK- 具有完整转换历史的SQLite持久性(谁、何时、从状态到状态)
- 重复数据删除可防止同一发现被记录两次
- 四个发现来源:矛盾、真实性、一致性、公平性
- 根据发现类型和严重程度计算的风险评分(0.0-1.0)
审阅者交接包
无需模型访问即可验证的自包含审计工件:
- 执行摘要 -范围、分析的系统、关键指标、风险分布
- 渲染结果 -每个发现都有严重性、证据表和来源链
- 提取清单 -使用的每个提取路径,带有参数和SHA-256重放哈希
- 复制README -独立重新运行分析的分步说明
- 审阅者检查表 -涵盖完整性、准确性和方法的25项验证清单
______________________________________________________________________
SFDC法医分析
Salesforce适配器通过与SAP相同的模式引擎映射Opportunity管道数据:
现场测绘(SFDC→ SAP标准化)
| SFDC概念 | SAP等效 | 映射 |
|---|---|---|
| 机会。Id | VBELN | 填充为10个字符 |
| 记录类型。名称 | AUART | 新业务→ZNEW,续约→ZREN,追加销售→ZUPS |
| 账户Id | KUNNR | 填充到10个字符 |
| 机会。金额 | 净值 | 直接 |
| 阶段转换 | VBFA(文档流) | 每个阶段的更改→ 流量入口 |
| 任务/事件 | STXH/STXL(文本) | 活动主题+描述→ doc文本 |
| 帐户(安全字段) | KNA1 | 仅限行业、州、国家(无个人身份信息) |
跨系统相关性
当加载SFDC和SAP数据时,实体解析器使用以下方式匹配记录:
- 显式ID (置信度0.99)--
Opportunity.SAP_Order_Number__c == VBAK.VBELN - 邻近 (置信度0.50-0.95)——账户名称相似性+金额容差+日期接近度
- 时间序列 (第2阶段)——单调SFDC→SAP事件链验证
在匹配的配对中检测到异常:
- 时间差距 --SFDC接近SAP订单创建>30天
- 金额差异 --SFDC金额与SAP NETWR>5%容差
- 序列违规 --SFDC关闭前创建的SAP订单
- 缺少交接 --SFDC Closed Won,没有相应的SAP订单
种植异常模式(合成数据)
SFDC发生器以受控速率产生10种可检测模式:
| 模式 | 速率 | 测试内容 |
|---|---|---|
| 跳过阶段 | 5% | 合规性:绕过强制阶段 |
| 季度末压缩 | 赢的40% | 时间:期末交易集群 |
| 幽灵管道 | 后期10% | 相关性:活跃交易中无活动 |
| 阶段回归 | 3% | 一致性:向后阶段移动 |
| 金额通胀 | 8% | 相关性:收盘时金额增长>50% |
| 拆分交易 | 6% | 跨实体:同一账户,7天内重复交易 |
| 速度异常 | 5% | 时间:创建后将在\30天SFDC→SAP时间差距 |
______________________________________________________________________
所得
+-----------------------------------------------------------------------------------+
| Pattern Discovery Report |
+-----------------------------------------------------------------------------------+
| Pattern: "Credit Hold Escalation" |
| ----------------------------------------------------------------------------------|
| Finding: Orders with 'CREDIT HOLD' in notes have 3.2x longer fulfillment cycles |
| |
| Occurrence: 234 orders (4.7% of dataset) |
| Sales Orgs: 1000 (64%), 2000 (36%) |
| Confidence: HIGH (p |2.1 days| B[Delivery Created]
B -->|0.5 days| C[Goods Issued]
C -->|3.2 days| D[Invoice Created]
style C fill:#f8d7da- 输出格式:Mermaid(Markdown)、GraphViz(DOT)、SVG
- 颜色编码的瓶颈严重程度(绿色/黄色/红色)
- 流程步骤之间的时间注释
预测性监测
基于机器学习的过程结果预测:
Order 0000012345 - Risk Assessment:
├── Late Delivery: 78% probability (HIGH RISK)
│ └── Factors: credit_block, order_value > $50k
├── Credit Hold: 45% probability (MEDIUM RISK)
└── Est. Completion: 8.2 days预测类型:
- 延迟交付 -基于病例年龄、进展、停滞、返工的概率
- 信贷持有 -基于信用检查状态和复杂性的可能性
- 完成时间 -根据进度/速度估计剩余小时数
29提取特征:
- 时间:病例年龄、自上次事件以来的时间、事件之间的平均时间
- 活动:达到里程碑、返工检测、循环计数、回溯
- 资源:唯一资源、切换计数
- 风险指标:停滞案例、信贷搁置、拒绝、封锁
______________________________________________________________________
为什么选择这个而不是S/4HANA?
| 考虑 | S/4HANA迁移 | 交易取证 |
|---|---|---|
| 时间线 | 18-36个月 | 首次洞察的时间 |
| 成本 | 1000万至1亿美元+ | 免费(MIT许可证) |
| 风险 | 业务中断 | 零-只读访问 |
| 数据位置 | 云/托管 | 仅限内部部署 |
| 先决条件 | 绿地/棕地项目 | 与现有ECC 6.0配合使用 |
| 流程可见性 | 迁移后 | 任何更改之前 |
| 用例 | 全面转型 | 流程发现和优化 |
此工具不能代替S/4HANA。 它可以帮助您了解当前的流程 *之前* 做出迁移决策,或在现有的ECC系统中寻找优化机会。
______________________________________________________________________
安装
先决条件
- Docker和Docker Compose(推荐)
- 或者Node.js 18+和Python 3.10+用于本地开发
快速安装
git clone https://github.com/chrbailey/SAP-Transaction-Forensics.git
cd transaction-forensics
docker-compose up --build详细设置
看 docs/adapter_guide.md 用于:
- ECC 6.0的RFC适配器配置
- S/4HANA的OData适配器配置
- 从SE16导出CSV导入
- 气隙安装选项
LLM配置(v2.0)
在中配置自然语言界面 .env:
# Option 1: Local Ollama (default, private)
LLM_PROVIDER=ollama
OLLAMA_HOST=http://localhost:11434
LLM_MODEL=llama3
# Option 2: OpenAI
LLM_PROVIDER=openai
LLM_API_KEY=
LLM_MODEL=gpt-4
# Option 3: Anthropic
LLM_PROVIDER=anthropic
LLM_API_KEY=
LLM_MODEL=claude-3-sonnet-20240229对于气隙环境,请将Ollama与本地下载的型号一起使用。
______________________________________________________________________
德莫斯
所有v2.0流程挖掘工具的交互式演示。无需SAP连接-所有演示都使用合成数据。
cd mcp-server
# Natural Language Interface - ask questions in plain English
npx tsx ../demos/ask_process_demo.ts
npx tsx ../demos/ask_process_demo.ts --interactive # Interactive mode
# OCEL 2.0 Export - export to process mining standard format
npx tsx ../demos/export_ocel_demo.ts
# Conformance Checking - compare against O2C reference model
npx tsx ../demos/check_conformance_demo.ts
# Visual Process Maps - generate Mermaid flowcharts
npx tsx ../demos/visualize_process_demo.ts
# Predictive Monitoring - ML-based risk predictions
npx tsx ../demos/predict_outcome_demo.ts| 演示 | 描述 |
|---|---|
ask_process_demo.ts | 具有LLM集成的自然语言查询 |
export_ocel_demo.ts | OCEL 2.0导出,包含对象/事件细分 |
check_conformance_demo.ts | 偏差检测和严重性评分 |
visualize_process_demo.ts | 突出显示瓶颈的美人鱼图 |
predict_outcome_demo.ts | 风险预测和警报 |
salt_adapter_demo.ts | 来自SALT数据集的真实SAP O2C数据 |
visualize_process_bpi_demo.ts | 具有真实P2P数据的流程图(BPI 2019) |
predict_outcome_bpi_demo.ts | 基于真实P2P数据的风险预测(BPI 2019) |
ask_process_bpi_demo.ts | P2P数据的自然语言查询 |
______________________________________________________________________
真实SAP数据
2019年BPI挑战赛(P2P)
使用真实的SAP采购支付数据 2019年BPI挑战赛 用于使用真实的业务模式进行测试。
# Download and convert BPI 2019 data
python scripts/convert-bpi-xes.py
# Run demos with real P2P data
npx tsx demos/visualize_process_bpi_demo.ts 50
npx tsx demos/predict_outcome_bpi_demo.ts 30
npx tsx demos/ask_process_bpi_demo.ts数据集统计:
| 度量 | 值 |
|---|---|
| 案件总数 | 251734 |
| 活动总数 | 15M+ |
| 独特活动 | 39 |
| 流程类型 | 购买到支付(P2P) |
| 来源 | 跨国涂料公司 |
活动包括: SRM工作流、采购订单、收货、服务条目、发票处理、供应商交互
______________________________________________________________________
SALT数据集(O2C)
使用来自SAP的真实SAP ERP数据 SALT数据集 在HuggingFace上进行真实商业模式的测试。
快速开始
# 1. Install Python dependencies
pip install datasets pyarrow
# 2. Download SALT dataset
python scripts/download-salt.py
# 3. Run demo with real data
cd mcp-server
npx tsx ../demos/salt_adapter_demo.ts包含什么
SALT(销售自动补全链接业务表)包含:
| 表 | 说明 | 记录 |
|---|---|---|
| I_SalesDocument | 销售订单标题 | ~1M+ |
| I_SalesDocumentItem | 订单行项目 | ~5M+ |
| I_客户 | 客户主数据 | ~100K |
| I_AddrArgName邮寄地址 | 地址数据 | ~100K |
使用SALT适配器
import { SaltAdapter } from './adapters/salt/index.js';
const adapter = new SaltAdapter({
maxDocuments: 10000, // Limit for memory management
});
await adapter.initialize();
// Get real sales order data
const header = await adapter.getSalesDocHeader({ vbeln: '0000012345' });
const items = await adapter.getSalesDocItems({ vbeln: '0000012345' });
// Get dataset statistics
const stats = adapter.getStats();
console.log(`Loaded ${stats.salesDocuments} sales documents`);局限性
SALT包含 仅限销售订单 (无交货或发票)。对于完整的订单到现金测试:
- 使用SALT进行销售订单分析和机器学习培训
- 使用合成适配器进行完整的O2C流量测试
- 将两者结合起来进行全面验证
为什么要使用真实数据?
| 方面 | 合成数据 | SALT真实数据 |
|---|---|---|
| 模式 | 随机/人为 | 真实的商业模式 |
| ML训练 | 精度有限 | 真实世界的特征分布 |
| 演示 | 有利于UI测试 | 对利益相关者有吸引力 |
| 验证 | 功能测试 | 业务逻辑验证 |
分析结果
我们已经根据真实的SAP数据集验证了MCP工具。查看详细分析:
| 数据集 | 系统 | 案例 | 事件 | 关键发现 | 报告 |
|---|---|---|---|---|---|
| SFDC合成 | Salesforce | 214 | 2417 | 10种异常模式,57%的量化宽松压缩,2个跨系统差距 | 运行: python3 pattern-engine/scripts/analyze_sfdc.py |
| 2019年BPI挑战赛 | SAP P2P | 251734 | 160万 | 42个活动,64天平均吞吐量 | View → |
| SAP IDES O2C | SAP O2C | 646 | 5708 | 158个变体,发现了瓶颈 | View → |
| SAP IDES P2P | 检测到SAP P2P | 2486 | 7420 | 7个合规违规 | View → |
工艺流程图: O2C和P2P的Mermaid流程图
测试套件:总共1663个测试——70个套件中的1639个TypeScript测试(mcp-server/)+24个Python测试(pattern-discovery/).零回归。
______________________________________________________________________
安全与合规
该系统专为满足企业安全需求而设计。
| 关注 | 我们如何应对 |
|---|---|
| 数据访问 | 只读BAPI-无写操作,无任意SQL |
| 数据位置 | 所有处理都是在本地进行的——没有云,没有外部API |
| 网络 | 没有出站连接,没有遥测,没有回家电话 |
| PII保护 | 自动编辑电子邮件、电话、姓名、地址 |
| 审计跟踪 | 每个查询都记录了参数、时间戳、行数 |
| 行限制 | 默认每个查询200行,最多1000行-防止批量提取 |
| 来源 | 每次提取时进行SHA-256重放散列,以进行独立验证 |
| 交接诚信 | 审阅者数据包是自包含的,无需模型访问即可验证 |
看 安全.md 获取完整的安全文档。
______________________________________________________________________
适用于SAP Basis管理员
所需授权
RFC用户需要 仅显示 访问SD文档:
Authorization Object: S_RFC
RFC_TYPE = FUGR
RFC_NAME = STXR, 2001, 2051, 2056, 2074, 2077
ACTVT = 16 (Execute)
Authorization Object: V_VBAK_VKO
VKORG = [Your Sales Organizations]
ACTVT = 03 (Display)
Authorization Object: V_VBAK_AAT
AUART = * (or specific document types)
ACTVT = 03 (Display)复制粘贴就绪角色模板: 看 docs/SAP_AUTHORIZATION.md
使用的BAPI(全部只读)
| BAPI | 目的 | 访问的表 |
|---|---|---|
BAPI_SALESORDER_GETLIST | 列出销售订单 | VBAK |
SD_SALESDOCUMENT_READ | 读取订单标题/项目 | VBAK、VBAP |
BAPI_SALESDOCU_GETRELATIONS | 文档流(VBFA) | VBFA |
BAPI_OUTB_DELIVERY_GET_DETAIL | 交货详情 | LIKP,LIPS |
BAPI_BILLINGDOC_GETDETAIL | 发票明细 | VBRK、VBRP |
READ_TEXT | 长文本字段 | STXH、STXL |
BAPI_CUSTOMER_GETDETAIL2 | 客户主数据(存根) | KNA1 |
BAPI_MATERIAL_GET_DETAIL | 物料主数据(存根) | MARA |
无法直接访问表。除非明确启用,否则没有RFC_READ_TABLE。
______________________________________________________________________
建筑
+------------------------------------------------------------------+
| Your Network |
| +------------------------------------------------------------+ |
| | | |
| | +----------------+ +-------------------+ | |
| | | SAP ECC 6.0 | | SAP Workflow | | |
| | | | | Mining Server | | |
| | | +----------+ | | | | |
| | | | SD/MM | | RFC | +-------------+ | | |
| | | | Tables || MCP Server | | | |
| | | +----------+ | (R/O)| +-------------+ | | |
| | | | | | | | |
| | +----------------+ | v | | |
| | | +-------------+ | | |
| | +----------------+ | | Evidence | | | |
| | | Salesforce | | | Engine | | | |
| | | | API | | +---------+ | | | |
| | | Opportunities || |Provnance| | | | |
| | | Activities | | | |Registry | | | | |
| | +----------------+ | | |Findings | | | | |
| | | | +---------+ | | | |
| | +----------------+ | +-------------+ | | |
| | | NetSuite | | | | | |
| | | | API | v | | |
| | | Users/Txns || +-------------+ | | |
| | +----------------+ | | Pattern | | | |
| | | | Engine | | | |
| | | +-------------+ | | |
| | | | | | |
| | +----------------+ | +-------------+ | | |
| | | Browser || Web Viewer | | | |
| | | (localhost) | | +-------------+ | | |
| | +----------------+ +-------------------+ | |
| | | |
| +------------------------------------------------------------+ |
| |
| NO EXTERNAL CONNECTIONS |
+------------------------------------------------------------------+数据流:
- MCP服务器通过RFC连接到SAP,通过API连接到Salesforce,通过API连接到NetSuite(全部只读)
- Extraction Registry执行命名的、版本化的提取路径
- 物源图记录每次提取的现场级证据
- 矛盾引擎和现实差距检测器分析跨系统数据
- Finding Lifecycle Manager跟踪从检测到解决的发现
- Handoff Generator生成自包含的审阅者数据包
- Web Viewer在本地主机上显示结果
没有什么离开你的网络。
______________________________________________________________________
常见问题解答
SAP是否正式支持此工具?
不,这是一个独立的开源项目。它使用公开记录的标准SAP BAPI。
这会影响SAP系统性能吗?
影响最小。所有查询均为:
- 只读(无锁)
- 行数有限(默认200,最大1000)
- 速率限制(可配置)
- 使用标准BAPI(非直接表访问)
我们建议在非高峰时段进行初步分析。
支持哪些SAP模块?
SD(销售与分销)、MM(物料管理)和FI/CO(财务会计/控制)文件流。还支持使用Salesforce CRM和NetSuite进行跨系统分析。
这在任何数据库上都适用于SAP吗?
对。该工具使用与数据库无关的BAPI。适用于HANA、Oracle、DB2、SQL Server、MaxDB。
我可以在气隙环境中运行这个吗?
对。Docker镜像可以离线构建和传输。运行时没有外部依赖关系。
我如何验证这些发现?
每一项发现都包括:
- 字段级来源跟踪到系统/表/记录/字段/值/时间戳
- SHA-256重放哈希用于独立重新验证
- SAP中用于验证的样本文件编号(VA03、VL03N、VF03)
- 统计置信区间
- 关于相关性与因果关系的明确警告
对于正式审查,请使用 generate_handoff_packet 生成一个包含25项审阅者清单的独立审计工件。
GDPR/数据保护怎么办?
- 默认情况下启用PII编辑
- 没有数据离开您的网络
- 可共享模式应用额外的编辑
- 看 安全.md 出于合规考虑
我可以贡献或请求功能吗?
对。看 贡献.md 作为指导方针。通过GitHub Issues请求功能。
______________________________________________________________________
治理(PromptSpeak集成)
MCP服务器包括一个基于 PromptSpeak符号框架 用于预执行阻止和人工循环审批工作流。
为什么治理?
当AI代理访问SAP数据时,您需要控制:
- 防止大量提取 -保留对大日期范围或行数的请求
- 保护敏感数据 -需要批准包含PII模式的搜索
- 阻止流氓特工 -断路器立即停止行为不端的特工
- 审核一切 -完整跟踪所有操作以确保合规性
PromptSpeak框架
每个操作都有一个符号框架,指示模式、域、动作和实体:
Frame: ⊕◐◀α
│ │ │ └── Entity: α (primary agent)
│ │ └──── Action: ◀ (retrieve)
│ └────── Domain: ◐ (operational)
└──────── Mode: ⊕ (strict)| 符号 | 类别 | 含义 |
|---|---|---|
⊕ | 模式 | 严格-要求完全合规 |
⊘ | 模式 | 空档-标准操作 |
⊖ | 模式 | 灵活-允许解释 |
⊗ | 模式 | 禁止 -阻止所有操作 |
◊ | 域 | 财务(发票、价值) |
◐ | 领域 | 运营(订单、交付) |
◀ | 操作 | 检索数据 |
▲ | 操作 | 分析/搜索 |
● | 操作 | 验证 |
α β γ | 实体 | 一级/二级/三级代理 |
保持触发器
在以下情况下,操作会自动保留以供人工批准:
| 触发器 | 阈值 | 示例 |
|---|---|---|
| 广泛的日期范围 | >90天 | date_from: 2024-01-01, date_to: 2024-12-31 |
| 行数上限 | >500行 | limit: 1000 |
| 敏感模式 | SSN、信用卡、密码 | pattern: "social security" |
治理工作流程
Agent Request
│
▼
┌─────────────┐ ┌─────────────┐
│ Circuit │────▶│ BLOCKED │ (if agent halted)
│ Breaker │ └─────────────┘
└─────────────┘
│ OK
▼
┌─────────────┐ ┌─────────────┐
│ Frame │────▶│ BLOCKED │ (if ⊗ forbidden)
│ Validation │ └─────────────┘
└─────────────┘
│ OK
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Hold │────▶│ HELD │────▶│ Human │
│ Check │ │ (pending) │ │ Approval │
└─────────────┘ └─────────────┘ └─────────────┘
│ OK │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ EXECUTE │◀────────────────────────│ APPROVED │
└─────────────┘ └─────────────┘治理工具
| 工具 | 目的 |
|---|---|
ps_precheck | 试运行:检查是否允许操作 |
ps_list_holds | 等待批准的待处理清单 |
ps_approve_hold | 批准已暂停的操作 |
ps_reject_hold | 有理由拒绝已暂停的操作 |
ps_agent_status | 检查代理的断路器状态 |
ps_halt_agent | 立即停止代理(阻止所有操作) |
ps_resume_agent | 恢复已停止的代理 |
ps_stats | 获取治理统计数据 |
ps_frame_docs | 获取PromptSpeak帧参考 |
示例:搁置和审批流程
// 1. Agent makes a request that triggers hold
const result = await mcp.callTool('search_doc_text', {
pattern: 'delivery',
date_from: '2024-01-01',
date_to: '2024-12-31', // >90 days triggers hold
});
// Returns: { held: true, hold_id: 'hold_abc123', reason: 'broad_date_range' }
// 2. Supervisor reviews pending holds
const holds = await mcp.callTool('ps_list_holds', {});
// Returns: [{ holdId: 'hold_abc123', tool: 'search_doc_text', severity: 'medium' }]
// 3. Supervisor approves
const approved = await mcp.callTool('ps_approve_hold', {
hold_id: 'hold_abc123',
approved_by: 'supervisor@example.com'
});
// Returns: { allowed: true, auditId: 'audit_xyz789' }示例:紧急代理停止
// Immediately block a misbehaving agent
await mcp.callTool('ps_halt_agent', {
agent_id: 'agent-123',
reason: 'Excessive query rate detected'
});
// All subsequent requests from this agent are blocked
const result = await mcp.callTool('get_doc_text', {
doc_type: 'order',
doc_key: '0000000001',
_agent_id: 'agent-123' // Identifies the agent
});
// Returns: { error: 'Governance Blocked', message: 'Agent halted: Excessive query rate' }
// Resume when issue is resolved
await mcp.callTool('ps_resume_agent', { agent_id: 'agent-123' });______________________________________________________________________
MCP工具参考
SAP数据工具
| 工具 | 目的 | 回报 |
|---|---|---|
search_doc_text | 按文本模式查找文档 | doc_type、doc_key、snippet、match_score |
get_doc_text | 获取文档的所有文本字段 | headr_texts\[\],item_texts\[\] |
get_doc_flow | 获取订单交付发票链 | 包含键、状态、日期的链 |
get_sales_doc_header | 订单标题详细信息 | sales_org、客户、日期、值 |
get_sales_doc_items | 订单行项目 | 材料、数量、价值 |
get_delivery_timing | 请求交付与实际交付 | 时间戳、差异分析 |
get_invoice_timing | 发票创建/过账 | 发票日期、会计参考 |
get_master_stub | 安全主数据属性 | 哈希ID、类别(无PII) |
流程挖掘工具(v2.0)
| 工具 | 目的 | 回报 |
|---|---|---|
ask_process | 自然语言查询 | 答案、置信度、证据、建议 |
export_ocel | 导出为OCEL 2.0格式 | 带有对象和事件的OCEL JSON/XML |
check_conformance | 与O2C模型进行比较 | 一致性_比率、偏差、严重性_总结 |
visualize_process | 生成流程图 | Mermaid/DOT/SVG,突出显示瓶颈 |
predict_outcome | 基于机器学习的结果预测 | 预测、警报、风险水平、因素 |
FI/CO法医工具
| 工具 | 目的 | 回报 |
|---|---|---|
analyze_journal_entries | 日记账分录异常检测 | 异常、风险_核心、模式 |
analyze_sod | 职责分离分析 | 冲突、违规_计数、用户 |
analyze_gl_balances | 总账账户余额分析 | 余额_正常情况、趋势 |
get_fi_document | 检索金融机构文件详细信息 | 标题、行项目、金额 |
generate_fi_assessment | FI/CO风险评估报告 | 评估、发现、建议 |
证据基础设施工具
| 工具 | 目的 | 回报 |
|---|---|---|
query_provenance | 发现的追踪证据链 | DAG/flat/MaMarkdown,具有字段级出处 |
list_extraction_paths | 列出可用的提取路径 | 带系统、版本、字段的路径定义 |
run_extraction | 执行命名提取路径 | 提取的记录,具有出处和重放哈希 |
detect_contradictions | 跨系统矛盾检测 | 具有严重性和证据的类型矛盾 |
validate_schema | 飞行前模式验证 | 路径兼容性、缺少字段、自定义 |
analyze_reality_gaps | 三方差距分析 | 设计差距、合规差距、影子流程 |
manage_finding | 创建/转换/查询结果 | 查找状态、历史、风险评分 |
get_finding_summary | 汇总发现统计数据 | 按州、来源、严重程度、平均风险统计 |
generate_handoff_packet | 制作审阅者交接包 | 执行摘要、调查结果、清单、检查表 |
治理工具
| 工具 | 目的 | 回报 |
|---|---|---|
ps_precheck | 检查是否允许操作 | woulAllow、woulHold、reason |
ps_list_holds | 列出待处理的搁置 | 搁置请求数组 |
ps_approve_hold | 批准已暂停的操作 | 使用auditId执行结果 |
ps_reject_hold | 拒绝已暂停的操作 | 成功布尔值 |
ps_agent_status | 获取代理断路器状态 | isAllowed,state,halt原因 |
ps_halt_agent | 立即停止代理 | 已停止,agent_id |
ps_resume_agent | 恢复已暂停的代理 | 已恢复,agent_id |
ps_stats | 获取治理统计信息 | 持有、暂停代理、审核条目 |
ps_frame_docs | 获取PromptSpeak文档 | 框架格式参考 |
______________________________________________________________________
许可证
MIT许可证-请参阅 许可证
这是企业友好的开源:
- 无限制地商业使用
- 自由修改和分发
- 无copyleft义务
- 无保修(按原样提供)
______________________________________________________________________
支持
______________________________________________________________________
AI作者
这个项目是用克劳德代码(Anthropic)构建的。所有提交都是共同编写的,如git历史中所反映的那样。架构、设计决策和分析方法由作者负责;该实现是在人工智能的帮助下进行配对编程的。
______________________________________________________________________
免责声明
此工具按原样提供,用于过程分析。它不会修改SAP数据。用户负责:
- 确保遵守组织数据访问策略
- 在做出商业决策之前验证调查结果
- 正确配置SAP授权
相关性并不意味着因果关系。 所有模式发现都应该根据实际业务流程进行验证。
