component.esd_rated

the part carries a datasheet ESD rating at or above the credit floor (needs datasheet parameters)

What it is

component.esd_rated(ref_des) yields one row per component whose joined datasheet spec declares an ESD tolerance at or above the credit floor. It is a datasheet-tier fact. A row means the part’s stub carries a machine-comparable ESD rating high enough to count as protection. No row means it does not, or that no datasheet is joined. It carries no value, only the ref-des, because it answers a yes-or-no question, whether this part has a creditable ESD rating.

For hardware engineers

ESD protection on a connector-facing signal can come from a dedicated clamp or from a part that is itself rated to survive the strike (a transceiver rated to IEC contact levels). This relation marks the parts that carry that rating on their datasheet, so a protection review can credit a signal whose only ESD survivability is the endpoint part’s own spec. The floor is deliberately conservative (2 kV), so a row means a genuinely rated part, not a marginal one.

For software engineers

This is a boolean predicate over the datasheet join (see the analogy guide). It resolves the component to its part-number stub, reads the ESD rating rows, and admits the ref-des only if a comparable row clears the floor. It is keyed by ref-des so a rule joins it against structural relations (component.net, component.class, pin.net) to ask “an ESD-rated part sitting on this signal”. Rows are 1:1 with qualifying components; absence is the normal case, not an error.

Go projector

esdRatedFacts in stdlib/relations/facts.go walks Model.Components(), looks up each part’s spec via Model.PartSpec(ref), and emits a row when check.EsdRatingLimits(spec) returns at least one qualifying rating. The esd-protection Go rule uses check.EsdRatingLimits too. The extractor keeps only absolute-max ESD rows that are machine-comparable and at or above icEsdFloorVolts (2 kV). The row cites every qualifying datasheet ESD rating (air and contact discharge are printed separately), not the component’s schematic site.

This is a datasheet-tier relation, so it is silent by construction without seeded parameters. A model built without a params set has a nil PartSpec for every ref, and the relation is empty. Run agni with --params <dir> to seed the datasheet corpus. Empty is skip, never a false pass, since no row means “no evidence of a rated part”, not “the part is unprotected”.

Datalog

Every component carrying a creditable datasheet ESD rating:

component.esd_rated(?r) => ?r

The ESD-rated parts that are also TVS clamps (join the datasheet fact to a class family tag):

component.esd_rated(?r), component.class(?r, "tvs") => ?r