@chenchaolong/plugin-trade-compliance-workbench 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/dist/index.d.ts +146 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/constants.d.ts +12 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +20 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/entities/controlled-goods-record.entity.d.ts +17 -0
- package/dist/lib/entities/controlled-goods-record.entity.d.ts.map +1 -0
- package/dist/lib/entities/controlled-goods-record.entity.js +67 -0
- package/dist/lib/entities/controlled-goods-record.entity.js.map +1 -0
- package/dist/lib/entities/customs-workbook-generation.entity.d.ts +18 -0
- package/dist/lib/entities/customs-workbook-generation.entity.d.ts.map +1 -0
- package/dist/lib/entities/customs-workbook-generation.entity.js +71 -0
- package/dist/lib/entities/customs-workbook-generation.entity.js.map +1 -0
- package/dist/lib/entities/index.d.ts +7 -0
- package/dist/lib/entities/index.d.ts.map +1 -0
- package/dist/lib/entities/index.js +7 -0
- package/dist/lib/entities/index.js.map +1 -0
- package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts +16 -0
- package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts.map +1 -0
- package/dist/lib/entities/trade-compliance-import-batch.entity.js +59 -0
- package/dist/lib/entities/trade-compliance-import-batch.entity.js.map +1 -0
- package/dist/lib/entities/trade-compliance-review-item.entity.d.ts +22 -0
- package/dist/lib/entities/trade-compliance-review-item.entity.d.ts.map +1 -0
- package/dist/lib/entities/trade-compliance-review-item.entity.js +83 -0
- package/dist/lib/entities/trade-compliance-review-item.entity.js.map +1 -0
- package/dist/lib/entities/trade-product.entity.d.ts +27 -0
- package/dist/lib/entities/trade-product.entity.d.ts.map +1 -0
- package/dist/lib/entities/trade-product.entity.js +104 -0
- package/dist/lib/entities/trade-product.entity.js.map +1 -0
- package/dist/lib/entities/trade-supplier.entity.d.ts +14 -0
- package/dist/lib/entities/trade-supplier.entity.d.ts.map +1 -0
- package/dist/lib/entities/trade-supplier.entity.js +54 -0
- package/dist/lib/entities/trade-supplier.entity.js.map +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/app.js +49 -0
- package/dist/lib/trade-compliance-workbench-view.provider.d.ts +13 -0
- package/dist/lib/trade-compliance-workbench-view.provider.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbench-view.provider.js +211 -0
- package/dist/lib/trade-compliance-workbench-view.provider.js.map +1 -0
- package/dist/lib/trade-compliance-workbench.middleware.d.ts +10 -0
- package/dist/lib/trade-compliance-workbench.middleware.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbench.middleware.js +158 -0
- package/dist/lib/trade-compliance-workbench.middleware.js.map +1 -0
- package/dist/lib/trade-compliance-workbench.plugin.d.ts +8 -0
- package/dist/lib/trade-compliance-workbench.plugin.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbench.plugin.js +38 -0
- package/dist/lib/trade-compliance-workbench.plugin.js.map +1 -0
- package/dist/lib/trade-compliance-workbench.service.d.ts +77 -0
- package/dist/lib/trade-compliance-workbench.service.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbench.service.js +170 -0
- package/dist/lib/trade-compliance-workbench.service.js.map +1 -0
- package/dist/lib/trade-compliance-workbench.templates.d.ts +3 -0
- package/dist/lib/trade-compliance-workbench.templates.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbench.templates.js +59 -0
- package/dist/lib/trade-compliance-workbench.templates.js.map +1 -0
- package/dist/lib/trade-compliance-workbook.d.ts +4 -0
- package/dist/lib/trade-compliance-workbook.d.ts.map +1 -0
- package/dist/lib/trade-compliance-workbook.js +149 -0
- package/dist/lib/trade-compliance-workbook.js.map +1 -0
- package/dist/lib/trade-compliance.config.d.ts +227 -0
- package/dist/lib/trade-compliance.config.d.ts.map +1 -0
- package/dist/lib/trade-compliance.config.js +112 -0
- package/dist/lib/trade-compliance.config.js.map +1 -0
- package/dist/lib/trade-compliance.enrichment.d.ts +3 -0
- package/dist/lib/trade-compliance.enrichment.d.ts.map +1 -0
- package/dist/lib/trade-compliance.enrichment.js +41 -0
- package/dist/lib/trade-compliance.enrichment.js.map +1 -0
- package/dist/lib/trade-compliance.matching.d.ts +3 -0
- package/dist/lib/trade-compliance.matching.d.ts.map +1 -0
- package/dist/lib/trade-compliance.matching.js +62 -0
- package/dist/lib/trade-compliance.matching.js.map +1 -0
- package/dist/lib/types.d.ts +131 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/xpert-trade-compliance-workbench-assistant.yaml +20 -0
- package/package.json +82 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const text = (en_US, zh_Hans) => ({ en_US, zh_Hans });
|
|
3
|
+
export const TradeComplianceWorkbenchConfigSchema = z.object({
|
|
4
|
+
enrichment: z
|
|
5
|
+
.object({
|
|
6
|
+
apiBaseUrl: z.string().optional(),
|
|
7
|
+
mcpServerName: z.string().optional(),
|
|
8
|
+
timeoutMs: z.number().int().positive().optional()
|
|
9
|
+
})
|
|
10
|
+
.optional(),
|
|
11
|
+
templateDefaults: z
|
|
12
|
+
.object({
|
|
13
|
+
sellerEnglishName: z.string().optional(),
|
|
14
|
+
sellerEnglishAddress: z.string().optional(),
|
|
15
|
+
phone: z.string().optional(),
|
|
16
|
+
email: z.string().optional(),
|
|
17
|
+
bankBeneficiary: z.string().optional(),
|
|
18
|
+
bankName: z.string().optional(),
|
|
19
|
+
bankAddress: z.string().optional(),
|
|
20
|
+
bankAccountNo: z.string().optional(),
|
|
21
|
+
cnapsCode: z.string().optional(),
|
|
22
|
+
swiftCode: z.string().optional(),
|
|
23
|
+
paymentTerm: z.string().optional(),
|
|
24
|
+
tradeTerm: z.string().optional(),
|
|
25
|
+
origin: z.string().optional(),
|
|
26
|
+
destination: z.string().optional(),
|
|
27
|
+
packageType: z.string().optional(),
|
|
28
|
+
supervisionMode: z.string().optional(),
|
|
29
|
+
taxExemptionNature: z.string().optional(),
|
|
30
|
+
domesticSourceLocation: z.string().optional(),
|
|
31
|
+
exchangeRate: z.number().positive().optional()
|
|
32
|
+
})
|
|
33
|
+
.optional()
|
|
34
|
+
});
|
|
35
|
+
export function readTradeComplianceEnvDefaults() {
|
|
36
|
+
return {
|
|
37
|
+
enrichment: {
|
|
38
|
+
apiBaseUrl: optionalString(process.env['TRADE_COMPLIANCE_ENRICHMENT_API_BASE_URL']),
|
|
39
|
+
mcpServerName: optionalString(process.env['TRADE_COMPLIANCE_ENRICHMENT_MCP_SERVER']),
|
|
40
|
+
timeoutMs: optionalNumber(process.env['TRADE_COMPLIANCE_ENRICHMENT_TIMEOUT_MS'])
|
|
41
|
+
},
|
|
42
|
+
templateDefaults: {
|
|
43
|
+
sellerEnglishName: optionalString(process.env['TRADE_COMPLIANCE_SELLER_ENGLISH_NAME']),
|
|
44
|
+
sellerEnglishAddress: optionalString(process.env['TRADE_COMPLIANCE_SELLER_ENGLISH_ADDRESS']),
|
|
45
|
+
phone: optionalString(process.env['TRADE_COMPLIANCE_PHONE']),
|
|
46
|
+
email: optionalString(process.env['TRADE_COMPLIANCE_EMAIL']),
|
|
47
|
+
bankBeneficiary: optionalString(process.env['TRADE_COMPLIANCE_BANK_BENEFICIARY']),
|
|
48
|
+
bankName: optionalString(process.env['TRADE_COMPLIANCE_BANK_NAME']),
|
|
49
|
+
bankAddress: optionalString(process.env['TRADE_COMPLIANCE_BANK_ADDRESS']),
|
|
50
|
+
bankAccountNo: optionalString(process.env['TRADE_COMPLIANCE_BANK_ACCOUNT_NO']),
|
|
51
|
+
cnapsCode: optionalString(process.env['TRADE_COMPLIANCE_CNAPS_CODE']),
|
|
52
|
+
swiftCode: optionalString(process.env['TRADE_COMPLIANCE_SWIFT_CODE']),
|
|
53
|
+
paymentTerm: optionalString(process.env['TRADE_COMPLIANCE_PAYMENT_TERM']),
|
|
54
|
+
tradeTerm: optionalString(process.env['TRADE_COMPLIANCE_TRADE_TERM']),
|
|
55
|
+
origin: optionalString(process.env['TRADE_COMPLIANCE_ORIGIN']),
|
|
56
|
+
destination: optionalString(process.env['TRADE_COMPLIANCE_DESTINATION']),
|
|
57
|
+
packageType: optionalString(process.env['TRADE_COMPLIANCE_PACKAGE_TYPE']),
|
|
58
|
+
supervisionMode: optionalString(process.env['TRADE_COMPLIANCE_SUPERVISION_MODE']),
|
|
59
|
+
taxExemptionNature: optionalString(process.env['TRADE_COMPLIANCE_TAX_EXEMPTION_NATURE']),
|
|
60
|
+
domesticSourceLocation: optionalString(process.env['TRADE_COMPLIANCE_DOMESTIC_SOURCE_LOCATION']),
|
|
61
|
+
exchangeRate: optionalNumber(process.env['TRADE_COMPLIANCE_EXCHANGE_RATE'])
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export const TradeComplianceWorkbenchConfigFormSchema = {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: {
|
|
68
|
+
enrichment: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
title: text('Product Enrichment', '商品补全'),
|
|
71
|
+
properties: {
|
|
72
|
+
apiBaseUrl: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
title: text('API Base URL', 'API 地址')
|
|
75
|
+
},
|
|
76
|
+
mcpServerName: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
title: text('MCP Server Name', 'MCP 服务名')
|
|
79
|
+
},
|
|
80
|
+
timeoutMs: {
|
|
81
|
+
type: 'number',
|
|
82
|
+
title: text('Timeout (ms)', '超时时间(毫秒)')
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
templateDefaults: {
|
|
87
|
+
type: 'object',
|
|
88
|
+
title: text('Customs Workbook Defaults', '报关资料默认值'),
|
|
89
|
+
properties: {
|
|
90
|
+
sellerEnglishName: { type: 'string', title: text('Seller English Name', '卖方英文名') },
|
|
91
|
+
sellerEnglishAddress: { type: 'string', title: text('Seller English Address', '卖方英文地址') },
|
|
92
|
+
paymentTerm: { type: 'string', title: text('Payment Term', '付款方式') },
|
|
93
|
+
tradeTerm: { type: 'string', title: text('Trade Term', '成交方式') },
|
|
94
|
+
origin: { type: 'string', title: text('Origin', '起运地') },
|
|
95
|
+
destination: { type: 'string', title: text('Destination', '目的地') },
|
|
96
|
+
exchangeRate: { type: 'number', title: text('Exchange Rate', '汇率') }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
function optionalString(value) {
|
|
102
|
+
const normalized = value?.trim();
|
|
103
|
+
return normalized ? normalized : undefined;
|
|
104
|
+
}
|
|
105
|
+
function optionalNumber(value) {
|
|
106
|
+
if (!value?.trim()) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
const parsed = Number(value);
|
|
110
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=trade-compliance.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade-compliance.config.js","sourceRoot":"","sources":["../../src/lib/trade-compliance.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade-compliance.enrichment.d.ts","sourceRoot":"","sources":["../../src/lib/trade-compliance.enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAiBjF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAkB/G"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const MOCK_ENRICHMENT = [
|
|
2
|
+
{
|
|
3
|
+
keywords: ['服务器', 'server', 'hpc-8208', 'hpc-7242'],
|
|
4
|
+
hsCode: '8471499100',
|
|
5
|
+
taxRefundRate: '13%',
|
|
6
|
+
englishName: 'Server'
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
keywords: ['数字计算机', 'computer'],
|
|
10
|
+
hsCode: '8471501010',
|
|
11
|
+
taxRefundRate: '13%',
|
|
12
|
+
englishName: 'Digital Computer'
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
export async function enrichProductWithFallback(input) {
|
|
16
|
+
const text = [input.productName, input.model, input.description, input.hsCode].filter(Boolean).join(' ').toLowerCase();
|
|
17
|
+
const match = MOCK_ENRICHMENT.find((record) => record.keywords.some((keyword) => text.includes(keyword.toLowerCase())));
|
|
18
|
+
if (match) {
|
|
19
|
+
return {
|
|
20
|
+
source: 'mock',
|
|
21
|
+
hsCode: input.hsCode ?? match.hsCode,
|
|
22
|
+
taxRefundRate: match.taxRefundRate,
|
|
23
|
+
englishName: match.englishName
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
source: 'mock',
|
|
28
|
+
hsCode: input.hsCode,
|
|
29
|
+
englishName: toEnglishFallback(input.productName)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function toEnglishFallback(productName) {
|
|
33
|
+
if (!productName?.trim()) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (productName.includes('支架')) {
|
|
37
|
+
return 'Customized Bracket';
|
|
38
|
+
}
|
|
39
|
+
return productName;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=trade-compliance.enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade-compliance.enrichment.js","sourceRoot":"","sources":["../../src/lib/trade-compliance.enrichment.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG;IACtB;QACE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;QACnD,MAAM,EAAE,YAAY;QACpB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;QAC/B,MAAM,EAAE,YAAY;QACpB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,kBAAkB;KAChC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAA6B;IAC3E,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACtH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IAEvH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;YACpC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;KAClD,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,WAA+B;IACxD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ControlledGoodsMatchCandidate, ControlledGoodsMatchResult, ProductMatchInput } from './types.js';
|
|
2
|
+
export declare function matchControlledGoods(product: ProductMatchInput, candidates: ControlledGoodsMatchCandidate[]): ControlledGoodsMatchResult;
|
|
3
|
+
//# sourceMappingURL=trade-compliance.matching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade-compliance.matching.d.ts","sourceRoot":"","sources":["../../src/lib/trade-compliance.matching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,6BAA6B,EAE7B,0BAA0B,EAC1B,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,6BAA6B,EAAE,GAC1C,0BAA0B,CA0B5B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function matchControlledGoods(product, candidates) {
|
|
2
|
+
const enabledCandidates = candidates.filter((candidate) => candidate.enabled !== false);
|
|
3
|
+
const matches = [];
|
|
4
|
+
for (const candidate of enabledCandidates) {
|
|
5
|
+
const match = matchCandidate(product, candidate);
|
|
6
|
+
if (match) {
|
|
7
|
+
matches.push(match);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
if (!matches.length) {
|
|
11
|
+
return {
|
|
12
|
+
status: 'not_controlled',
|
|
13
|
+
matches: []
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const status = matches.some((match) => match.reason === 'hs_code' || match.reason === 'product_name')
|
|
17
|
+
? 'controlled'
|
|
18
|
+
: 'suspected';
|
|
19
|
+
return {
|
|
20
|
+
status,
|
|
21
|
+
matches,
|
|
22
|
+
controlNote: matches.map((match) => match.controlNote).filter(Boolean).join('; ') || undefined
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function matchCandidate(product, candidate) {
|
|
26
|
+
const productHsCode = normalizeCode(product.hsCode);
|
|
27
|
+
const candidateHsCode = normalizeCode(candidate.hsCode);
|
|
28
|
+
if (productHsCode && candidateHsCode && productHsCode === candidateHsCode) {
|
|
29
|
+
return toMatch(candidate, 'hs_code', candidateHsCode);
|
|
30
|
+
}
|
|
31
|
+
const productName = normalizeText(product.productName);
|
|
32
|
+
const candidateName = normalizeText(candidate.productName);
|
|
33
|
+
if (productName && candidateName && productName === candidateName) {
|
|
34
|
+
return toMatch(candidate, 'product_name', candidate.productName ?? candidateName);
|
|
35
|
+
}
|
|
36
|
+
const searchableText = normalizeText([product.productName, product.model, product.description, product.hsCode].join(' '));
|
|
37
|
+
const keyword = (candidate.keywords ?? []).find((item) => {
|
|
38
|
+
const normalized = normalizeText(item);
|
|
39
|
+
return normalized && searchableText.includes(normalized);
|
|
40
|
+
});
|
|
41
|
+
if (keyword) {
|
|
42
|
+
return toMatch(candidate, 'keyword', keyword);
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
function toMatch(candidate, reason, matchedValue) {
|
|
47
|
+
return {
|
|
48
|
+
controlledGoodsId: candidate.id,
|
|
49
|
+
productName: candidate.productName,
|
|
50
|
+
hsCode: candidate.hsCode,
|
|
51
|
+
controlNote: candidate.controlNote,
|
|
52
|
+
reason,
|
|
53
|
+
matchedValue
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function normalizeCode(value) {
|
|
57
|
+
return value?.replace(/\D/g, '').trim();
|
|
58
|
+
}
|
|
59
|
+
function normalizeText(value) {
|
|
60
|
+
return value?.trim().toLowerCase() ?? '';
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=trade-compliance.matching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade-compliance.matching.js","sourceRoot":"","sources":["../../src/lib/trade-compliance.matching.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export type TradeComplianceScope = {
|
|
2
|
+
tenantId?: string;
|
|
3
|
+
organizationId?: string | null;
|
|
4
|
+
workspaceId?: string | null;
|
|
5
|
+
assistantId?: string | null;
|
|
6
|
+
projectId?: string | null;
|
|
7
|
+
userId?: string | null;
|
|
8
|
+
};
|
|
9
|
+
export type ReviewStatus = 'pending' | 'confirmed' | 'rejected' | 'needs_revision';
|
|
10
|
+
export type ReviewItemType = 'controlled_goods' | 'supplier_product' | 'customs_workbook';
|
|
11
|
+
export type ImportBatchType = 'controlled_goods_file' | 'supplier_contract' | 'sales_contract';
|
|
12
|
+
export type ControlledGoodsStatus = 'unchecked' | 'not_controlled' | 'suspected' | 'controlled';
|
|
13
|
+
export type ProductMatchInput = {
|
|
14
|
+
productName?: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
hsCode?: string;
|
|
18
|
+
};
|
|
19
|
+
export type ControlledGoodsMatchCandidate = {
|
|
20
|
+
id: string;
|
|
21
|
+
productName?: string;
|
|
22
|
+
hsCode?: string;
|
|
23
|
+
keywords?: string[];
|
|
24
|
+
controlNote?: string;
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type ControlledGoodsMatchReason = 'hs_code' | 'product_name' | 'keyword';
|
|
28
|
+
export type ControlledGoodsMatch = {
|
|
29
|
+
controlledGoodsId: string;
|
|
30
|
+
productName?: string;
|
|
31
|
+
hsCode?: string;
|
|
32
|
+
controlNote?: string;
|
|
33
|
+
reason: ControlledGoodsMatchReason;
|
|
34
|
+
matchedValue: string;
|
|
35
|
+
};
|
|
36
|
+
export type ControlledGoodsMatchResult = {
|
|
37
|
+
status: ControlledGoodsStatus;
|
|
38
|
+
matches: ControlledGoodsMatch[];
|
|
39
|
+
controlNote?: string;
|
|
40
|
+
};
|
|
41
|
+
export type ProductEnrichmentInput = {
|
|
42
|
+
productName?: string;
|
|
43
|
+
model?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
hsCode?: string;
|
|
46
|
+
};
|
|
47
|
+
export type ProductEnrichmentResult = {
|
|
48
|
+
source: 'mock' | 'api' | 'mcp';
|
|
49
|
+
hsCode?: string;
|
|
50
|
+
taxRefundRate?: string;
|
|
51
|
+
englishName?: string;
|
|
52
|
+
};
|
|
53
|
+
export type TradeTemplateDefaults = {
|
|
54
|
+
sellerEnglishName?: string;
|
|
55
|
+
sellerEnglishAddress?: string;
|
|
56
|
+
phone?: string;
|
|
57
|
+
email?: string;
|
|
58
|
+
bankBeneficiary?: string;
|
|
59
|
+
bankName?: string;
|
|
60
|
+
bankAddress?: string;
|
|
61
|
+
bankAccountNo?: string;
|
|
62
|
+
cnapsCode?: string;
|
|
63
|
+
swiftCode?: string;
|
|
64
|
+
paymentTerm?: string;
|
|
65
|
+
tradeTerm?: string;
|
|
66
|
+
origin?: string;
|
|
67
|
+
destination?: string;
|
|
68
|
+
packageType?: string;
|
|
69
|
+
supervisionMode?: string;
|
|
70
|
+
taxExemptionNature?: string;
|
|
71
|
+
domesticSourceLocation?: string;
|
|
72
|
+
exchangeRate?: number;
|
|
73
|
+
};
|
|
74
|
+
export type CustomsWorkbookItem = {
|
|
75
|
+
productName?: string;
|
|
76
|
+
englishName?: string;
|
|
77
|
+
model?: string;
|
|
78
|
+
description?: string;
|
|
79
|
+
quantity?: number;
|
|
80
|
+
unit?: string;
|
|
81
|
+
unitPrice?: number;
|
|
82
|
+
amount?: number;
|
|
83
|
+
hsCode?: string;
|
|
84
|
+
cartonNo?: string;
|
|
85
|
+
dimension?: string;
|
|
86
|
+
netWeight?: number;
|
|
87
|
+
grossWeight?: number;
|
|
88
|
+
};
|
|
89
|
+
export type CustomsWorkbookSource = {
|
|
90
|
+
invoiceNo?: string;
|
|
91
|
+
contractNo?: string;
|
|
92
|
+
date?: string;
|
|
93
|
+
buyerName?: string;
|
|
94
|
+
buyerAddress?: string;
|
|
95
|
+
sellerName?: string;
|
|
96
|
+
sellerEnglishName?: string;
|
|
97
|
+
sellerEnglishAddress?: string;
|
|
98
|
+
paymentTerm?: string;
|
|
99
|
+
tradeTerm?: string;
|
|
100
|
+
origin?: string;
|
|
101
|
+
destination?: string;
|
|
102
|
+
currency?: string;
|
|
103
|
+
exchangeRate?: number;
|
|
104
|
+
packageType?: string;
|
|
105
|
+
supervisionMode?: string;
|
|
106
|
+
taxExemptionNature?: string;
|
|
107
|
+
domesticSourceLocation?: string;
|
|
108
|
+
bankBeneficiary?: string;
|
|
109
|
+
bankName?: string;
|
|
110
|
+
bankAddress?: string;
|
|
111
|
+
bankAccountNo?: string;
|
|
112
|
+
cnapsCode?: string;
|
|
113
|
+
swiftCode?: string;
|
|
114
|
+
items?: CustomsWorkbookItem[];
|
|
115
|
+
};
|
|
116
|
+
export type CustomsWorkbookModel = Required<Pick<CustomsWorkbookSource, 'invoiceNo'>> & Omit<CustomsWorkbookSource, 'invoiceNo'> & {
|
|
117
|
+
sellerEnglishName?: string;
|
|
118
|
+
sellerEnglishAddress?: string;
|
|
119
|
+
paymentTerm?: string;
|
|
120
|
+
tradeTerm?: string;
|
|
121
|
+
origin?: string;
|
|
122
|
+
destination?: string;
|
|
123
|
+
exchangeRate?: number;
|
|
124
|
+
items: CustomsWorkbookItem[];
|
|
125
|
+
};
|
|
126
|
+
export type CustomsWorkbookBufferResult = {
|
|
127
|
+
fileName: string;
|
|
128
|
+
sheetNames: string[];
|
|
129
|
+
buffer: Buffer;
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: 外贸合规工作台助手
|
|
2
|
+
description: 协助解析管控商品目录、供应商合同和购销合同,并保存待审核结果。
|
|
3
|
+
instructions: |
|
|
4
|
+
你是外贸合规工作台助手。你的职责是把上传文件转换为可审核的结构化数据。
|
|
5
|
+
|
|
6
|
+
管控商品目录:
|
|
7
|
+
- 识别商品名称、关键词、海关编码、管控说明和来源位置。
|
|
8
|
+
- 保存为待审核管控商品条目,不要直接承诺已经完成合规判定。
|
|
9
|
+
|
|
10
|
+
供应商合同:
|
|
11
|
+
- 识别供应商信息、合同信息和商品明细。
|
|
12
|
+
- 对每个商品调用商品补全工具获取海关编码、退税率和英文品名。
|
|
13
|
+
- 调用管控匹配工具生成风险提示。风险只作为提示,不阻止入库。
|
|
14
|
+
|
|
15
|
+
购销合同:
|
|
16
|
+
- 识别生成报关资料所需字段。
|
|
17
|
+
- 使用系统默认值补足合同缺失字段。
|
|
18
|
+
- 保存待审核数据,审核通过后再记录生成的报关资料工作簿。
|
|
19
|
+
|
|
20
|
+
所有识别结果必须进入对比审核,不要跳过人工确认。
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chenchaolong/plugin-trade-compliance-workbench",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Trade Compliance Workbench app plugin for controlled goods review, supplier product management, and customs workbook generation.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "XpertAI",
|
|
7
|
+
"url": "https://xpertai.cn"
|
|
8
|
+
},
|
|
9
|
+
"license": "AGPL-3.0",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/xpert-ai/xpert-plugins.git",
|
|
13
|
+
"directory": "community/apps/trade-compliance-workbench"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/xpert-ai/xpert-plugins/issues"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"main": "./dist/index.js",
|
|
20
|
+
"module": "./dist/index.js",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"exports": {
|
|
23
|
+
"./package.json": "./package.json",
|
|
24
|
+
".": {
|
|
25
|
+
"@xpert-plugins-starter/source": "./src/index.ts",
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"!**/*.tsbuildinfo"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.lib.json && node scripts/copy-assets.mjs",
|
|
37
|
+
"lint": "echo \"(todo) add lint\"",
|
|
38
|
+
"test": "tsc -p tsconfig.spec.json --noEmit"
|
|
39
|
+
},
|
|
40
|
+
"xpert": {
|
|
41
|
+
"plugin": {
|
|
42
|
+
"level": "system"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"tslib": "^2.3.0",
|
|
47
|
+
"xlsx": "^0.18.5"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@langchain/core": ">=0.3.0",
|
|
51
|
+
"@nestjs/common": "^11.1.6",
|
|
52
|
+
"@nestjs/core": "^11.1.6",
|
|
53
|
+
"@nestjs/typeorm": "^11.0.0",
|
|
54
|
+
"@xpert-ai/contracts": "^3.10.1",
|
|
55
|
+
"@xpert-ai/plugin-sdk": "^3.10.1",
|
|
56
|
+
"react": ">=18",
|
|
57
|
+
"react-dom": ">=18",
|
|
58
|
+
"typeorm": "^0.3.24",
|
|
59
|
+
"yaml": ">=2.0.0",
|
|
60
|
+
"zod": "3.25.67"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@langchain/core": "0.3.72",
|
|
64
|
+
"@nestjs/common": "^11.1.6",
|
|
65
|
+
"@nestjs/core": "^11.1.6",
|
|
66
|
+
"@nestjs/typeorm": "^11.0.0",
|
|
67
|
+
"@types/jest": "^29.5.14",
|
|
68
|
+
"@types/node": "^20.19.9",
|
|
69
|
+
"@xpert-ai/contracts": "^3.10.1",
|
|
70
|
+
"@xpert-ai/plugin-sdk": "^3.10.1",
|
|
71
|
+
"react": "^18.3.1",
|
|
72
|
+
"react-dom": "^18.3.1",
|
|
73
|
+
"reflect-metadata": "^0.2.2",
|
|
74
|
+
"typeorm": "^0.3.24",
|
|
75
|
+
"typescript": "^5.9.2",
|
|
76
|
+
"yaml": "^2.8.1",
|
|
77
|
+
"zod": "3.25.67"
|
|
78
|
+
},
|
|
79
|
+
"publishConfig": {
|
|
80
|
+
"access": "public"
|
|
81
|
+
}
|
|
82
|
+
}
|