easyeda-mcp-pro 0.15.0 → 0.17.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/dist/bom-quality/quality.js +247 -0
- package/dist/bom-quality/quality.js.map +1 -1
- package/dist/bom-quality/types.d.ts +62 -1
- package/dist/bom-quality/types.js +2 -0
- package/dist/bom-quality/types.js.map +1 -1
- package/dist/config/profiles.js +3 -3
- package/dist/config/version.d.ts +1 -1
- package/dist/config/version.js +1 -1
- package/dist/quote-gating/index.d.ts +2 -0
- package/dist/quote-gating/index.js +2 -0
- package/dist/quote-gating/index.js.map +1 -0
- package/dist/quote-gating/types.d.ts +87 -0
- package/dist/quote-gating/types.js +3 -0
- package/dist/quote-gating/types.js.map +1 -0
- package/dist/quote-gating/workflow.d.ts +3 -0
- package/dist/quote-gating/workflow.js +120 -0
- package/dist/quote-gating/workflow.js.map +1 -0
- package/dist/tools/L1_bom_sourcing.js +101 -1
- package/dist/tools/L1_bom_sourcing.js.map +1 -1
- package/dist/tools/L1_export.js +151 -0
- package/dist/tools/L1_export.js.map +1 -1
- package/dist/vendors/jlcpcb/client.d.ts +3 -4
- package/dist/vendors/jlcpcb/client.js +8 -7
- package/dist/vendors/jlcpcb/client.js.map +1 -1
- package/easyeda-bridge-extension.eext +0 -0
- package/package.json +1 -1
|
@@ -60,6 +60,224 @@ function lowStockIssue(ref, supplier, stock) {
|
|
|
60
60
|
stock,
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
+
function staleVendorDataIssue(ref, ageSeconds) {
|
|
64
|
+
return issue('stale_vendor_data', 'warning', ref, `Supplier data is stale (${ageSeconds}s old)`, {
|
|
65
|
+
cacheAgeSeconds: ageSeconds,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function missingVendorDataIssue(ref) {
|
|
69
|
+
return issue('missing_vendor_data', 'warning', ref, 'No supplier data was available for component quality scoring');
|
|
70
|
+
}
|
|
71
|
+
function packageMismatchIssue(ref, footprint) {
|
|
72
|
+
return issue('package_mismatch', 'error', ref, `Supplier package data does not match footprint ${footprint}`, {
|
|
73
|
+
footprint,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function manufacturerRiskIssue(ref, reason) {
|
|
77
|
+
return issue('manufacturer_risk', 'warning', ref, reason);
|
|
78
|
+
}
|
|
79
|
+
function lifecycleRiskIssue(ref, reason) {
|
|
80
|
+
return issue('lifecycle_risk', 'error', ref, reason);
|
|
81
|
+
}
|
|
82
|
+
function noSafeAlternateIssue(ref) {
|
|
83
|
+
return issue('no_safe_alternate', 'warning', ref, 'No safe alternate candidate was identified');
|
|
84
|
+
}
|
|
85
|
+
function riskFromScore(score) {
|
|
86
|
+
if (score >= 85)
|
|
87
|
+
return 'low';
|
|
88
|
+
if (score >= 65)
|
|
89
|
+
return 'medium';
|
|
90
|
+
if (score >= 40)
|
|
91
|
+
return 'high';
|
|
92
|
+
return 'critical';
|
|
93
|
+
}
|
|
94
|
+
function dimension(score, reason) {
|
|
95
|
+
return { score, risk: riskFromScore(score), reason };
|
|
96
|
+
}
|
|
97
|
+
function footprintTokens(value) {
|
|
98
|
+
if (!value)
|
|
99
|
+
return [];
|
|
100
|
+
const normalized = value.toUpperCase();
|
|
101
|
+
const tokens = [
|
|
102
|
+
'0201',
|
|
103
|
+
'0402',
|
|
104
|
+
'0603',
|
|
105
|
+
'0805',
|
|
106
|
+
'1206',
|
|
107
|
+
'1210',
|
|
108
|
+
'SOT-23',
|
|
109
|
+
'SOT23',
|
|
110
|
+
'SOIC',
|
|
111
|
+
'TSSOP',
|
|
112
|
+
'QFN',
|
|
113
|
+
'DFN',
|
|
114
|
+
'BGA',
|
|
115
|
+
'DIP',
|
|
116
|
+
];
|
|
117
|
+
return tokens.filter((token) => normalized.includes(token));
|
|
118
|
+
}
|
|
119
|
+
function packageMatches(entryFootprint, result) {
|
|
120
|
+
const expected = footprintTokens(entryFootprint);
|
|
121
|
+
if (expected.length === 0)
|
|
122
|
+
return undefined;
|
|
123
|
+
const descriptionTokens = footprintTokens(result.description);
|
|
124
|
+
if (descriptionTokens.length === 0)
|
|
125
|
+
return undefined;
|
|
126
|
+
return expected.some((token) => descriptionTokens.includes(token));
|
|
127
|
+
}
|
|
128
|
+
function supplierIdentity(result) {
|
|
129
|
+
return result.mpn ?? result.lcsc ?? result.description ?? result.supplier;
|
|
130
|
+
}
|
|
131
|
+
function evaluateAlternate(entry, result) {
|
|
132
|
+
const caveats = [];
|
|
133
|
+
const reasons = [];
|
|
134
|
+
let score = 100;
|
|
135
|
+
let compatibility = 'drop_in';
|
|
136
|
+
const pkg = packageMatches(entry.footprint, result);
|
|
137
|
+
if (result.lifecycle === 'discontinued') {
|
|
138
|
+
compatibility = 'unsafe';
|
|
139
|
+
score -= 60;
|
|
140
|
+
caveats.push('Lifecycle is discontinued or obsolete.');
|
|
141
|
+
}
|
|
142
|
+
else if (result.lifecycle === 'unknown') {
|
|
143
|
+
compatibility = 'review_required';
|
|
144
|
+
score -= 15;
|
|
145
|
+
caveats.push('Lifecycle is unknown; verify with manufacturer datasheet.');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
reasons.push('Lifecycle is active.');
|
|
149
|
+
}
|
|
150
|
+
if (result.stock <= 0) {
|
|
151
|
+
compatibility = 'unsafe';
|
|
152
|
+
score -= 45;
|
|
153
|
+
caveats.push('No supplier stock is available.');
|
|
154
|
+
}
|
|
155
|
+
else if (result.stock < Math.max(1, entry.quantity * 10)) {
|
|
156
|
+
compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
|
|
157
|
+
score -= 15;
|
|
158
|
+
caveats.push('Stock is low relative to BOM quantity.');
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
reasons.push('Supplier stock is available.');
|
|
162
|
+
}
|
|
163
|
+
if (pkg === false) {
|
|
164
|
+
compatibility = 'unsafe';
|
|
165
|
+
score -= 50;
|
|
166
|
+
caveats.push(`Package appears incompatible with footprint ${entry.footprint}.`);
|
|
167
|
+
}
|
|
168
|
+
else if (pkg === undefined && entry.footprint) {
|
|
169
|
+
compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
|
|
170
|
+
score -= 10;
|
|
171
|
+
caveats.push('Package could not be verified from supplier description.');
|
|
172
|
+
}
|
|
173
|
+
else if (pkg === true) {
|
|
174
|
+
reasons.push('Package appears compatible with the requested footprint.');
|
|
175
|
+
}
|
|
176
|
+
if (!result.manufacturer) {
|
|
177
|
+
compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
|
|
178
|
+
score -= 10;
|
|
179
|
+
caveats.push('Manufacturer is missing from supplier data.');
|
|
180
|
+
}
|
|
181
|
+
if ((result.cacheAgeSeconds ?? 0) > 7 * 24 * 60 * 60) {
|
|
182
|
+
compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
|
|
183
|
+
score -= 10;
|
|
184
|
+
caveats.push('Supplier data is stale and should be refreshed.');
|
|
185
|
+
}
|
|
186
|
+
const boundedScore = Math.max(0, Math.min(100, score));
|
|
187
|
+
return {
|
|
188
|
+
supplier: result.supplier,
|
|
189
|
+
mpn: result.mpn,
|
|
190
|
+
lcsc: result.lcsc,
|
|
191
|
+
manufacturer: result.manufacturer,
|
|
192
|
+
description: result.description,
|
|
193
|
+
lifecycle: result.lifecycle,
|
|
194
|
+
stock: result.stock,
|
|
195
|
+
unitPrice: result.unitPrice,
|
|
196
|
+
currency: result.currency,
|
|
197
|
+
compatibility,
|
|
198
|
+
score: boundedScore,
|
|
199
|
+
reasons: reasons.length > 0 ? reasons : [`Candidate ${supplierIdentity(result)} requires review.`],
|
|
200
|
+
caveats,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function assessComponentQuality(entry, supplierData, config) {
|
|
204
|
+
const found = supplierData.filter((result) => result.found);
|
|
205
|
+
const live = supplierData.filter((result) => !result.fromCache);
|
|
206
|
+
const cached = supplierData.filter((result) => result.fromCache);
|
|
207
|
+
const totalStock = found.reduce((acc, result) => acc + result.stock, 0);
|
|
208
|
+
const oldestCacheAge = supplierData.reduce((max, result) => Math.max(max, result.cacheAgeSeconds ?? 0), 0);
|
|
209
|
+
const newestQueryAt = supplierData
|
|
210
|
+
.map((result) => result.queriedAt)
|
|
211
|
+
.sort()
|
|
212
|
+
.at(-1);
|
|
213
|
+
const allDiscontinued = found.length > 0 && found.every((result) => result.lifecycle === 'discontinued');
|
|
214
|
+
const anyUnknownLifecycle = found.some((result) => result.lifecycle === 'unknown');
|
|
215
|
+
const packageMismatch = found.some((result) => packageMatches(entry.footprint, result) === false);
|
|
216
|
+
const missingPackageEvidence = Boolean(entry.footprint) &&
|
|
217
|
+
found.every((result) => packageMatches(entry.footprint, result) === undefined);
|
|
218
|
+
const lifecycle = allDiscontinued
|
|
219
|
+
? dimension(0, 'All found supplier records are discontinued or obsolete.')
|
|
220
|
+
: found.length === 0
|
|
221
|
+
? dimension(25, 'No found supplier records are available for lifecycle review.')
|
|
222
|
+
: anyUnknownLifecycle
|
|
223
|
+
? dimension(70, 'At least one found supplier record has unknown lifecycle.')
|
|
224
|
+
: dimension(100, 'Found supplier records indicate active lifecycle.');
|
|
225
|
+
const stock = found.length === 0
|
|
226
|
+
? dimension(20, 'No found supplier stock data is available.')
|
|
227
|
+
: totalStock < entry.quantity
|
|
228
|
+
? dimension(25, 'Total supplier stock is below BOM quantity.')
|
|
229
|
+
: found.every((result) => result.stock < config.lowStockThreshold)
|
|
230
|
+
? dimension(55, 'All found suppliers are below the configured low-stock threshold.')
|
|
231
|
+
: dimension(100, 'Supplier stock is above the configured threshold.');
|
|
232
|
+
const manufacturer = !entry.manufacturer && found.every((result) => !result.manufacturer)
|
|
233
|
+
? dimension(45, 'Manufacturer is missing from BOM and supplier data.')
|
|
234
|
+
: found.length <= 1
|
|
235
|
+
? dimension(70, 'Part has limited manufacturer/source diversity.')
|
|
236
|
+
: dimension(100, 'Manufacturer/source diversity is acceptable.');
|
|
237
|
+
const pkg = !entry.footprint
|
|
238
|
+
? dimension(40, 'BOM entry has no footprint/package metadata.')
|
|
239
|
+
: packageMismatch
|
|
240
|
+
? dimension(25, 'At least one supplier candidate appears package-incompatible.')
|
|
241
|
+
: missingPackageEvidence
|
|
242
|
+
? dimension(70, 'Package could not be verified from supplier descriptions.')
|
|
243
|
+
: dimension(100, 'Package metadata is present and compatible.');
|
|
244
|
+
const freshness = supplierData.length === 0
|
|
245
|
+
? dimension(30, 'No vendor data was collected for freshness review.')
|
|
246
|
+
: oldestCacheAge > config.staleVendorDataSeconds
|
|
247
|
+
? dimension(55, 'At least one supplier response is older than the stale-data threshold.')
|
|
248
|
+
: dimension(100, 'Supplier data freshness is within threshold.');
|
|
249
|
+
const alternates = found
|
|
250
|
+
.map((result) => evaluateAlternate(entry, result))
|
|
251
|
+
.sort((a, b) => b.score - a.score);
|
|
252
|
+
const score = Math.round(lifecycle.score * 0.25 +
|
|
253
|
+
stock.score * 0.25 +
|
|
254
|
+
manufacturer.score * 0.15 +
|
|
255
|
+
pkg.score * 0.2 +
|
|
256
|
+
freshness.score * 0.15);
|
|
257
|
+
const safeAlternate = alternates.some((candidate) => candidate.compatibility !== 'unsafe');
|
|
258
|
+
const recommendedAction = supplierData.length === 0
|
|
259
|
+
? 'insufficient_data'
|
|
260
|
+
: score < 45 || allDiscontinued || !safeAlternate
|
|
261
|
+
? 'replace'
|
|
262
|
+
: score < config.minimumQualityScore
|
|
263
|
+
? 'review'
|
|
264
|
+
: 'accept';
|
|
265
|
+
return {
|
|
266
|
+
score,
|
|
267
|
+
risk: riskFromScore(score),
|
|
268
|
+
dimensions: { lifecycle, stock, manufacturer, package: pkg, freshness },
|
|
269
|
+
alternates,
|
|
270
|
+
recommendedAction,
|
|
271
|
+
provenance: {
|
|
272
|
+
supplierCount: supplierData.length,
|
|
273
|
+
foundSupplierCount: found.length,
|
|
274
|
+
liveSupplierCount: live.length,
|
|
275
|
+
cachedSupplierCount: cached.length,
|
|
276
|
+
oldestCacheAgeSeconds: oldestCacheAge,
|
|
277
|
+
newestQueryAt,
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
63
281
|
// ── Supplier query scope ───────────────────────────────────────────────────
|
|
64
282
|
/**
|
|
65
283
|
* Determine which supplier identifiers to query based on what the entry has.
|
|
@@ -169,6 +387,27 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
|
|
|
169
387
|
}
|
|
170
388
|
}
|
|
171
389
|
}
|
|
390
|
+
const componentQuality = assessComponentQuality(entry, supplierData, config);
|
|
391
|
+
if (supplierData.length === 0) {
|
|
392
|
+
issues.push(missingVendorDataIssue(entry.reference));
|
|
393
|
+
}
|
|
394
|
+
if (componentQuality.provenance.oldestCacheAgeSeconds > config.staleVendorDataSeconds) {
|
|
395
|
+
issues.push(staleVendorDataIssue(entry.reference, componentQuality.provenance.oldestCacheAgeSeconds));
|
|
396
|
+
}
|
|
397
|
+
if (componentQuality.dimensions.package.risk === 'critical' ||
|
|
398
|
+
componentQuality.dimensions.package.reason.includes('incompatible')) {
|
|
399
|
+
if (entry.footprint)
|
|
400
|
+
issues.push(packageMismatchIssue(entry.reference, entry.footprint));
|
|
401
|
+
}
|
|
402
|
+
if (componentQuality.dimensions.manufacturer.risk === 'high') {
|
|
403
|
+
issues.push(manufacturerRiskIssue(entry.reference, componentQuality.dimensions.manufacturer.reason));
|
|
404
|
+
}
|
|
405
|
+
if (componentQuality.dimensions.lifecycle.risk === 'critical') {
|
|
406
|
+
issues.push(lifecycleRiskIssue(entry.reference, componentQuality.dimensions.lifecycle.reason));
|
|
407
|
+
}
|
|
408
|
+
if (!componentQuality.alternates.some((candidate) => candidate.compatibility !== 'unsafe')) {
|
|
409
|
+
issues.push(noSafeAlternateIssue(entry.reference));
|
|
410
|
+
}
|
|
172
411
|
return {
|
|
173
412
|
reference: entry.reference,
|
|
174
413
|
description: entry.value ?? '',
|
|
@@ -178,6 +417,7 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
|
|
|
178
417
|
mpn: entry.mpn,
|
|
179
418
|
manufacturer: entry.manufacturer,
|
|
180
419
|
supplierData,
|
|
420
|
+
componentQuality,
|
|
181
421
|
issues,
|
|
182
422
|
};
|
|
183
423
|
}));
|
|
@@ -197,6 +437,13 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
|
|
|
197
437
|
rateLimitedCount: allIssues.filter((i) => i.type === 'rate_limited').length,
|
|
198
438
|
timeoutCount: allIssues.filter((i) => i.type === 'timeout').length,
|
|
199
439
|
invalidResponseCount: allIssues.filter((i) => i.type === 'invalid_response').length,
|
|
440
|
+
staleVendorDataCount: allIssues.filter((i) => i.type === 'stale_vendor_data').length,
|
|
441
|
+
missingVendorDataCount: allIssues.filter((i) => i.type === 'missing_vendor_data').length,
|
|
442
|
+
packageMismatchCount: allIssues.filter((i) => i.type === 'package_mismatch').length,
|
|
443
|
+
manufacturerRiskCount: allIssues.filter((i) => i.type === 'manufacturer_risk').length,
|
|
444
|
+
lifecycleRiskCount: allIssues.filter((i) => i.type === 'lifecycle_risk').length,
|
|
445
|
+
noSafeAlternateCount: allIssues.filter((i) => i.type === 'no_safe_alternate').length,
|
|
446
|
+
highRiskComponentCount: reportEntries.filter((e) => e.componentQuality.risk === 'high' || e.componentQuality.risk === 'critical').length,
|
|
200
447
|
};
|
|
201
448
|
return {
|
|
202
449
|
bomId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/bom-quality/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,8EAA8E;AAE9E,SAAS,KAAK,CACZ,IAAyB,EACzB,QAAsC,EACtC,SAAiB,EACjB,OAAe,EACf,OAAiC;IAEjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,QAAgB,EAAE,MAAc;IACrE,OAAO,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,yBAAyB,QAAQ,KAAK,MAAM,EAAE,EAAE;QACxF,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,MAA2B;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,IAAI,GACR,MAAM,KAAK,cAAc;QACzB,MAAM,KAAK,cAAc;QACzB,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,kBAAkB;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,aAAa,CAAC;IAEpB,MAAM,QAAQ,GAAG,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAEzF,OAAO,KAAK,CACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,YAAY,MAAM,CAAC,QAAQ,UAAU,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,oBAAoB,EAAE,EACvF;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,SAAyB;IAC/D,OAAO,KAAK,CACV,eAAe,EACf,SAAS,EACT,GAAG,EACH,yCAAyC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAChE,EAAE,SAAS,EAAE,CACd,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,KAAK,CACV,aAAa,EACb,SAAS,EACT,GAAG,EACH,yEAAyE,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,OAAO,KAAK,CACV,mBAAmB,EACnB,SAAS,EACT,GAAG,EACH,4EAA4E,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAa;IACjE,OAAO,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,QAAQ,KAAK,KAAK,QAAQ,EAAE;QACpF,QAAQ;QACR,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,YAAY,CACnB,KAAe;IAEf,MAAM,OAAO,GAGR,EAAE,CAAC;IAER,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAE5E,KAAK,UAAU,sBAAsB,CACnC,KAAe,EACf,aAAiD,EACjD,OAAoB;IAEpB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,MAAM,EAAE,CAAC;gBACX,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK;oBAAE,SAAS,GAAG,IAAI,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,OAAmB,EACnB,QAAoB,EACpB,SAA2B,0BAA0B;IAErD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,kCAAkC;IAClC,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1B,sEAAsE;QACtE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAC5E,KAAK,EACL,aAAa,EACb,MAAM,CACP,CAAC;QACF,IAAI,SAAS;YAAE,iBAAiB,GAAG,IAAI,CAAC;QAExC,sEAAsE;QACtE,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,yEAAyE;QACzE,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,cAAc,CACjD,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,6CAA6C;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,qBAAqB,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,KAAK,MAAM,cAAc,IAAI,YAAY,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACzE,IAAI,WAAW;gBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,uBAAuB;QACvB,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC1D,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,6CAA6C;QAC7C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC/E,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;YAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY;YACZ,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,2EAA2E;IAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QAC9D,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;QAClE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;QAC3D,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM;QAC1E,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,MAAM;QAC7E,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM;QACzE,qBAAqB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,MAAM;QACrF,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM;QACrE,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM;QAC5E,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM;QAC3E,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;QAClE,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,MAAM;KACpF,CAAC;IAEF,OAAO;QACL,KAAK;QACL,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,OAAO,EAAE,aAAa;QACtB,OAAO;QACP,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/bom-quality/quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
export type SupplierKind = 'lcsc' | 'mouser' | 'digikey' | 'jlcpcb';
|
|
8
8
|
/** Lifecycle / status of a part at a supplier. */
|
|
9
9
|
export type PartLifecycle = 'active' | 'discontinued' | 'unknown';
|
|
10
|
+
/** Normalized quality risk level. */
|
|
11
|
+
export type ComponentRiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
12
|
+
/** Substitution compatibility classification. */
|
|
13
|
+
export type SubstitutionCompatibility = 'drop_in' | 'review_required' | 'unsafe';
|
|
10
14
|
/** BOM entry as passed to quality check, extended with metadata. */
|
|
11
15
|
export interface BomEntry {
|
|
12
16
|
reference: string;
|
|
@@ -54,7 +58,51 @@ export interface SupplierQueryResult {
|
|
|
54
58
|
statusCode?: number;
|
|
55
59
|
}
|
|
56
60
|
/** Issue type identifiers for the BOM quality report. */
|
|
57
|
-
export type BomQualityIssueType = 'unavailable' | 'unauthorized' | 'rate_limited' | 'timeout' | 'invalid_response' | 'single_source' | 'missing_mpn' | 'missing_footprint' | 'low_stock';
|
|
61
|
+
export type BomQualityIssueType = 'stale_vendor_data' | 'missing_vendor_data' | 'package_mismatch' | 'manufacturer_risk' | 'lifecycle_risk' | 'no_safe_alternate' | 'unavailable' | 'unauthorized' | 'rate_limited' | 'timeout' | 'invalid_response' | 'single_source' | 'missing_mpn' | 'missing_footprint' | 'low_stock';
|
|
62
|
+
/** Per-dimension component quality score. */
|
|
63
|
+
export interface ComponentQualityDimension {
|
|
64
|
+
score: number;
|
|
65
|
+
risk: ComponentRiskLevel;
|
|
66
|
+
reason: string;
|
|
67
|
+
}
|
|
68
|
+
/** Suggested alternate or substitution candidate. */
|
|
69
|
+
export interface ComponentAlternateCandidate {
|
|
70
|
+
supplier: SupplierKind;
|
|
71
|
+
mpn?: string;
|
|
72
|
+
lcsc?: string;
|
|
73
|
+
manufacturer?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
lifecycle: PartLifecycle;
|
|
76
|
+
stock: number;
|
|
77
|
+
unitPrice?: number;
|
|
78
|
+
currency?: string;
|
|
79
|
+
compatibility: SubstitutionCompatibility;
|
|
80
|
+
score: number;
|
|
81
|
+
reasons: string[];
|
|
82
|
+
caveats: string[];
|
|
83
|
+
}
|
|
84
|
+
/** Aggregated lifecycle, stock, package and sourcing quality assessment. */
|
|
85
|
+
export interface ComponentQualityAssessment {
|
|
86
|
+
score: number;
|
|
87
|
+
risk: ComponentRiskLevel;
|
|
88
|
+
dimensions: {
|
|
89
|
+
lifecycle: ComponentQualityDimension;
|
|
90
|
+
stock: ComponentQualityDimension;
|
|
91
|
+
manufacturer: ComponentQualityDimension;
|
|
92
|
+
package: ComponentQualityDimension;
|
|
93
|
+
freshness: ComponentQualityDimension;
|
|
94
|
+
};
|
|
95
|
+
alternates: ComponentAlternateCandidate[];
|
|
96
|
+
recommendedAction: 'accept' | 'review' | 'replace' | 'insufficient_data';
|
|
97
|
+
provenance: {
|
|
98
|
+
supplierCount: number;
|
|
99
|
+
foundSupplierCount: number;
|
|
100
|
+
liveSupplierCount: number;
|
|
101
|
+
cachedSupplierCount: number;
|
|
102
|
+
oldestCacheAgeSeconds: number;
|
|
103
|
+
newestQueryAt?: string;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
58
106
|
/** A single quality issue found for a BOM entry. */
|
|
59
107
|
export interface BomQualityIssue {
|
|
60
108
|
type: BomQualityIssueType;
|
|
@@ -78,6 +126,8 @@ export interface BomQualityReport {
|
|
|
78
126
|
manufacturer?: string;
|
|
79
127
|
/** Supplier-specific data collected during the check. */
|
|
80
128
|
supplierData: SupplierQueryResult[];
|
|
129
|
+
/** Lifecycle, stock, package, source diversity, freshness and alternate assessment. */
|
|
130
|
+
componentQuality: ComponentQualityAssessment;
|
|
81
131
|
issues: BomQualityIssue[];
|
|
82
132
|
}>;
|
|
83
133
|
summary: {
|
|
@@ -94,6 +144,13 @@ export interface BomQualityReport {
|
|
|
94
144
|
rateLimitedCount: number;
|
|
95
145
|
timeoutCount: number;
|
|
96
146
|
invalidResponseCount: number;
|
|
147
|
+
staleVendorDataCount: number;
|
|
148
|
+
missingVendorDataCount: number;
|
|
149
|
+
packageMismatchCount: number;
|
|
150
|
+
manufacturerRiskCount: number;
|
|
151
|
+
lifecycleRiskCount: number;
|
|
152
|
+
noSafeAlternateCount: number;
|
|
153
|
+
highRiskComponentCount: number;
|
|
97
154
|
};
|
|
98
155
|
/** Whether any suppliers returned errors during the check. */
|
|
99
156
|
hasSupplierErrors: boolean;
|
|
@@ -108,5 +165,9 @@ export interface BomQualityConfig {
|
|
|
108
165
|
requireMpn: boolean;
|
|
109
166
|
/** Whether to treat a missing footprint as a warning. */
|
|
110
167
|
requireFootprint: boolean;
|
|
168
|
+
/** Cache age above which supplier data is considered stale. */
|
|
169
|
+
staleVendorDataSeconds: number;
|
|
170
|
+
/** Minimum acceptable aggregate component quality score. */
|
|
171
|
+
minimumQualityScore: number;
|
|
111
172
|
}
|
|
112
173
|
export declare const DEFAULT_BOM_QUALITY_CONFIG: BomQualityConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bom-quality/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bom-quality/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6MH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,iBAAiB,EAAE,GAAG;IACtB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IACxC,mBAAmB,EAAE,EAAE;CACxB,CAAC"}
|
package/dist/config/profiles.js
CHANGED
|
@@ -10,21 +10,21 @@ export const PROFILE_DEFINITIONS = {
|
|
|
10
10
|
name: 'pro',
|
|
11
11
|
label: 'Pro',
|
|
12
12
|
description: 'Adds pick-and-place, PDF, netlist export for manufacturing workflows',
|
|
13
|
-
approxToolCount: '
|
|
13
|
+
approxToolCount: '47',
|
|
14
14
|
isDefault: false,
|
|
15
15
|
},
|
|
16
16
|
full: {
|
|
17
17
|
name: 'full',
|
|
18
18
|
label: 'Full',
|
|
19
19
|
description: 'Adds controlled documented EasyEDA API method calls for full runtime control without raw JavaScript execution',
|
|
20
|
-
approxToolCount: '
|
|
20
|
+
approxToolCount: '56',
|
|
21
21
|
isDefault: false,
|
|
22
22
|
},
|
|
23
23
|
dev: {
|
|
24
24
|
name: 'dev',
|
|
25
25
|
label: 'Dev',
|
|
26
26
|
description: 'Adds diagnostics probes for bridge methods and live component runtime shape inspection',
|
|
27
|
-
approxToolCount: '
|
|
27
|
+
approxToolCount: '60',
|
|
28
28
|
isDefault: false,
|
|
29
29
|
},
|
|
30
30
|
experimental: {
|
package/dist/config/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SERVER_VERSION = "0.
|
|
1
|
+
export declare const SERVER_VERSION = "0.17.0";
|
package/dist/config/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const SERVER_VERSION = '0.
|
|
1
|
+
export const SERVER_VERSION = '0.17.0'; // x-release-please-version
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quote-gating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Quote workflow gating and confirmation types. */
|
|
2
|
+
export type QuoteProvider = 'jlcpcb' | 'custom';
|
|
3
|
+
export type QuoteAction = 'estimate' | 'verify_quote' | 'place_order';
|
|
4
|
+
export type QuoteWorkflowStatus = 'ready' | 'blocked' | 'requires_confirmation';
|
|
5
|
+
export type QuoteRiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
6
|
+
export interface QuoteBoardSpec {
|
|
7
|
+
boardCount: number;
|
|
8
|
+
layers: number;
|
|
9
|
+
widthMm: number;
|
|
10
|
+
heightMm: number;
|
|
11
|
+
thicknessMm?: number;
|
|
12
|
+
surfaceFinish?: string;
|
|
13
|
+
solderMask?: string;
|
|
14
|
+
copperWeight?: string;
|
|
15
|
+
assembly?: boolean;
|
|
16
|
+
stencil?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface QuoteCostBreakdownItem {
|
|
19
|
+
item: string;
|
|
20
|
+
cost: number;
|
|
21
|
+
}
|
|
22
|
+
export interface QuoteCostSnapshot {
|
|
23
|
+
total?: number;
|
|
24
|
+
currency?: string;
|
|
25
|
+
breakdown?: QuoteCostBreakdownItem[];
|
|
26
|
+
estimated: boolean;
|
|
27
|
+
nonBinding: boolean;
|
|
28
|
+
verifiedAt?: string;
|
|
29
|
+
source: 'local-estimate' | 'vendor-api' | 'user-provided';
|
|
30
|
+
}
|
|
31
|
+
export interface QuoteConfirmationInput {
|
|
32
|
+
confirmed?: boolean;
|
|
33
|
+
confirmationText?: string;
|
|
34
|
+
userId?: string;
|
|
35
|
+
reason?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface QuoteWorkflowInput {
|
|
38
|
+
provider: QuoteProvider;
|
|
39
|
+
action: QuoteAction;
|
|
40
|
+
projectId?: string;
|
|
41
|
+
board: QuoteBoardSpec;
|
|
42
|
+
quote?: QuoteCostSnapshot;
|
|
43
|
+
confirmation?: QuoteConfirmationInput;
|
|
44
|
+
vendorTermsReviewed?: boolean;
|
|
45
|
+
productionFilesReady?: boolean;
|
|
46
|
+
exportManifestVerified?: boolean;
|
|
47
|
+
productionReviewPassed?: boolean;
|
|
48
|
+
allowedPaidOperations?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface QuoteGateIssue {
|
|
51
|
+
code: 'QUOTE_VENDOR_TERMS_NOT_REVIEWED' | 'QUOTE_PRODUCTION_FILES_NOT_READY' | 'QUOTE_EXPORT_MANIFEST_NOT_VERIFIED' | 'QUOTE_PRODUCTION_REVIEW_NOT_PASSED' | 'QUOTE_PAID_OPERATION_UNSUPPORTED' | 'QUOTE_CONFIRMATION_REQUIRED' | 'QUOTE_NON_BINDING_ESTIMATE' | 'QUOTE_BOARD_SPEC_RISK';
|
|
52
|
+
severity: 'error' | 'warning' | 'info';
|
|
53
|
+
message: string;
|
|
54
|
+
remediationHint: string;
|
|
55
|
+
details?: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
export interface QuoteAuditEvent {
|
|
58
|
+
id: string;
|
|
59
|
+
createdAt: string;
|
|
60
|
+
provider: QuoteProvider;
|
|
61
|
+
action: QuoteAction;
|
|
62
|
+
projectId?: string;
|
|
63
|
+
confirmed: boolean;
|
|
64
|
+
userId?: string;
|
|
65
|
+
confirmationText?: string;
|
|
66
|
+
reason?: string;
|
|
67
|
+
paidOperationAttempted: boolean;
|
|
68
|
+
paidOperationAllowed: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface QuoteWorkflowReport {
|
|
71
|
+
provider: QuoteProvider;
|
|
72
|
+
action: QuoteAction;
|
|
73
|
+
projectId: string;
|
|
74
|
+
status: QuoteWorkflowStatus;
|
|
75
|
+
allowed: boolean;
|
|
76
|
+
quote: QuoteCostSnapshot;
|
|
77
|
+
risk: {
|
|
78
|
+
level: QuoteRiskLevel;
|
|
79
|
+
paidOperation: boolean;
|
|
80
|
+
humanConfirmationRequired: boolean;
|
|
81
|
+
nonBindingEstimate: boolean;
|
|
82
|
+
vendorTermsReviewed: boolean;
|
|
83
|
+
};
|
|
84
|
+
issues: QuoteGateIssue[];
|
|
85
|
+
audit: QuoteAuditEvent;
|
|
86
|
+
summary: string;
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quote-gating/types.ts"],"names":[],"mappings":"AAAA,oDAAoD"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { QuoteWorkflowInput, QuoteWorkflowReport } from './types.js';
|
|
2
|
+
export declare function evaluateQuoteWorkflow(input: QuoteWorkflowInput): QuoteWorkflowReport;
|
|
3
|
+
export declare const QUOTE_CONFIRMATION_TEXT = "I understand this quote workflow is non-binding and no paid order will be placed by this tool";
|