Components#
BattINFO models every entity as a spec + instance pair. After materials
(material-spec.md) and electrodes
(electrodes-model.md), four component families let the rest of a
cell be described from reusable, IRI-addressable parts. Each family is a thin registry entry
that reuses an existing embedded holder shape; component-specs reference material-spec
records by IRI.
Family |
Spec record |
Instance record |
References materials via |
|---|---|---|---|
electrolyte |
|
|
salt + solvent + additive |
separator |
|
|
|
current-collector |
|
|
|
housing |
|
|
(materials as strings) |
Electrodes used to be a fifth generic family. They are now first-class — a curated kind,
deterministic identity that includes the processing route, design values, and their own
emitter — so they have their own page: Electrodes.
Generic API + per-family wrappers#
A generic factory in api.py is parameterized by family; thin per-family wrappers are
generated from the entity registry, so the surface matches the cell/material API:
from battinfo.api import create_separator_spec, create_component_spec
separator = create_separator_spec(
name="Celgard 2400", manufacturer="Celgard",
body={"material": "polypropylene", "structure": "monolayer",
"property": {"thickness": {"value": 25, "unit": "um"}}})
# generic form is also available
create_component_spec("electrolyte", name="…", body={...})
The step-by-step bench version of this — materials first, IRIs harvested from each save — is How-to: build a cell from components.
Per family you get create_<family>_spec, save_<family>_spec, query_<family>_specs,
template_<family>_spec and the bare-name instance equivalents (create_<family>,
query_<family>s). Generic functions create/save/query/template_component_spec(family, …)
(and _instance) underlie them. Electrodes expose the same function names, but as
hand-written first-class builders rather than generated wrappers.
Naming convention#
Family identifiers use underscores (current_collector); the IRI namespace uses
hyphens (https://w3id.org/battinfo/spec/…). The generic API derives
the namespace via family.replace("_", "-").
Electrolyte assembles material constituents#
electrolyte-spec carries salt + solvent_mixture.component[] + additive[], each able
to reference a material-spec by IRI — so the organic 1M LiPF₆ EC:EMC 3:7 and
aqueous 7M KOH example formulations are assembled from the LiPF6/EC/EMC/KOH material-specs
and emit OrganicElectrolyte / AqueousElectrolyte JSON-LD with hasSolute/hasSolvent.
Examples#
examples/<family>-spec/* + examples/<family>/* (single source of truth, mirrored into the
wheel). Coverage: Celgard PP + ceramic-coated PE separators; Al/Cu current collectors;
organic + aqueous electrolytes; CR2032 coin + LFP 100 Ah prismatic housings — grounded in the DIGIBAT Discovery-Benchmark and the Cell_Design_Tool.
Cell-specs reference these component-specs by IRI today via the five *_spec_id
fields — see Cells for the reference seam and the example fleet
that uses it.