Electronic Component Skill
This skill provides guidance for working with electronic components in the lib-electronic-components library.
Core Concepts
Component Type Hierarchy
Components are classified using ComponentType enum with two levels:
- Base types:
RESISTOR,CAPACITOR,MOSFET,OPAMP, etc. - Manufacturer-specific types:
MOSFET_INFINEON,CAPACITOR_CERAMIC_MURATA, etc.
Use getBaseType() to map specific types to their base type.
Key Classes
| Class | Purpose |
|---|---|
ComponentType |
Enum of ~200 component types with passive/semiconductor flags |
ComponentManufacturer |
Enum of manufacturers with regex patterns |
ManufacturerHandler |
Interface for manufacturer-specific MPN parsing |
MPNUtils |
Static utilities for MPN normalization, similarity, type detection |
BOMEntry |
Component entry in a bill of materials |
Adding a New Manufacturer Handler
- Create handler in
src/main/java/no/cantara/electronic/component/lib/manufacturers/:
public class NewMfrHandler implements ManufacturerHandler {
@Override
public void initializePatterns(PatternRegistry registry) {
registry.registerPattern(ComponentType.RESISTOR,
Pattern.compile("^NMF[0-9]{4}.*", Pattern.CASE_INSENSITIVE));
}
@Override
public String extractPackageCode(String mpn) { /* ... */ }
@Override
public String extractSeries(String mpn) { /* ... */ }
@Override
public boolean isOfficialReplacement(String mpn1, String mpn2) { return false; }
@Override
public Set<ManufacturerComponentType> getManufacturerTypes() { return Set.of(); }
@Override
public Set<ComponentType> getSupportedTypes() {
return Set.of(ComponentType.RESISTOR);
}
}
- Add entry to
ComponentManufacturerenum:
NEW_MFR("(?:NMF)[0-9]", "New Manufacturer", new NewMfrHandler()),
Adding a New Component Type
- Add to
ComponentTypeenum with passive/semiconductor flags:
NEW_TYPE(false, true), // (isPassive, isSemiconductor)
NEW_TYPE_MANUFACTURER(false, true),
- Update
getBaseType()switch to map specific types to base:
case NEW_TYPE_INFINEON, NEW_TYPE_ST -> NEW_TYPE;
- Add patterns in relevant manufacturer handlers
MPN Operations
// Normalize MPN (removes special characters)
String normalized = MPNUtils.normalize("LM358-N"); // "LM358N"
// Strip package suffix to get base part number
String base = MPNUtils.stripPackageSuffix("MAX3483EESA+"); // "MAX3483EESA"
String base2 = MPNUtils.stripPackageSuffix("LTC2053HMS8#PBF"); // "LTC2053HMS8"
// Generate search variations (for datasheet/component searches)
List<String> vars = MPNUtils.getSearchVariations("TJA1050T/CM,118");
// ["TJA1050T/CM,118", "TJA1050T"]
// Check component equivalence (ignoring package suffixes)
boolean equiv = MPNUtils.isEquivalentMPN("LTC2053HMS8#PBF", "LTC2053HMS8#TR"); // true
// Extract package suffix
Optional<String> suffix = MPNUtils.getPackageSuffix("MAX3483EESA+"); // Optional.of("+")
// Detect manufacturer
ComponentManufacturer mfr = ComponentManufacturer.fromMPN("STM32F103C8T6");
// Detect component type
ComponentType type = ComponentType.fromMPN("IRF540N"); // MOSFET
// Calculate similarity
double sim = MPNUtils.calculateSimilarity("LM358", "MC1458"); // 0.9
Package Suffix Support
MPNUtils now supports manufacturer-specific package suffixes:
- Maxim/AD:
+(lead-free) - e.g.,MAX3483EESA+ - Linear Tech:
#PBF,#TR(RoHS, Tape & Reel) - e.g.,LTC2053HMS8#PBF - NXP:
/CM,118(ordering codes) - e.g.,TJA1050T/CM,118 - Various:
,315(ordering codes) - e.g.,NC7WZ04,315
Use cases:
- Datasheet searches: Try both original and base MPN
- Component deduplication: Same base = same component
- BOM validation: Match supplier MPNs to design MPNs
- Inventory matching: Ignore packaging differences
Similarity Calculators
Each component type can have a dedicated similarity calculator in componentsimilaritycalculators/:
ResistorSimilarityCalculator- compares resistance values, tolerances, packagesCapacitorSimilarityCalculator- compares capacitance, voltage, dielectricMosfetSimilarityCalculator- compares Vds, Rds(on), package- etc.
Implement ComponentSimilarityCalculator interface and add to list in MPNUtils.
Testing
Run component-related tests:
mvn test -Dtest=MPNUtilsTest
mvn test -Dtest=ComponentTypeDetectorTest
mvn test -Dtest=MPNExtractionTest
Related Skills
Use specialized skills for specific component types:
/resistor- Resistor patterns and value extraction/capacitor- Capacitor patterns and specifications/semiconductor- Diodes, transistors, MOSFETs/ic- Microcontrollers, op-amps, voltage regulators/connector- Connector manufacturer patterns/memory- Flash, EEPROM, RAM components
See Also
Advanced Skills
/handler-pattern-design- Handler patterns, anti-patterns, and testing strategies/mpn-normalization- MPN suffix handling and normalization patterns/component-type-detection-hierarchy- Type hierarchy, specificity levels, getBaseType() mapping/component-spec-extraction- Spec extraction patterns and naming conventions/manufacturer-detection-from-mpn- Manufacturer regex patterns and detection ordering
Documentation
- HISTORY.md - Handler bug patterns and fixes (PR #89, handler cleanup PRs #73-88)
- .docs/history/HANDLER_IMPLEMENTATION_PATTERNS.md - Detailed handler development patterns
- .docs/history/BUG_FIX_ANALYSIS.md - Critical bugs and prevention strategies
Recording Learnings
Important: When you discover quirks, edge cases, or important patterns while working on components:
- General/cross-cutting learnings → Add to
CLAUDE.mdunder "Learnings & Quirks" - Component-specific learnings → Add to the relevant skill file below
Examples of what to record:
- MPN patterns that don't follow expected conventions
- Manufacturer-specific quirks in part numbering
- Edge cases in similarity calculation
- Test failures that revealed unexpected behavior
- Regex patterns that needed adjustment
Learnings & Quirks
Handler Patterns
- Use
registry.addPattern()notregistry.registerPattern()- the latter requires a compiled Pattern object - Handler order in
ComponentManufacturerenum affects detection priority for ambiguous MPNs
MPN Edge Cases
- Some MPNs contain hyphens that are significant (e.g., Molex
43045-0212) vs decorative (e.g.,LM358-N) - Yageo resistors:
RC0603FR-0710KL- the-07is TCR code, not a separator