@chenchaolong/plugin-trade-compliance-workbench 0.1.74 → 1.0.1
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 +41 -22
- package/dist/assets/templates/CI.xlsx +0 -0
- package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
- package/dist/assets/templates/PI.xlsx +0 -0
- package/dist/assets/templates/PL.xlsx +0 -0
- package/dist/index.d.ts +115 -228
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -108
- package/dist/index.js.map +1 -1
- package/dist/lib/{document-text-extractor.d.ts → adapters/document-text-extractor.d.ts} +2 -2
- package/dist/lib/adapters/document-text-extractor.d.ts.map +1 -0
- package/dist/lib/{document-text-extractor.js → adapters/document-text-extractor.js} +8 -2
- package/dist/lib/adapters/document-text-extractor.js.map +1 -0
- package/dist/lib/adapters/file-storage.d.ts +9 -0
- package/dist/lib/adapters/file-storage.d.ts.map +1 -0
- package/dist/lib/adapters/file-storage.js +37 -0
- package/dist/lib/adapters/file-storage.js.map +1 -0
- package/dist/lib/{trade-compliance.enrichment.d.ts → adapters/hsbianma.provider.d.ts} +6 -6
- package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -0
- package/dist/lib/{trade-compliance.enrichment.js → adapters/hsbianma.provider.js} +1 -1
- package/dist/lib/adapters/hsbianma.provider.js.map +1 -0
- package/dist/lib/adapters/translation.provider.d.ts +4 -0
- package/dist/lib/adapters/translation.provider.d.ts.map +1 -0
- package/dist/lib/adapters/translation.provider.js +35 -0
- package/dist/lib/adapters/translation.provider.js.map +1 -0
- package/dist/lib/constants.d.ts +17 -11
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +17 -21
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/domain/contract-number.d.ts +14 -0
- package/dist/lib/domain/contract-number.d.ts.map +1 -0
- package/dist/lib/domain/contract-number.js +36 -0
- package/dist/lib/domain/contract-number.js.map +1 -0
- package/dist/lib/domain/default-settings.d.ts +28 -0
- package/dist/lib/domain/default-settings.d.ts.map +1 -0
- package/dist/lib/domain/default-settings.js +16 -0
- package/dist/lib/domain/default-settings.js.map +1 -0
- package/dist/lib/domain/finance.d.ts +37 -0
- package/dist/lib/domain/finance.d.ts.map +1 -0
- package/dist/lib/domain/finance.js +60 -0
- package/dist/lib/domain/finance.js.map +1 -0
- package/dist/lib/domain/import-issues.d.ts +10 -0
- package/dist/lib/domain/import-issues.d.ts.map +1 -0
- package/dist/lib/domain/import-issues.js +23 -0
- package/dist/lib/domain/import-issues.js.map +1 -0
- package/dist/lib/domain/normalization.d.ts +8 -0
- package/dist/lib/domain/normalization.d.ts.map +1 -0
- package/dist/lib/domain/normalization.js +50 -0
- package/dist/lib/domain/normalization.js.map +1 -0
- package/dist/lib/domain/workflow.d.ts +4 -0
- package/dist/lib/domain/workflow.d.ts.map +1 -0
- package/dist/lib/domain/workflow.js +14 -0
- package/dist/lib/domain/workflow.js.map +1 -0
- package/dist/lib/entities/base.d.ts +20 -0
- package/dist/lib/entities/base.d.ts.map +1 -0
- package/dist/lib/entities/base.js +51 -0
- package/dist/lib/entities/base.js.map +1 -0
- package/dist/lib/entities/catalog.entity.d.ts +80 -0
- package/dist/lib/entities/catalog.entity.d.ts.map +1 -0
- package/dist/lib/entities/catalog.entity.js +308 -0
- package/dist/lib/entities/catalog.entity.js.map +1 -0
- package/dist/lib/entities/customer.entity.d.ts +72 -0
- package/dist/lib/entities/customer.entity.d.ts.map +1 -0
- package/dist/lib/entities/customer.entity.js +276 -0
- package/dist/lib/entities/customer.entity.js.map +1 -0
- package/dist/lib/entities/index.d.ts +12 -6
- package/dist/lib/entities/index.d.ts.map +1 -1
- package/dist/lib/entities/index.js +20 -7
- package/dist/lib/entities/index.js.map +1 -1
- package/dist/lib/entities/procurement.entity.d.ts +99 -0
- package/dist/lib/entities/procurement.entity.d.ts.map +1 -0
- package/dist/lib/entities/procurement.entity.js +386 -0
- package/dist/lib/entities/procurement.entity.js.map +1 -0
- package/dist/lib/entities/settings.entity.d.ts +64 -0
- package/dist/lib/entities/settings.entity.d.ts.map +1 -0
- package/dist/lib/entities/settings.entity.js +243 -0
- package/dist/lib/entities/settings.entity.js.map +1 -0
- package/dist/lib/entities/shared.entity.d.ts +40 -0
- package/dist/lib/entities/shared.entity.d.ts.map +1 -0
- package/dist/lib/entities/shared.entity.js +149 -0
- package/dist/lib/entities/shared.entity.js.map +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/app.js +245 -2664
- package/dist/lib/remote-components/trade-compliance-workbench/editor-source.mjs +53 -0
- package/dist/lib/remote-components/trade-compliance-workbench/editor.css +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/editor.js +533 -0
- package/dist/lib/sales-file.service.d.ts +29 -0
- package/dist/lib/sales-file.service.d.ts.map +1 -0
- package/dist/lib/sales-file.service.js +300 -0
- package/dist/lib/sales-file.service.js.map +1 -0
- package/dist/lib/trade-compliance.config.d.ts +94 -187
- package/dist/lib/trade-compliance.config.d.ts.map +1 -1
- package/dist/lib/trade-compliance.config.js +12 -96
- package/dist/lib/trade-compliance.config.js.map +1 -1
- package/dist/lib/types.d.ts +104 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +47 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/workbench-view.provider.d.ts +276 -0
- package/dist/lib/workbench-view.provider.d.ts.map +1 -0
- package/dist/lib/workbench-view.provider.js +222 -0
- package/dist/lib/workbench-view.provider.js.map +1 -0
- package/dist/lib/workbench.middleware.d.ts +351 -0
- package/dist/lib/workbench.middleware.d.ts.map +1 -0
- package/dist/lib/workbench.middleware.js +48 -0
- package/dist/lib/workbench.middleware.js.map +1 -0
- package/dist/lib/workbench.plugin.d.ts +5 -0
- package/dist/lib/workbench.plugin.d.ts.map +1 -0
- package/dist/lib/workbench.plugin.js +24 -0
- package/dist/lib/workbench.plugin.js.map +1 -0
- package/dist/lib/workbench.service.d.ts +257 -0
- package/dist/lib/workbench.service.d.ts.map +1 -0
- package/dist/lib/workbench.service.js +755 -0
- package/dist/lib/workbench.service.js.map +1 -0
- package/package.json +19 -25
- package/dist/assets/customs-workbook-template.xls +0 -0
- package/dist/lib/controlled-goods-extracted-text-store.d.ts +0 -29
- package/dist/lib/controlled-goods-extracted-text-store.d.ts.map +0 -1
- package/dist/lib/controlled-goods-extracted-text-store.js +0 -42
- package/dist/lib/controlled-goods-extracted-text-store.js.map +0 -1
- package/dist/lib/controlled-goods-file-parser.d.ts +0 -9
- package/dist/lib/controlled-goods-file-parser.d.ts.map +0 -1
- package/dist/lib/controlled-goods-file-parser.js +0 -298
- package/dist/lib/controlled-goods-file-parser.js.map +0 -1
- package/dist/lib/document-text-extractor.d.ts.map +0 -1
- package/dist/lib/document-text-extractor.js.map +0 -1
- package/dist/lib/entities/controlled-goods-record.entity.d.ts +0 -5
- package/dist/lib/entities/controlled-goods-record.entity.d.ts.map +0 -1
- package/dist/lib/entities/controlled-goods-record.entity.js +0 -68
- package/dist/lib/entities/controlled-goods-record.entity.js.map +0 -1
- package/dist/lib/entities/customs-workbook-generation.entity.d.ts +0 -5
- package/dist/lib/entities/customs-workbook-generation.entity.d.ts.map +0 -1
- package/dist/lib/entities/customs-workbook-generation.entity.js +0 -72
- package/dist/lib/entities/customs-workbook-generation.entity.js.map +0 -1
- package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts +0 -5
- package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts.map +0 -1
- package/dist/lib/entities/trade-compliance-import-batch.entity.js +0 -60
- package/dist/lib/entities/trade-compliance-import-batch.entity.js.map +0 -1
- package/dist/lib/entities/trade-compliance-review-item.entity.d.ts +0 -5
- package/dist/lib/entities/trade-compliance-review-item.entity.d.ts.map +0 -1
- package/dist/lib/entities/trade-compliance-review-item.entity.js +0 -84
- package/dist/lib/entities/trade-compliance-review-item.entity.js.map +0 -1
- package/dist/lib/entities/trade-product.entity.d.ts +0 -5
- package/dist/lib/entities/trade-product.entity.d.ts.map +0 -1
- package/dist/lib/entities/trade-product.entity.js +0 -105
- package/dist/lib/entities/trade-product.entity.js.map +0 -1
- package/dist/lib/entities/trade-supplier.entity.d.ts +0 -5
- package/dist/lib/entities/trade-supplier.entity.d.ts.map +0 -1
- package/dist/lib/entities/trade-supplier.entity.js +0 -55
- package/dist/lib/entities/trade-supplier.entity.js.map +0 -1
- package/dist/lib/trade-compliance-workbench-view.provider.d.ts +0 -129
- package/dist/lib/trade-compliance-workbench-view.provider.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbench-view.provider.js +0 -863
- package/dist/lib/trade-compliance-workbench-view.provider.js.map +0 -1
- package/dist/lib/trade-compliance-workbench.middleware.d.ts +0 -485
- package/dist/lib/trade-compliance-workbench.middleware.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbench.middleware.js +0 -494
- package/dist/lib/trade-compliance-workbench.middleware.js.map +0 -1
- package/dist/lib/trade-compliance-workbench.plugin.d.ts +0 -11
- package/dist/lib/trade-compliance-workbench.plugin.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbench.plugin.js +0 -39
- package/dist/lib/trade-compliance-workbench.plugin.js.map +0 -1
- package/dist/lib/trade-compliance-workbench.service.d.ts +0 -33
- package/dist/lib/trade-compliance-workbench.service.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbench.service.js +0 -369
- package/dist/lib/trade-compliance-workbench.service.js.map +0 -1
- package/dist/lib/trade-compliance-workbench.templates.d.ts +0 -31
- package/dist/lib/trade-compliance-workbench.templates.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbench.templates.js +0 -60
- package/dist/lib/trade-compliance-workbench.templates.js.map +0 -1
- package/dist/lib/trade-compliance-workbook.d.ts +0 -28
- package/dist/lib/trade-compliance-workbook.d.ts.map +0 -1
- package/dist/lib/trade-compliance-workbook.js +0 -546
- package/dist/lib/trade-compliance-workbook.js.map +0 -1
- package/dist/lib/trade-compliance.enrichment.d.ts.map +0 -1
- package/dist/lib/trade-compliance.enrichment.js.map +0 -1
- package/dist/lib/trade-compliance.matching.d.ts +0 -10
- package/dist/lib/trade-compliance.matching.d.ts.map +0 -1
- package/dist/lib/trade-compliance.matching.js +0 -63
- package/dist/lib/trade-compliance.matching.js.map +0 -1
- package/dist/xpert-trade-compliance-workbench-assistant.yaml +0 -27
package/dist/lib/types.js
CHANGED
|
@@ -1,2 +1,48 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const SourceDocumentTypes = ['CONTROLLED_CATALOG', 'SANCTION_CATALOG', 'PURCHASE_CONTRACT', 'CUSTOMER_CONTRACT'];
|
|
2
|
+
export const SourceFileFormats = ['PDF', 'DOC', 'DOCX', 'XLS', 'XLSX', 'PNG', 'JPEG', 'WEBP'];
|
|
3
|
+
export const ImportModes = ['APPEND', 'REPLACE_BATCH'];
|
|
4
|
+
export const CatalogTypes = ['DUAL_USE', 'OVERSEAS_SANCTION'];
|
|
5
|
+
export const CompanyRiskSubjectTypes = ['SUPPLIER', 'CUSTOMER'];
|
|
6
|
+
export const SalesFileTypes = ['PI', 'CI', 'PL', 'CUSTOMS_DECLARATION'];
|
|
7
|
+
export const PricingProfitRateSources = ['CUSTOMER_DEFAULT', 'ORDER_OVERRIDE'];
|
|
8
|
+
export const ProfitMetricTypes = ['PRICING_MARKUP', 'COMPLIANCE_PROFIT'];
|
|
9
|
+
export const ImportTaskStatuses = ['QUEUED', 'EXTRACTING', 'AI_PARSING', 'VALIDATING', 'AWAITING_REVIEW', 'PERSISTING', 'SUCCEEDED', 'FAILED', 'TIMED_OUT'];
|
|
10
|
+
export const HsCodeStatuses = ['UNCONFIRMED', 'AI_CONFIRMED', 'MANUALLY_CONFIRMED'];
|
|
11
|
+
export const HsCodeSources = ['CONTRACT_EXTRACTED', 'HS_LOOKUP', 'MANUAL'];
|
|
12
|
+
export const EnglishNameSources = ['HS_LOOKUP', 'AI_TRANSLATION', 'MANUAL'];
|
|
13
|
+
export const CatalogRecordSourceTypes = ['FILE_IMPORT', 'MANUAL_ENTRY'];
|
|
14
|
+
export const PurchaseOrderLineSourceTypes = ['CONTRACT_EXTRACTED', 'MANUAL_ENTRY'];
|
|
15
|
+
export const BankAccountTypes = ['OVERSEAS_CNY', 'OVERSEAS_USD'];
|
|
16
|
+
export const DeleteOperations = ['USER_DELETE', 'CATALOG_REPLACE', 'SANCTION_CATALOG_REPLACE', 'SOURCE_CASCADE'];
|
|
17
|
+
export const RiskMatchInvalidationReasons = ['SOURCE_CHANGED', 'CATALOG_CHANGED'];
|
|
18
|
+
export const RiskLevels = ['LOW', 'MEDIUM', 'HIGH'];
|
|
19
|
+
export const ClauseTypes = ['CONTRACT_AMOUNT', 'TAX_RATE', 'PRICE_TERMS', 'TRANSPORT', 'WARRANTY', 'BREACH_LIABILITY', 'PAYMENT_TERMS'];
|
|
20
|
+
export const DomainErrorCodes = {
|
|
21
|
+
INVALID_INPUT: 'INVALID_INPUT',
|
|
22
|
+
NOT_FOUND: 'NOT_FOUND',
|
|
23
|
+
DUPLICATE_CATALOG_RECORD: 'DUPLICATE_CATALOG_RECORD',
|
|
24
|
+
DUPLICATE_CONTRACT: 'DUPLICATE_CONTRACT',
|
|
25
|
+
INVALID_CONTRACT_NO: 'INVALID_CONTRACT_NO',
|
|
26
|
+
DERIVED_LINK_CONFLICT: 'DERIVED_LINK_CONFLICT',
|
|
27
|
+
CUSTOMER_PROFIT_RATE_REQUIRED: 'CUSTOMER_PROFIT_RATE_REQUIRED',
|
|
28
|
+
RECEIVED_AMOUNT_EXCEEDED: 'RECEIVED_AMOUNT_EXCEEDED',
|
|
29
|
+
PROFIT_RULE_UNCONFIGURED: 'PROFIT_RULE_UNCONFIGURED',
|
|
30
|
+
PROFIT_RATE_BELOW_MINIMUM: 'PROFIT_RATE_BELOW_MINIMUM',
|
|
31
|
+
EXCHANGE_COST_OUT_OF_RANGE: 'EXCHANGE_COST_OUT_OF_RANGE',
|
|
32
|
+
EXCHANGE_RATE_REQUIRED: 'EXCHANGE_RATE_REQUIRED',
|
|
33
|
+
BANK_ACCOUNT_REQUIRED: 'BANK_ACCOUNT_REQUIRED',
|
|
34
|
+
TRANSLATION_FAILED: 'TRANSLATION_FAILED',
|
|
35
|
+
TEMPLATE_INVALID: 'TEMPLATE_INVALID',
|
|
36
|
+
FILE_TOO_LARGE: 'FILE_TOO_LARGE',
|
|
37
|
+
UNSUPPORTED_FILE_FORMAT: 'UNSUPPORTED_FILE_FORMAT',
|
|
38
|
+
IMPORT_TIMED_OUT: 'IMPORT_TIMED_OUT'
|
|
39
|
+
};
|
|
40
|
+
export class DomainError extends Error {
|
|
41
|
+
constructor(code, message, details = {}) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.code = code;
|
|
44
|
+
this.details = details;
|
|
45
|
+
this.name = 'DomainError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
2
48
|
//# sourceMappingURL=types.js.map
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { TradeComplianceWorkbenchService } from './workbench.service.js';
|
|
2
|
+
import { SalesFileService } from './sales-file.service.js';
|
|
3
|
+
import { TradeComplianceFileStorage } from './adapters/file-storage.js';
|
|
4
|
+
export declare class TradeComplianceWorkbenchViewProvider {
|
|
5
|
+
private readonly service;
|
|
6
|
+
private readonly salesFiles;
|
|
7
|
+
private readonly storage;
|
|
8
|
+
constructor(service: TradeComplianceWorkbenchService, salesFiles: SalesFileService, storage: TradeComplianceFileStorage);
|
|
9
|
+
supports(context: any): boolean;
|
|
10
|
+
getViewManifests(_context: any, slot: string): {
|
|
11
|
+
key: string;
|
|
12
|
+
title: {
|
|
13
|
+
en_US: string;
|
|
14
|
+
zh_Hans: string;
|
|
15
|
+
};
|
|
16
|
+
description: {
|
|
17
|
+
en_US: string;
|
|
18
|
+
zh_Hans: string;
|
|
19
|
+
};
|
|
20
|
+
icon: {
|
|
21
|
+
type: string;
|
|
22
|
+
value: string;
|
|
23
|
+
};
|
|
24
|
+
hostType: string;
|
|
25
|
+
slot: string;
|
|
26
|
+
order: number;
|
|
27
|
+
refreshable: boolean;
|
|
28
|
+
activation: {
|
|
29
|
+
requiredFeatures: string[];
|
|
30
|
+
};
|
|
31
|
+
source: {
|
|
32
|
+
provider: string;
|
|
33
|
+
plugin: string;
|
|
34
|
+
};
|
|
35
|
+
view: {
|
|
36
|
+
type: string;
|
|
37
|
+
runtime: string;
|
|
38
|
+
protocolVersion: number;
|
|
39
|
+
component: {
|
|
40
|
+
isolation: string;
|
|
41
|
+
entry: string;
|
|
42
|
+
};
|
|
43
|
+
dataSource: {
|
|
44
|
+
mode: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
dataSource: {
|
|
48
|
+
mode: string;
|
|
49
|
+
querySchema: {
|
|
50
|
+
supportsPagination: boolean;
|
|
51
|
+
supportsSearch: boolean;
|
|
52
|
+
supportsParameters: boolean;
|
|
53
|
+
defaultPageSize: number;
|
|
54
|
+
};
|
|
55
|
+
cache: {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
clientCommands: {
|
|
60
|
+
key: string;
|
|
61
|
+
label: {
|
|
62
|
+
en_US: string;
|
|
63
|
+
zh_Hans: string;
|
|
64
|
+
};
|
|
65
|
+
}[];
|
|
66
|
+
actions: {
|
|
67
|
+
key: string;
|
|
68
|
+
label: {
|
|
69
|
+
en_US: string;
|
|
70
|
+
zh_Hans: string;
|
|
71
|
+
};
|
|
72
|
+
icon: string;
|
|
73
|
+
actionType: string;
|
|
74
|
+
}[];
|
|
75
|
+
}[];
|
|
76
|
+
getRemoteComponentEntry(_context: any, viewKey: string, component: any): Promise<{
|
|
77
|
+
html: string;
|
|
78
|
+
contentType: string;
|
|
79
|
+
}>;
|
|
80
|
+
getViewData(context: any, _viewKey: string, query: any): Promise<{
|
|
81
|
+
items: never[];
|
|
82
|
+
total: number;
|
|
83
|
+
summary: {
|
|
84
|
+
dashboard: {
|
|
85
|
+
riskNotice: import("./entities/shared.entity.js").RiskNoticeSettings;
|
|
86
|
+
controlledRiskCount: number;
|
|
87
|
+
sanctionRiskCount: number;
|
|
88
|
+
unlinkedPurchaseCount: number;
|
|
89
|
+
unlinkedCustomerCount: number;
|
|
90
|
+
};
|
|
91
|
+
controlledGoods: {
|
|
92
|
+
items: import("./entities/catalog.entity.js").ControlledGoodsRecord[];
|
|
93
|
+
total: number;
|
|
94
|
+
page: number;
|
|
95
|
+
pageSize: number;
|
|
96
|
+
};
|
|
97
|
+
controlledBatches: {
|
|
98
|
+
items: import("./entities/catalog.entity.js").ControlledCatalogBatch[];
|
|
99
|
+
total: number;
|
|
100
|
+
page: number;
|
|
101
|
+
pageSize: number;
|
|
102
|
+
};
|
|
103
|
+
sanctionedCompanies: {
|
|
104
|
+
items: import("./entities/catalog.entity.js").SanctionedCompanyRecord[];
|
|
105
|
+
total: number;
|
|
106
|
+
page: number;
|
|
107
|
+
pageSize: number;
|
|
108
|
+
};
|
|
109
|
+
sanctionBatches: {
|
|
110
|
+
items: import("./entities/catalog.entity.js").SanctionCatalogBatch[];
|
|
111
|
+
total: number;
|
|
112
|
+
page: number;
|
|
113
|
+
pageSize: number;
|
|
114
|
+
};
|
|
115
|
+
suppliers: {
|
|
116
|
+
items: import("./entities/procurement.entity.js").Supplier[];
|
|
117
|
+
total: number;
|
|
118
|
+
page: number;
|
|
119
|
+
pageSize: number;
|
|
120
|
+
};
|
|
121
|
+
purchaseOrders: {
|
|
122
|
+
items: import("./entities/procurement.entity.js").PurchaseOrder[];
|
|
123
|
+
total: number;
|
|
124
|
+
page: number;
|
|
125
|
+
pageSize: number;
|
|
126
|
+
};
|
|
127
|
+
purchaseLines: {
|
|
128
|
+
items: import("./entities/procurement.entity.js").PurchaseOrderLine[];
|
|
129
|
+
total: number;
|
|
130
|
+
page: number;
|
|
131
|
+
pageSize: number;
|
|
132
|
+
};
|
|
133
|
+
customers: {
|
|
134
|
+
items: import("./entities/customer.entity.js").Customer[];
|
|
135
|
+
total: number;
|
|
136
|
+
page: number;
|
|
137
|
+
pageSize: number;
|
|
138
|
+
};
|
|
139
|
+
customerContracts: {
|
|
140
|
+
items: import("./entities/customer.entity.js").CustomerContract[];
|
|
141
|
+
total: number;
|
|
142
|
+
page: number;
|
|
143
|
+
pageSize: number;
|
|
144
|
+
};
|
|
145
|
+
derivedSalesOrders: import("./types.js").DerivedSalesOrder[];
|
|
146
|
+
generatedFiles: {
|
|
147
|
+
items: import("./entities/settings.entity.js").GeneratedSalesFile[];
|
|
148
|
+
total: number;
|
|
149
|
+
page: number;
|
|
150
|
+
pageSize: number;
|
|
151
|
+
};
|
|
152
|
+
settings: {
|
|
153
|
+
risk: import("./entities/shared.entity.js").RiskNoticeSettings;
|
|
154
|
+
company: import("./entities/settings.entity.js").CompanySettings | null;
|
|
155
|
+
banks: import("./entities/settings.entity.js").BankAccountSettings[];
|
|
156
|
+
profit: import("./entities/settings.entity.js").ProfitRuleSettings;
|
|
157
|
+
rates: import("./entities/settings.entity.js").MonthlySafeExchangeRate[];
|
|
158
|
+
};
|
|
159
|
+
analytics: {
|
|
160
|
+
purchase: {
|
|
161
|
+
count: number;
|
|
162
|
+
totalCny: any;
|
|
163
|
+
paidCny: any;
|
|
164
|
+
unpaidCny: any;
|
|
165
|
+
rows: Record<string, any>[];
|
|
166
|
+
};
|
|
167
|
+
sales: {
|
|
168
|
+
count: number;
|
|
169
|
+
totalCny: any;
|
|
170
|
+
paidCny: any;
|
|
171
|
+
unpaidCny: any;
|
|
172
|
+
rows: Record<string, any>[];
|
|
173
|
+
};
|
|
174
|
+
annualPurchaseCount: number;
|
|
175
|
+
annualSalesCount: number;
|
|
176
|
+
purchaseTop5: {
|
|
177
|
+
name: string;
|
|
178
|
+
amountCny: string;
|
|
179
|
+
}[];
|
|
180
|
+
salesTop5: {
|
|
181
|
+
name: string;
|
|
182
|
+
amountCny: string;
|
|
183
|
+
}[];
|
|
184
|
+
filters: Record<string, unknown>;
|
|
185
|
+
};
|
|
186
|
+
importTasks: {
|
|
187
|
+
items: import("./entities/shared.entity.js").ImportTask[];
|
|
188
|
+
total: number;
|
|
189
|
+
page: number;
|
|
190
|
+
pageSize: number;
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
}>;
|
|
194
|
+
executeViewAction(context: any, _viewKey: string, actionKey: string, request: any): Promise<{
|
|
195
|
+
success: boolean;
|
|
196
|
+
message: {
|
|
197
|
+
en_US: string;
|
|
198
|
+
zh_Hans: string;
|
|
199
|
+
};
|
|
200
|
+
data: unknown;
|
|
201
|
+
refresh: boolean;
|
|
202
|
+
} | {
|
|
203
|
+
success: boolean;
|
|
204
|
+
message: {
|
|
205
|
+
en_US: string;
|
|
206
|
+
zh_Hans: string;
|
|
207
|
+
};
|
|
208
|
+
error: {
|
|
209
|
+
code: import("./types.js").DomainErrorCode;
|
|
210
|
+
message: string;
|
|
211
|
+
details: Record<string, unknown>;
|
|
212
|
+
};
|
|
213
|
+
refresh: boolean;
|
|
214
|
+
} | {
|
|
215
|
+
success: boolean;
|
|
216
|
+
refresh: boolean;
|
|
217
|
+
message: {
|
|
218
|
+
en_US: string;
|
|
219
|
+
zh_Hans: string;
|
|
220
|
+
};
|
|
221
|
+
}>;
|
|
222
|
+
executeViewFileAction(context: any, viewKey: string, actionKey: string, request: any, file: any): Promise<{
|
|
223
|
+
success: boolean;
|
|
224
|
+
message: {
|
|
225
|
+
en_US: string;
|
|
226
|
+
zh_Hans: string;
|
|
227
|
+
};
|
|
228
|
+
error: {
|
|
229
|
+
code: import("./types.js").DomainErrorCode;
|
|
230
|
+
message: string;
|
|
231
|
+
details: Record<string, unknown>;
|
|
232
|
+
};
|
|
233
|
+
refresh: boolean;
|
|
234
|
+
} | {
|
|
235
|
+
success: boolean;
|
|
236
|
+
refresh: boolean;
|
|
237
|
+
message: {
|
|
238
|
+
en_US: string;
|
|
239
|
+
zh_Hans: string;
|
|
240
|
+
};
|
|
241
|
+
data: {
|
|
242
|
+
task: import("./entities/shared.entity.js").ImportTask;
|
|
243
|
+
commands: {
|
|
244
|
+
commandKey: string;
|
|
245
|
+
payload: {
|
|
246
|
+
text: string;
|
|
247
|
+
clientMessageId: string;
|
|
248
|
+
files: {
|
|
249
|
+
id: any;
|
|
250
|
+
fileId: any;
|
|
251
|
+
fileAssetId: any;
|
|
252
|
+
workspacePath: any;
|
|
253
|
+
filePath: any;
|
|
254
|
+
name: string;
|
|
255
|
+
originalName: string;
|
|
256
|
+
mimeType: any;
|
|
257
|
+
size: any;
|
|
258
|
+
role: string;
|
|
259
|
+
}[];
|
|
260
|
+
followUpMode: string;
|
|
261
|
+
state: {
|
|
262
|
+
tradeComplianceWorkbench: {
|
|
263
|
+
actionKey: any;
|
|
264
|
+
importTaskId: any;
|
|
265
|
+
};
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
}[];
|
|
269
|
+
polling: {
|
|
270
|
+
intervalMs: number;
|
|
271
|
+
timeoutMs: number;
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
}>;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=workbench-view.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-view.provider.d.ts","sourceRoot":"","sources":["../../src/lib/workbench-view.provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AASvE,qBAEa,oCAAoC;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAmC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAoB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAjH,OAAO,EAAE,+BAA+B,EAAmB,UAAU,EAAE,gBAAgB,EAAmB,OAAO,EAAE,0BAA0B;IAE1K,QAAQ,CAAC,OAAO,EAAE,GAAG;IAErB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAatC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;;;;IAYtE,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQtD,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoCjF,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBtG"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Injectable } from '@nestjs/common';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
import { renderRemoteReactIframeHtml, ViewExtensionProvider } from '@xpert-ai/plugin-sdk';
|
|
8
|
+
import { FIXED_SLOT, FEATURE, ICON, MAIN_SLOT, PLUGIN_NAME, REMOTE_ENTRY_KEY, TOOL_NAMES, VIEW_KEY, VIEW_PROVIDER_KEY } from './constants.js';
|
|
9
|
+
import { TradeComplianceWorkbenchService } from './workbench.service.js';
|
|
10
|
+
import { SalesFileService } from './sales-file.service.js';
|
|
11
|
+
import { TradeComplianceFileStorage } from './adapters/file-storage.js';
|
|
12
|
+
import { extractDocumentText } from './adapters/document-text-extractor.js';
|
|
13
|
+
import { getHsBianmaCodeDetail, searchHsBianmaCodes } from './adapters/hsbianma.provider.js';
|
|
14
|
+
import { DomainError, DomainErrorCodes, SourceFileFormats } from './types.js';
|
|
15
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
17
|
+
const text = (en_US, zh_Hans) => ({ en_US, zh_Hans });
|
|
18
|
+
let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewProvider {
|
|
19
|
+
constructor(service, salesFiles, storage) {
|
|
20
|
+
this.service = service;
|
|
21
|
+
this.salesFiles = salesFiles;
|
|
22
|
+
this.storage = storage;
|
|
23
|
+
}
|
|
24
|
+
supports(context) { return context.hostType === 'agent'; }
|
|
25
|
+
getViewManifests(_context, slot) {
|
|
26
|
+
if (slot !== MAIN_SLOT && slot !== FIXED_SLOT)
|
|
27
|
+
return [];
|
|
28
|
+
return [{
|
|
29
|
+
key: VIEW_KEY, title: text('Trade Compliance Workbench', '外贸合规工作台'), description: text('Trade compliance catalog, contracts, sales files and analytics.', '管理风险目录、采购合同、客户合同、销售文件与数据分析。'),
|
|
30
|
+
icon: { type: 'svg', value: ICON }, hostType: 'agent', slot, order: 40, refreshable: true,
|
|
31
|
+
activation: { requiredFeatures: [FEATURE] }, source: { provider: VIEW_PROVIDER_KEY, plugin: PLUGIN_NAME },
|
|
32
|
+
view: { type: 'remote_component', runtime: 'react', protocolVersion: 1, component: { isolation: 'iframe', entry: REMOTE_ENTRY_KEY }, dataSource: { mode: 'platform' } },
|
|
33
|
+
dataSource: { mode: 'platform', querySchema: { supportsPagination: true, supportsSearch: true, supportsParameters: true, defaultPageSize: 20 }, cache: { enabled: false } },
|
|
34
|
+
clientCommands: [{ key: 'assistant.chat.send_message', label: text('Send to assistant', '发送到智能体') }],
|
|
35
|
+
actions: actionManifests()
|
|
36
|
+
}];
|
|
37
|
+
}
|
|
38
|
+
async getRemoteComponentEntry(_context, viewKey, component) {
|
|
39
|
+
if (viewKey !== VIEW_KEY || component.entry !== REMOTE_ENTRY_KEY)
|
|
40
|
+
return { html: '<!doctype html><html><body>Unsupported component.</body></html>', contentType: 'text/html; charset=utf-8' };
|
|
41
|
+
const [appScript, editorScript, editorCss, reactUmd, reactDomUmd] = await Promise.all([
|
|
42
|
+
readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'app.js'), 'utf8'),
|
|
43
|
+
readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'editor.js'), 'utf8'),
|
|
44
|
+
readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'editor.css'), 'utf8'),
|
|
45
|
+
readPackageFile('react', 'umd/react.production.min.js'), readPackageFile('react-dom', 'umd/react-dom.production.min.js')
|
|
46
|
+
]);
|
|
47
|
+
const spreadsheetRuntime = `(()=>{const style=document.createElement('style');style.textContent=${JSON.stringify(editorCss)};document.head.appendChild(style)})();\n${editorScript}\n${appScript}`;
|
|
48
|
+
return { html: renderRemoteReactIframeHtml({ title: '外贸合规工作台', lang: 'zh-Hans', reactUmd, reactDomUmd, appScript: spreadsheetRuntime }), contentType: 'text/html; charset=utf-8' };
|
|
49
|
+
}
|
|
50
|
+
async getViewData(context, _viewKey, query) {
|
|
51
|
+
const scope = scopeFromContext(context);
|
|
52
|
+
const all = { page: 1, pageSize: 200, search: query?.search, parameters: query?.parameters ?? {} };
|
|
53
|
+
const [dashboard, controlledGoods, controlledBatches, sanctionedCompanies, sanctionBatches, suppliers, purchaseOrders, purchaseLines, customers, customerContracts, derivedSalesOrders, generatedFiles, settings, analytics, importTasks] = await Promise.all([
|
|
54
|
+
this.service.dashboard(scope), this.service.listControlledGoods(scope, all), this.service.listControlledBatches(scope, all), this.service.listSanctionedCompanies(scope, all), this.service.listSanctionBatches(scope, all), this.service.listSuppliers(scope, all), this.service.listPurchaseOrders(scope, undefined, all), this.service.listPurchaseLines(scope, undefined, all), this.service.listCustomers(scope, all), this.service.listCustomerContracts(scope, all), this.service.listDerivedSalesOrders(scope), this.service.listGeneratedFiles(scope, all), this.service.settings(scope), this.service.analytics(scope, { ...(query?.parameters ?? {}), search: query?.search }), this.service.listImportTasks(scope, all)
|
|
55
|
+
]);
|
|
56
|
+
return { items: [], total: 0, summary: { dashboard, controlledGoods, controlledBatches, sanctionedCompanies, sanctionBatches, suppliers, purchaseOrders, purchaseLines, customers, customerContracts, derivedSalesOrders, generatedFiles, settings, analytics, importTasks } };
|
|
57
|
+
}
|
|
58
|
+
async executeViewAction(context, _viewKey, actionKey, request) {
|
|
59
|
+
const scope = scopeFromContext(context);
|
|
60
|
+
const input = record(request?.input);
|
|
61
|
+
try {
|
|
62
|
+
let data;
|
|
63
|
+
switch (actionKey) {
|
|
64
|
+
case 'refresh': return { success: true, refresh: true, message: text('Refreshed', '已刷新') };
|
|
65
|
+
case 'save_controlled_goods':
|
|
66
|
+
data = await this.service.saveControlledGoods(scope, input);
|
|
67
|
+
break;
|
|
68
|
+
case 'update_controlled_goods':
|
|
69
|
+
data = await this.service.updateControlledGoods(scope, requiredString(input.id, 'id'), input);
|
|
70
|
+
break;
|
|
71
|
+
case 'save_sanctioned_company':
|
|
72
|
+
data = await this.service.saveSanctionedCompany(scope, input);
|
|
73
|
+
break;
|
|
74
|
+
case 'update_sanctioned_company':
|
|
75
|
+
data = await this.service.updateSanctionedCompany(scope, requiredString(input.id, 'id'), input);
|
|
76
|
+
break;
|
|
77
|
+
case 'save_purchase_review':
|
|
78
|
+
data = await this.service.savePurchaseDraft(scope, requiredString(input.importTaskId, 'importTaskId'), input.draft);
|
|
79
|
+
break;
|
|
80
|
+
case 'save_customer_contract_review':
|
|
81
|
+
data = await this.service.saveCustomerContractDraft(scope, requiredString(input.importTaskId, 'importTaskId'), input.draft);
|
|
82
|
+
break;
|
|
83
|
+
case 'update_supplier':
|
|
84
|
+
data = await this.service.updateSupplier(scope, requiredString(input.id, 'id'), input);
|
|
85
|
+
break;
|
|
86
|
+
case 'update_purchase_order':
|
|
87
|
+
data = await this.service.updatePurchaseOrder(scope, requiredString(input.id, 'id'), input);
|
|
88
|
+
break;
|
|
89
|
+
case 'add_purchase_line':
|
|
90
|
+
data = await this.service.addPurchaseLine(scope, requiredString(input.purchaseOrderId, 'purchaseOrderId'), input);
|
|
91
|
+
break;
|
|
92
|
+
case 'update_purchase_line':
|
|
93
|
+
data = await this.service.updatePurchaseLine(scope, requiredString(input.id, 'id'), input);
|
|
94
|
+
break;
|
|
95
|
+
case 'update_customer':
|
|
96
|
+
data = await this.service.updateCustomer(scope, requiredString(input.id, 'id'), input);
|
|
97
|
+
break;
|
|
98
|
+
case 'save_customer_profit_rate':
|
|
99
|
+
data = await this.service.saveCustomerProfitRate(scope, requiredString(input.customerId, 'customerId'), requiredString(input.rate, 'rate'));
|
|
100
|
+
break;
|
|
101
|
+
case 'save_derived_manual_data':
|
|
102
|
+
data = await this.service.saveDerivedManualData(scope, requiredString(input.customerContractId, 'customerContractId'), requiredString(input.purchaseOrderId, 'purchaseOrderId'), input);
|
|
103
|
+
break;
|
|
104
|
+
case 'get_customer_contract_review':
|
|
105
|
+
data = await this.service.getCustomerContractReview(scope, requiredString(input.id, 'id'));
|
|
106
|
+
break;
|
|
107
|
+
case 'update_customer_contract_review':
|
|
108
|
+
data = await this.service.updateCustomerContractReview(scope, requiredString(input.id, 'id'), input);
|
|
109
|
+
break;
|
|
110
|
+
case 'delete_entity':
|
|
111
|
+
data = await this.service.softDelete(scope, requiredString(input.entityType, 'entityType'), requiredString(input.id, 'id'));
|
|
112
|
+
break;
|
|
113
|
+
case 'save_settings':
|
|
114
|
+
data = await this.service.saveSettings(scope, input.settingsType, record(input.values));
|
|
115
|
+
break;
|
|
116
|
+
case 'generate_sales_file':
|
|
117
|
+
data = await this.salesFiles.generate(scope, input);
|
|
118
|
+
break;
|
|
119
|
+
case 'download_sales_file': {
|
|
120
|
+
const result = await this.salesFiles.download(scope, requiredString(input.id, 'id'));
|
|
121
|
+
data = { fileName: result.item.fileName, mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', base64: result.buffer.toString('base64') };
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'download_import_issues': {
|
|
125
|
+
const result = await this.service.downloadImportIssues(scope, input.documentType, requiredString(input.batchId, 'batchId'));
|
|
126
|
+
data = { fileName: result.fileName, mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', base64: result.buffer.toString('base64') };
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case 'download_source_file': {
|
|
130
|
+
const buffer = await this.storage.read(requiredString(input.sourceFileId, 'sourceFileId'));
|
|
131
|
+
data = { fileName: requiredString(input.fileName, 'fileName'), mimeType: 'application/octet-stream', base64: buffer.toString('base64') };
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
case 'save_edited_sales_file':
|
|
135
|
+
data = await this.salesFiles.saveEditedWorkbook(scope, requiredString(input.id, 'id'), Buffer.from(requiredString(input.base64, 'base64'), 'base64'));
|
|
136
|
+
break;
|
|
137
|
+
case 'search_hs_code':
|
|
138
|
+
data = await searchHsBianmaCodes({ keywords: requiredString(input.keywords, 'keywords'), page: numberValue(input.page, 1), filterFailureCode: true, displayChapter: false, displayEnName: true }, hsConfig());
|
|
139
|
+
break;
|
|
140
|
+
case 'get_hs_code_detail':
|
|
141
|
+
data = await getHsBianmaCodeDetail({ code: stringValue(input.code), detailUrl: stringValue(input.detailUrl) }, hsConfig());
|
|
142
|
+
break;
|
|
143
|
+
default: throw new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的操作', { actionKey });
|
|
144
|
+
}
|
|
145
|
+
return success(data);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
return failure(error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async executeViewFileAction(context, viewKey, actionKey, request, file) {
|
|
152
|
+
if (viewKey !== VIEW_KEY)
|
|
153
|
+
return failure(new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的视图'));
|
|
154
|
+
const scope = scopeFromContext(context);
|
|
155
|
+
const input = record(request?.input);
|
|
156
|
+
try {
|
|
157
|
+
const fileName = fileNameOf(file, input);
|
|
158
|
+
const format = formatOf(fileName);
|
|
159
|
+
const size = Number(file?.size ?? 0);
|
|
160
|
+
if (!format)
|
|
161
|
+
throw new DomainError(DomainErrorCodes.UNSUPPORTED_FILE_FORMAT, '仅支持 PDF、Word、Excel 和常见图片格式');
|
|
162
|
+
if (size > 20 * 1024 * 1024)
|
|
163
|
+
throw new DomainError(DomainErrorCodes.FILE_TOO_LARGE, '文件不能超过 20 MB');
|
|
164
|
+
const buffer = bufferOf(file) ?? await bufferFromPath(input);
|
|
165
|
+
if (!buffer?.length)
|
|
166
|
+
throw new DomainError(DomainErrorCodes.INVALID_INPUT, '无法读取上传文件内容');
|
|
167
|
+
const documentType = documentTypeForAction(actionKey);
|
|
168
|
+
const storageFileId = await this.storage.save(buffer, fileName, 'uploads');
|
|
169
|
+
const task = await this.service.createImportTask(scope, { documentType, sourceFileId: storageFileId, sourceFileName: fileName, sourceFileFormat: format, status: 'EXTRACTING' });
|
|
170
|
+
let extracted = { text: '', chunks: [], kind: 'image', originalLength: 0 };
|
|
171
|
+
if (!['PNG', 'JPEG', 'WEBP'].includes(format))
|
|
172
|
+
extracted = await extractDocumentText({ buffer, fileName, mimeType: file?.mimetype ?? file?.type, maxChars: 100000 });
|
|
173
|
+
const parsingTask = await this.service.markImportTaskParsing(scope, task.id);
|
|
174
|
+
const command = buildAssistantCommand({ actionKey, file, input, task, extracted, catalogType: input.catalogType, replaceBatchId: input.replaceBatchId });
|
|
175
|
+
return { success: true, refresh: false, message: text('Parsing started', '文件已进入解析中,请勿重复操作'), data: { task: parsingTask, commands: [command], polling: { intervalMs: 2000, timeoutMs: 1200000 } } };
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return failure(error);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
TradeComplianceWorkbenchViewProvider = __decorate([
|
|
183
|
+
Injectable(),
|
|
184
|
+
ViewExtensionProvider(VIEW_PROVIDER_KEY),
|
|
185
|
+
__metadata("design:paramtypes", [TradeComplianceWorkbenchService, SalesFileService, TradeComplianceFileStorage])
|
|
186
|
+
], TradeComplianceWorkbenchViewProvider);
|
|
187
|
+
export { TradeComplianceWorkbenchViewProvider };
|
|
188
|
+
function actionManifests() {
|
|
189
|
+
const invoke = (key, label, icon = 'ri-edit-line') => ({ key, label: text(key, label), icon, actionType: 'invoke' });
|
|
190
|
+
const upload = (key, label) => ({ ...invoke(key, label, 'ri-upload-cloud-line'), transport: 'file', placement: 'toolbar' });
|
|
191
|
+
return [invoke('refresh', '刷新', 'ri-refresh-line'), upload('upload_controlled_catalog', '上传管控目录'), upload('upload_sanction_catalog', '上传制裁目录'), upload('upload_purchase_contract', '上传采购合同'), upload('upload_customer_contract', '上传客户合同'),
|
|
192
|
+
...['save_controlled_goods', 'update_controlled_goods', 'save_sanctioned_company', 'update_sanctioned_company', 'save_purchase_review', 'save_customer_contract_review', 'update_supplier', 'update_purchase_order', 'add_purchase_line', 'update_purchase_line', 'update_customer', 'save_customer_profit_rate', 'save_derived_manual_data', 'get_customer_contract_review', 'update_customer_contract_review', 'delete_entity', 'save_settings', 'generate_sales_file', 'download_sales_file', 'download_import_issues', 'download_source_file', 'save_edited_sales_file', 'search_hs_code', 'get_hs_code_detail'].map(key => invoke(key, key))];
|
|
193
|
+
}
|
|
194
|
+
function buildAssistantCommand({ actionKey, file, input, task, extracted, catalogType, replaceBatchId }) {
|
|
195
|
+
const toolName = actionKey === 'upload_controlled_catalog' ? TOOL_NAMES.saveControlledCatalog : actionKey === 'upload_sanction_catalog' ? TOOL_NAMES.saveSanctionCatalog : actionKey === 'upload_purchase_contract' ? TOOL_NAMES.savePurchaseDraft : TOOL_NAMES.saveCustomerContractDraft;
|
|
196
|
+
const requirements = actionKey === 'upload_controlled_catalog' ? '完整提取管控商品名称、海关编码、管控说明、来源位置和来源原文。管控说明只能来自文件原文。' : actionKey === 'upload_sanction_catalog' ? '完整提取公司名称、国家或地区、制裁名单来源、原因、生效日期、备注、来源位置和来源原文。' : actionKey === 'upload_purchase_contract' ? '一份文件对应一个采购订单,完整提取供应商主档、采购订单和全部商品明细。' : '完整提取唯一客户、客户合同编码及合同金额、税率、价格、运输、质保、违约责任、付款条款七类内容,并用中文给出风险提示和修改建议。';
|
|
197
|
+
const source = extracted.chunks?.length ? extracted.chunks.map((chunk, index) => `\n--- 原文分块 ${index + 1}/${extracted.chunks.length} ---\n${chunk}`).join('') : '请直接读取附件内容。';
|
|
198
|
+
const fixed = JSON.stringify({ importTaskId: task.id, sourceFileId: task.sourceFileId, sourceFileName: task.sourceFileName, catalogType, replaceBatchId });
|
|
199
|
+
return { commandKey: 'assistant.chat.send_message', payload: { text: `请解析上传的外贸合规文件。${requirements}\n解析完成后必须调用工具 ${toolName} 保存结果,以下固定参数必须原样传入:${fixed}\n统一使用中文说明,不要遗漏文件中的记录。${source}`, clientMessageId: `trade-compliance:${task.id}`, files: [assistantFile(file, input, task.sourceFileName)], followUpMode: 'queue', state: { tradeComplianceWorkbench: { actionKey, importTaskId: task.id } } } };
|
|
200
|
+
}
|
|
201
|
+
function assistantFile(file, input, fileName) { const workspace = record(input.workspaceFile); return { id: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, fileId: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, fileAssetId: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, workspacePath: workspace.workspacePath ?? input.workspacePath, filePath: workspace.filePath ?? input.filePath, name: fileName, originalName: fileName, mimeType: file?.mimetype ?? file?.type, size: file?.size, role: 'source_file' }; }
|
|
202
|
+
function documentTypeForAction(action) { const map = { upload_controlled_catalog: 'CONTROLLED_CATALOG', upload_sanction_catalog: 'SANCTION_CATALOG', upload_purchase_contract: 'PURCHASE_CONTRACT', upload_customer_contract: 'CUSTOMER_CONTRACT' }; const value = map[action]; if (!value)
|
|
203
|
+
throw new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的上传操作', { action }); return value; }
|
|
204
|
+
function formatOf(fileName) { const extension = fileName.split('.').pop()?.toUpperCase(); const normalized = extension === 'JPG' ? 'JPEG' : extension; return SourceFileFormats.includes(normalized) ? normalized : null; }
|
|
205
|
+
function scopeFromContext(context) { if (!context.tenantId || !context.organizationId)
|
|
206
|
+
throw new DomainError(DomainErrorCodes.INVALID_INPUT, '请求上下文缺少租户或组织标识'); return { tenantId: context.tenantId, organizationId: context.organizationId, userId: context.userId }; }
|
|
207
|
+
function success(data) { return { success: true, message: text('Saved', '已保存'), data, refresh: true }; }
|
|
208
|
+
function failure(error) { const domain = error instanceof DomainError ? error : new DomainError(DomainErrorCodes.INVALID_INPUT, error instanceof Error ? error.message : String(error)); return { success: false, message: text(domain.message, domain.message), error: { code: domain.code, message: domain.message, details: domain.details }, refresh: false }; }
|
|
209
|
+
function record(value) { return value && typeof value === 'object' && !Array.isArray(value) ? value : {}; }
|
|
210
|
+
function requiredString(value, field) { const result = String(value ?? '').trim(); if (!result)
|
|
211
|
+
throw new DomainError(DomainErrorCodes.INVALID_INPUT, `缺少 ${field}`); return result; }
|
|
212
|
+
function stringValue(value) { const result = String(value ?? '').trim(); return result || undefined; }
|
|
213
|
+
function numberValue(value, fallback) { const result = Number(value); return Number.isFinite(result) ? result : fallback; }
|
|
214
|
+
function fileNameOf(file, input) { return String(file?.originalname ?? file?.name ?? input.fileName ?? 'uploaded-file'); }
|
|
215
|
+
function bufferOf(file) { const value = file?.buffer; if (Buffer.isBuffer(value))
|
|
216
|
+
return value; if (value instanceof ArrayBuffer)
|
|
217
|
+
return Buffer.from(value); if (ArrayBuffer.isView(value))
|
|
218
|
+
return Buffer.from(value.buffer, value.byteOffset, value.byteLength); return null; }
|
|
219
|
+
async function bufferFromPath(input) { const workspace = record(input.workspaceFile); const path = stringValue(workspace.workspacePath ?? workspace.filePath ?? input.workspacePath ?? input.filePath); return path ? readFile(path) : null; }
|
|
220
|
+
async function readPackageFile(packageName, filePath) { const root = dirname(requireFromHere.resolve(`${packageName}/package.json`)); return readFile(join(root, filePath), 'utf8'); }
|
|
221
|
+
function hsConfig() { return { baseUrl: process.env.TRADE_COMPLIANCE_HS_BASE_URL, timeoutMs: Number(process.env.TRADE_COMPLIANCE_HS_TIMEOUT_MS || 15000) }; }
|
|
222
|
+
//# sourceMappingURL=workbench-view.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-view.provider.js","sourceRoot":"","sources":["../../src/lib/workbench-view.provider.ts"],"names":[],"mappings":"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"}
|