@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.
Files changed (80) hide show
  1. package/README.md +36 -0
  2. package/dist/index.d.ts +146 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +127 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/constants.d.ts +12 -0
  7. package/dist/lib/constants.d.ts.map +1 -0
  8. package/dist/lib/constants.js +20 -0
  9. package/dist/lib/constants.js.map +1 -0
  10. package/dist/lib/entities/controlled-goods-record.entity.d.ts +17 -0
  11. package/dist/lib/entities/controlled-goods-record.entity.d.ts.map +1 -0
  12. package/dist/lib/entities/controlled-goods-record.entity.js +67 -0
  13. package/dist/lib/entities/controlled-goods-record.entity.js.map +1 -0
  14. package/dist/lib/entities/customs-workbook-generation.entity.d.ts +18 -0
  15. package/dist/lib/entities/customs-workbook-generation.entity.d.ts.map +1 -0
  16. package/dist/lib/entities/customs-workbook-generation.entity.js +71 -0
  17. package/dist/lib/entities/customs-workbook-generation.entity.js.map +1 -0
  18. package/dist/lib/entities/index.d.ts +7 -0
  19. package/dist/lib/entities/index.d.ts.map +1 -0
  20. package/dist/lib/entities/index.js +7 -0
  21. package/dist/lib/entities/index.js.map +1 -0
  22. package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts +16 -0
  23. package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts.map +1 -0
  24. package/dist/lib/entities/trade-compliance-import-batch.entity.js +59 -0
  25. package/dist/lib/entities/trade-compliance-import-batch.entity.js.map +1 -0
  26. package/dist/lib/entities/trade-compliance-review-item.entity.d.ts +22 -0
  27. package/dist/lib/entities/trade-compliance-review-item.entity.d.ts.map +1 -0
  28. package/dist/lib/entities/trade-compliance-review-item.entity.js +83 -0
  29. package/dist/lib/entities/trade-compliance-review-item.entity.js.map +1 -0
  30. package/dist/lib/entities/trade-product.entity.d.ts +27 -0
  31. package/dist/lib/entities/trade-product.entity.d.ts.map +1 -0
  32. package/dist/lib/entities/trade-product.entity.js +104 -0
  33. package/dist/lib/entities/trade-product.entity.js.map +1 -0
  34. package/dist/lib/entities/trade-supplier.entity.d.ts +14 -0
  35. package/dist/lib/entities/trade-supplier.entity.d.ts.map +1 -0
  36. package/dist/lib/entities/trade-supplier.entity.js +54 -0
  37. package/dist/lib/entities/trade-supplier.entity.js.map +1 -0
  38. package/dist/lib/remote-components/trade-compliance-workbench/app.js +49 -0
  39. package/dist/lib/trade-compliance-workbench-view.provider.d.ts +13 -0
  40. package/dist/lib/trade-compliance-workbench-view.provider.d.ts.map +1 -0
  41. package/dist/lib/trade-compliance-workbench-view.provider.js +211 -0
  42. package/dist/lib/trade-compliance-workbench-view.provider.js.map +1 -0
  43. package/dist/lib/trade-compliance-workbench.middleware.d.ts +10 -0
  44. package/dist/lib/trade-compliance-workbench.middleware.d.ts.map +1 -0
  45. package/dist/lib/trade-compliance-workbench.middleware.js +158 -0
  46. package/dist/lib/trade-compliance-workbench.middleware.js.map +1 -0
  47. package/dist/lib/trade-compliance-workbench.plugin.d.ts +8 -0
  48. package/dist/lib/trade-compliance-workbench.plugin.d.ts.map +1 -0
  49. package/dist/lib/trade-compliance-workbench.plugin.js +38 -0
  50. package/dist/lib/trade-compliance-workbench.plugin.js.map +1 -0
  51. package/dist/lib/trade-compliance-workbench.service.d.ts +77 -0
  52. package/dist/lib/trade-compliance-workbench.service.d.ts.map +1 -0
  53. package/dist/lib/trade-compliance-workbench.service.js +170 -0
  54. package/dist/lib/trade-compliance-workbench.service.js.map +1 -0
  55. package/dist/lib/trade-compliance-workbench.templates.d.ts +3 -0
  56. package/dist/lib/trade-compliance-workbench.templates.d.ts.map +1 -0
  57. package/dist/lib/trade-compliance-workbench.templates.js +59 -0
  58. package/dist/lib/trade-compliance-workbench.templates.js.map +1 -0
  59. package/dist/lib/trade-compliance-workbook.d.ts +4 -0
  60. package/dist/lib/trade-compliance-workbook.d.ts.map +1 -0
  61. package/dist/lib/trade-compliance-workbook.js +149 -0
  62. package/dist/lib/trade-compliance-workbook.js.map +1 -0
  63. package/dist/lib/trade-compliance.config.d.ts +227 -0
  64. package/dist/lib/trade-compliance.config.d.ts.map +1 -0
  65. package/dist/lib/trade-compliance.config.js +112 -0
  66. package/dist/lib/trade-compliance.config.js.map +1 -0
  67. package/dist/lib/trade-compliance.enrichment.d.ts +3 -0
  68. package/dist/lib/trade-compliance.enrichment.d.ts.map +1 -0
  69. package/dist/lib/trade-compliance.enrichment.js +41 -0
  70. package/dist/lib/trade-compliance.enrichment.js.map +1 -0
  71. package/dist/lib/trade-compliance.matching.d.ts +3 -0
  72. package/dist/lib/trade-compliance.matching.d.ts.map +1 -0
  73. package/dist/lib/trade-compliance.matching.js +62 -0
  74. package/dist/lib/trade-compliance.matching.js.map +1 -0
  75. package/dist/lib/types.d.ts +131 -0
  76. package/dist/lib/types.d.ts.map +1 -0
  77. package/dist/lib/types.js +2 -0
  78. package/dist/lib/types.js.map +1 -0
  79. package/dist/xpert-trade-compliance-workbench-assistant.yaml +20 -0
  80. 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,3 @@
1
+ import type { ProductEnrichmentInput, ProductEnrichmentResult } from './types.js';
2
+ export declare function enrichProductWithFallback(input: ProductEnrichmentInput): Promise<ProductEnrichmentResult>;
3
+ //# sourceMappingURL=trade-compliance.enrichment.d.ts.map
@@ -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":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,gBAAgB,CAAA;AAClF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,CAAA;AACzF,MAAM,MAAM,eAAe,GAAG,uBAAuB,GAAG,mBAAmB,GAAG,gBAAgB,CAAA;AAC9F,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAA;AAE/F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAA;AAE/E,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,0BAA0B,CAAA;IAClC,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,qBAAqB,CAAA;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,GACnF,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,GAAG;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,mBAAmB,EAAE,CAAA;CAC7B,CAAA;AAEH,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }