外贸合规工作台
@chenchaolong/plugin-trade-compliance-workbench 是面向 data-xpert 的组织级外贸合规插件,按照仓库内需求确认、重建设计、数据模型和固定 Excel 模板从零重建。
功能范围
- 首页前端静态风险提示与固定业务流程
- 管控商品目录、公司制裁目录及文件批次导入
- 供应商、采购订单、采购商品三级采购合规管理
- 唯一客户、客户合同七类关键条款及 AI 风险建议
- 基于客户合同和采购订单编号实时派生销售订单与商品
- 客户/订单定价利润率、收付款、退税、合规利润率与换汇成本
- PI、CI、PL、报关单独立生成、历史下载与 Univer 在线审核
- 采购和销售人民币实时分析
- 企业、银行、利润规则和月度美元汇率设置
销售订单和销售商品不建立持久化副本;采购合同和客户合同重复时阻止入库;业务删除全部使用逻辑删除。
首页操作提醒与业务流程由前端静态维护,不在系统设置中编辑。数据模型不包含风险提示配置表;插件升级启动时物理删除旧表 plugin_trade_compliance_risk_notice_settings,删除失败会阻止插件启动。
开发
pnpm install
pnpm test
pnpm typecheck
pnpm build
插件入口为 dist/index.js,插件级别固定为 organization。
本地预览
pnpm build && pnpm preview
预览默认监听 127.0.0.1 的随机可用端口,并在终端输出访问地址;如需固定端口,可执行 PORT=4173 pnpm preview。在运行预览的终端按 Ctrl+C 停止服务。
视觉检查
pnpm visual:check
该命令生成 38 张原型映射截图、9 张窄屏截图和 3 张布局契约截图,共 50 张,写入 artifacts/visual-check/。检查覆盖 route、页面标题、dialog、关键字段、操作列策略、184/56px 侧栏、内部滚动、首页八步四列流程、按钮图标,以及页面和控件的溢出、重叠问题。
目录解析样本验证
混合目录管线对 XLS/XLSX、结构化 DOCX 和带文本表格层的 PDF 使用代码解析;无法验证的局部来源块进入 ChatKit/人工复核,旧 DOC、图片和扫描 PDF 回退兼容模式。可使用明确提供的样本路径运行只读验证:
pnpm verify:catalog-samples -- "/path/to/controlled-catalog.pdf" "/path/to/sanction-catalog.docx"
命令会先构建插件,再输出 PDF schema、自动接受数、复核原因、DOCX 实体/自然人数和别名统计;不会写入数据库。
演示数据初始化
警告:以下命令会向
XPERT_ORG_ID指定的真实组织写入演示业务数据和演示 XLSX 文件。请先确认目标组织,生产组织不要执行。
演示数据绝不会在插件安装、bootstrap 或 startup 时自动初始化,只能通过显式脚本触发。执行用户必须拥有目标组织的 ORG_DEMO_EDIT 权限。每个租户/组织使用固定 marker DEMO-20260725 独立幂等:首次执行在单一数据库事务中写入完整演示数据并输出 inserted: true、marker、数据年份和各类记录数;再次执行输出 inserted: false、reason: "already_seeded" 和 marker,不会再次保存记录或文件。
XPERT_API_URL=http://localhost:3000 \
XPERT_TOKEN='Bearer <login-jwt>' \
XPERT_ORG_ID='<organization-uuid>' \
XPERT_ID='<xpert-uuid>' \
pnpm seed:demo
必需环境变量仅为 XPERT_API_URL、XPERT_TOKEN、XPERT_ORG_ID 和 XPERT_ID;可选的 XPERT_HTTP_TIMEOUT_MS 用于设置 1 到 300000 毫秒的请求超时,默认 15000。脚本只从外部环境读取这些值,不读取数据库,也不会输出 token;失败信息中的已配置 token 会被脱敏。它会按 manifest 的 source.plugin 精确发现当前插件并调用严格确认的 seed_demo_data action;XPERT_TOKEN 可以是原始 JWT 或完整的 Bearer <jwt> 值。
装箱批次解析与语言
上传供应商 PL 后按真实任务 ID 展示排队、提取、AI 解析、校验、保存及终态;关闭后重新打开可恢复。首次打开查询一次,仅有进行中任务时每五秒自动查询,任务结束即停止;无任务时可按需手动刷新。进行中任务和最近结果展开,较早结果折叠。相同采购合同或批次的活动任务会阻止重复上传;替换期间暂停目标批次的编辑和确认,相关订单暂停生成。状态查询走只读通道,不占用 Excel 保存操作。生成提交前会在组织锁内再次校验解析状态和装箱指纹。
PI、CI、PL 优先使用已审核的英文商品资料;未上传资料或个别字段缺失时,以采购商品信息为基础翻译,已有英文、型号、数量及包装数字不重复翻译。翻译失败保留为空并标记待核对,不向商品描述混入提示文字。报关单保留中文,不做英文翻译。合并生成时共享翻译结果,详细核对位置随文件保存。
供应商资料与出货文件币种
- 先上传并审核采购合同(PDF、DOC/DOCX、XLS/XLSX 或图片),采购商品数量和人民币采购价格是业务主数据。
- 上传客户框架合同并关联合同、维护利润率。界面名称仍为“利润率”,计算使用加价率:人民币销售单价 = 采购单价 × (1 + 利润率)。自动计算的单价、金额保留两位小数;手工维护的高精度单价及商品金额继续保留。
- 进入生成出货文件,按需展开“供应商资料(可选)”。英文报价资料仅补充英文品名、描述、型号和单位;其报价金额与币种不参与定价。报关商品资料仅补充报关品名、HS、规格型号、品牌、材质、用途和申报要素。解析完成后核对匹配并保存审核,生成时自动使用每件商品最新已审核资料。无英文资料时回退采购信息翻译,无报关资料时按已有采购信息生成待核对文件。
- 供应商装箱单仍单独导入,用于箱数、尺寸、毛净重、体积及共用包装;不替代采购商品数量和价格。资料数量、型号或 HS 不一致会列入核对清单,不覆盖采购数据。
- 生成文件时选择 CNY 或 USD,与报价单、银行选择解耦。USD 单价 = 人民币销售单价 ÷ 月度美元兑人民币汇率(1 USD = X CNY),逐条取所属采购订单下单日期的月份;跨月订单各取各自月份汇率。缺日期、日期无效、缺少或无效汇率会阻止生成,并提示补全对应数据。
- PI、CI 和报关文件使用同一输出定价快照;PL 无金额字段。销售订单、收付款及数据分析始终使用人民币。文件快照记录来源行、资料版本、币种、汇率月份及金额,后续资料或汇率变化不会改写历史文件。若手工总额覆盖与明细金额不一致,先调整明细或清除总额覆盖,避免生成无法对账的文件。
英文资料、报关资料支持原文件预览、下载、移除、任务重试及组织隔离。相同文件在相同采购范围内不会重复解析;审核后的来源信息保留,旧任务回调不能覆盖新解析结果。清空业务数据会移除这些业务资料,继续保留管控商品目录及公司制裁目录。
配置
- 销售文件(PI / CI / PL / 报关单)从工作台生成和编辑保存时使用平台专家/项目工作区文件接口,
storageFileId保存版本化的可移植工作区引用。下载按记录中的原工作区归属读取,并由平台验证当前访问权限;工作区服务不可用时明确报错,不降级到 API 容器本地目录。旧本地记录继续兼容读取;重新生成会创建工作区版本,不再复用旧本地缓存。已丢失且无备份的原文件需要重新生成,不能恢复丢失的人工编辑。 TRADE_COMPLIANCE_DATA_DIR:本地兼容存储目录(上传源文件、Logo 和历史销售文件)。生产环境必须显式配置为持久化目录(应用目录之外、挂载持久卷);未配置时使用用户主目录下的.trade-compliance-data兜底,并在启动日志中告警。新写入的文件会以绝对路径作为存储标识,后续修改该配置不影响已有文件的读取TRADE_COMPLIANCE_LEGACY_DATA_DIRS:冒号分隔的历史数据目录列表(可选)。存量文件(旧相对标识)读取失败时,会依次尝试当前目录、历史默认目录、插件进程自动探测到的本机.trade-compliance-data目录(常见挂载点一层,如 /srv、/home、/opt 等),以及这里显式指定的目录;找回后自动复制到当前目录。零配置即可完成部署迁移后的历史文件恢复TRADE_COMPLIANCE_MAX_UPLOAD_MB:上传上限,默认 20TRADE_COMPLIANCE_HS_BASE_URL:HS编码网地址,默认https://hsbianma.comTRADE_COMPLIANCE_HS_TIMEOUT_MS:海关编码查询超时TRADE_COMPLIANCE_TRANSLATION_ENDPOINT:OpenAI 兼容翻译接口,默认千问兼容地址TRADE_COMPLIANCE_TRANSLATION_API_KEY:翻译服务密钥,必须通过插件secret字段或运行环境注入TRADE_COMPLIANCE_TRANSLATION_MODEL:翻译模型,默认qwen3.6-flashTRADE_COMPLIANCE_TRANSLATION_TARGET_LANGUAGE:默认zh-CNTRADE_COMPLIANCE_TRANSLATION_BATCH_SIZE:单个模型请求记录数,默认 10,最大 100TRADE_COMPLIANCE_TRANSLATION_CONCURRENCY:并发请求数,默认 5,最大 20TRADE_COMPLIANCE_TRANSLATION_TIMEOUT_MS:单个请求超时,默认 120000
目录快速管线会自动翻译纯翻译复核块,管控商品保留名称和管控说明原文,制裁公司保留法定名称和别名,只翻译制裁原因与备注。翻译失败的记录会释放回待复核队列,不会写入伪翻译或丢失来源证据。销售文件仍兼容原有单文本翻译适配器。
真实千问连通性验证不会输出密钥:
TRADE_COMPLIANCE_TRANSLATION_API_KEY='<plugin-secret>' pnpm verify:qwen-translation
使用真实 PostgreSQL、真实千问和两份目录文件执行解析、翻译、复核、发布及来源证据端到端验收:
TRADE_COMPLIANCE_TEST_POSTGRES_URL='<postgres-url>' \
TRADE_COMPLIANCE_TRANSLATION_API_KEY='<plugin-secret>' \
pnpm verify:catalog-e2e -- '<controlled-catalog.pdf>' '<sanction-catalog.docx>'
完整验证
pnpm test
pnpm typecheck
pnpm build
pnpm visual:check
pnpm -C /Users/chenchaolong/项目/xpert-plugins/plugin-dev-harness install
pnpm -C /Users/chenchaolong/项目/xpert-plugins/plugin-dev-harness build
node /Users/chenchaolong/项目/xpert-plugins/plugin-dev-harness/dist/index.js \
--workspace /Users/chenchaolong/项目/trade-compliance-workbench \
--plugin @chenchaolong/plugin-trade-compliance-workbench
npm pack --dry-run
git diff --check
git status --short
rg -n '\b(TODO|TBD)\b' src scripts
验证时应确认测试、类型检查、构建和视觉检查退出码为 0,生命周期输出包含 Plugin loaded successfully,npm pack --dry-run 清单包含应用 JS/CSS、编辑器资源和模板;最后检查 diff 无空白错误且无未解决占位符。Workbench slot 名称由 provider 契约测试单独校验。
业务规则以以下文件为准:
docs/superpowers/specs/2026-07-22-trade-compliance-workbench-requirements-confirmation.mddocs/superpowers/specs/2026-07-22-trade-compliance-workbench-redesign.mddocs/superpowers/specs/2026-07-23-trade-compliance-workbench-data-model-confirmation.md
多采购单装箱批次
供应商 PL 按独立装箱批次上传,可关联同供应商、同客户的多张采购单;同一采购单也可选择多个分批出货批次。销售合规管理和销售文件管理共用批次选择与匹配核对界面。已有装箱单可直接关联其他采购单,不必重复上传。替换文件须指定批次,保留批次标识并递增版本。
匹配核对可编辑包装原始数据、分配采购商品及实际数量,并明确是否计入商品出货。唯一英文名称仍存在规格冲突时保持待确认。主机、闸杆、配件对应的物理包装仅汇总一次;跨单共箱单独生成时须明确箱数、毛重和体积分配。明确随主机共箱的辅助包装可人工设为 0 箱并取消商品数量计入,系统验证存在同商品的主包装,不将未知指标默认归零。
PL 使用所选批次实际出货数量,PI/CI 继续使用订单数量和金额。草稿明确标识 DRAFT,并提示缺失或未确认范围;正式生成要求批次已确认、商品分配完整、数量不超采购数量及包装指标完整。旧数据迁移只回填缺失关联,不覆盖人工核对结果;热刷新后的首次装箱服务调用也执行必要迁移。