feat(manufacturers): detail page with MPN-level insights
CI / Lint · Typecheck · Test · Build (push) Successful in 47s
CI / Playwright (smoke) (push) Has been skipped
CI / Build & push images (push) Successful in 1m2s

Adds /manufacturers/:id with vendor-wide KPIs, top MPNs by units,
failures by MPN, category mix, past-EOL exposure, and a filtered
PartModels table. Wires upstream links from PartDetail and
PartModelDetail so the manufacturer name is a navigable anchor.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-17 15:10:37 -04:00
parent c6fb839005
commit 1d53e81d5e
14 changed files with 1027 additions and 30 deletions
+1
View File
@@ -19,3 +19,4 @@ export * from './saved-views.js';
export * from './csv-imports.js';
export * from './analytics.js';
export * from './part-model-insights.js';
export * from './manufacturer-insights.js';
@@ -0,0 +1,49 @@
export interface ManufacturerPriceStats {
total: number;
average: number;
min: number | null;
max: number | null;
countWithPrice: number;
}
export interface ManufacturerFailureStats {
repairs: number;
distinctFailedParts: number;
fmsImplicating: number;
}
export interface ManufacturerCategoryCount {
categoryId: string | null;
categoryName: string;
count: number;
}
export interface ManufacturerModelCount {
partModelId: string;
mpn: string;
count: number;
}
export interface ManufacturerModelFailureCount {
partModelId: string;
mpn: string;
repairs: number;
}
export interface ManufacturerPastEolModel {
partModelId: string;
mpn: string;
eolDate: string;
deployedCount: number;
}
export interface ManufacturerInsights {
totalPartModels: number;
totalParts: number;
priceStats: ManufacturerPriceStats;
failures: ManufacturerFailureStats;
byCategory: ManufacturerCategoryCount[];
topModelsByUnits: ManufacturerModelCount[];
failuresByModel: ManufacturerModelFailureCount[];
pastEolModels: ManufacturerPastEolModel[];
}