component
C1812C124J1GACTU - KEMET
Public Made by Adomby adom
MLCC 0.12 uF +/-5 %, 100 V, C0G/NP0, 1812 (4532 metric)
main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
"""Write README.md, land-pattern/README.md, page.json, package.json, models.json, provenance.json,
verification.json and LICENSE for the C1812C124J1GACTU page.
usage: records.py <slug> (run after build.py, again after finish.py)
"""
import sys, os, json, hashlib, re
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from parts import P, TODAY, ROOT, DOCS, PRODUCT, PRODUCT_KEMET, KSIM, STEP_URL, DS_URL, DS_URL_ALT
slug = sys.argv[1]; assert slug == P["slug"]
OUT = f"/home/adom/project/uta-dynos/work/pages/{slug}"
MPN = P["mpn"]; OWNER = "adom"
B = json.load(open(os.path.join(ROOT, "work", f"{slug}-build.json")))
STEP, ORIG, FP, SYM = B["step"], B["orig"], B["fp"], B["sym"]
check = B["check"]
land = json.load(open(os.path.join(OUT, "land-pattern/land-check.json")))
lod = json.load(open(os.path.join(OUT, "lod/manifest.json")))
figs = json.load(open(os.path.join(OUT, "docs/figures/figures.json")))
repose = json.load(open(os.path.join(OUT, f"provenance/{STEP}.json")))
p_ = lambda f: os.path.join(OUT, f)
ex = lambda f: os.path.exists(p_(f))
sha = lambda f: hashlib.sha256(open(p_(f), "rb").read()).hexdigest()
def blob(f):
b = open(p_(f), "rb").read(); return hashlib.sha1(b"blob %d\0" % len(b) + b).hexdigest()
D = P["dist"]; L = P["land"]; LV = L["levels"]
ds = dict(zip(("key", "local", "file", "title", "url"), DOCS[0]))
by = {"name": "Claude (AI agent) for John Lauer", "handle": "john"}
HERO = f"{slug}-hero.glb"; HERO_SIDE = f"{slug}-hero.overlay.json"; HERO_PNG = "docs/verify/hero-preview.png"
LBR = f"{MPN}.lbr"; SCH = f"altium/{MPN}.SchLib"; PCB = f"altium/{MPN}.PcbLib"; HUB = f"{MPN}.adom-lbr.json"
REPOSE = f"provenance/{STEP}.json"
have_hero, have_alt, have_lbr = ex(HERO), ex(SCH) and ex(PCB), ex(LBR)
GL = "https://gitlab.com/kicad/libraries"
F = lambda n: f"docs/figures/{n}"
k = land["kicad"]
band = next(c for c in check["checks"] if c["dim"].startswith("B (band width), top"))["model_mm"]
# ---------------- land pattern write-up ----------------
t = "| Dimension | KiCad C_1812_4532Metric (used) | KEMET density level B | Difference |\n|---|---|---|---|\n"
for r in land["rows"]:
t += f"| {r['dim']} | {r['kicad_mm']:.2f} mm | {r['maker_nominal']:.2f} mm | {r['difference_mm']:+.2f} mm |\n"
lv = "| Level | C (centre to land centre) | Y (land length) | X (land width) | V1 x V2 (courtyard) |\n|---|---|---|---|---|\n"
for n, name in (("A", "A, maximum protrusion"), ("B", "B, median (nominal)"), ("C", "C, minimum protrusion")):
v = LV[n]; lv += f"| {name} | {v['C']:.2f} | {v['Y']:.2f} | {v['X']:.2f} | {v['V1']:.2f} x {v['V2']:.2f} |\n"
land_readme = f"""# Land pattern check: {MPN}
The footprint on this page is KiCad's standard library footprint `{P['fp_lib']}:{P['fp']}`, renamed to
`{FP[:-10]}` so it can sit beside other parts in one library folder. The copper is unchanged; only the name and
the 3D model path (`${{KIPRJMOD}}/{STEP}`) differ from upstream. This page compares it with the land pattern KEMET
recommends for 1812 parts in datasheet C1003_C0G (2/20/2025), page 12, Table 3 (IPC-7351).

## KEMET's three density levels for 1812 (mm)
{lv}
KEMET's drawing (p.12) gives C from the part centre to each land centre, so the gap between the lands is 2C - Y and the
overall length is 2C + Y. KEMET describes level B as "a robust solder attachment condition for reflow solder processes".
## KiCad pads against level B
{t}
## Result
KiCad's footprint is IPC-7351 nominal, the same rule as KEMET's level B: land centres, land length, gap and overall length
are identical. The only difference is the land width: KiCad's pads are {k['wid']:.2f} mm wide, KEMET's level B lands
{LV['B']['X']:.2f} mm (0.10 mm narrower, 0.05 mm per side; level C uses 3.40 mm). The KiCad pads have rounded corners
(roundrect ratio 0.18); KEMET draws plain rectangles. KiCad's courtyard is 6.00 x 3.90 mm, KEMET's V1 x V2 6.00 x 4.00 mm.
Both cover the full printed body width (3.20 +/-0.30 mm). This page keeps the KiCad pads. A design that wants KEMET's
level B exactly should widen each pad to {LV['B']['X']:.2f} mm.
KEMET lists the 1812 case as reflow only (datasheet p.3 and p.13).
The drawing and [land-check.json](land-check.json) come from `provenance/tools/landcheck.py`.
"""
open(p_("land-pattern/README.md"), "w").write(land_readme)
# ---------------- verification.json ----------------
entries = []
ck = [{"text": f"{c['dim']}: model {c['model_mm']:.3f} mm, KEMET {c['datasheet_min']:.2f} to {c['datasheet_max']:.2f} mm", "result": "pass" if c["pass"] else "fail"} for c in check["checks"]]
ck += [{"text": "thickness code for this exact part: 0.12 uF (124) at 100 V (voltage code 1) in C1812C is GH (Table 1B, p.8), T = 1.40 +/-0.15 mm (Table 2A, p.10)", "result": "pass"},
{"text": "KEMET's model is drawn at the top of every printed range: L 4.80 (max), W 3.50 (max), T 1.55 (GH max); its file name is CCS_CCSTD_1812_L4.8W3.5T1.55B0.6", "result": "note"},
{"text": f"band measured on the top face: {band:.3f} mm from the end (KEMET's file name says B0.6); inside B 0.60 +/-0.35 mm", "result": "note"},
{"text": "re-posed from Y-up to Z-up by one rigid rotation and translation; package solid volume unchanged (23.90241 mm3), 72 face colours copied", "result": "pass"},
{"text": "three 5 um KEMET logo glyph solids dropped from the board model: KEMET supplies C0G parts unmarked only (p.15); the original download is kept unchanged under vendor/", "result": "pass"}]
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "KEMET 3D model checked against the printed dimensions for thickness code GH",
"scope": ["3d-model"], "variants": ["*"], "checks": ck,
"evidence": [{"label": "overlay (top, bottom, side, end at true scale)", "href": f"docs/verify/{slug}-overlay.png"},
{"label": "numbers", "href": f"docs/verify/{slug}-check.json"},
{"label": "re-pose record", "href": REPOSE},
{"label": "datasheet p.3 dimensions", "href": F("kemet-ds-p3-dimensions.png")},
{"label": "datasheet p.8 thickness code", "href": F("kemet-ds-p8-waterfall-1812.png")},
{"label": "datasheet p.10 thickness range", "href": F("kemet-ds-p10-thickness.png")}],
"files": {STEP: sha(STEP), ORIG: sha(ORIG)}})
lck = [{"text": f"{r['dim']}: KiCad {r['kicad_mm']:.2f} mm, KEMET level B {r['maker_nominal']:.2f} mm ({r['difference_mm']:+.2f} mm)", "result": "note"} for r in land["rows"]]
lck.append({"text": "KiCad's IPC-7351 nominal footprint matches KEMET's level B except the land width (3.40 vs 3.50 mm); KiCad footprint kept (renamed, copper unchanged)", "result": "pass"})
lck.append({"text": "footprint names its 3D model: (model \"${KIPRJMOD}/" + STEP + "\")", "result": "pass"})
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Footprint compared with KEMET's recommended land pattern (Table 3, level B)",
"scope": ["footprint"], "variants": ["*"], "checks": lck,
"evidence": [{"label": "comparison drawing", "href": "land-pattern/land-pattern.png"}, {"label": "numbers", "href": "land-pattern/land-check.json"},
{"label": "write-up", "href": "land-pattern/README.md"}, {"label": "datasheet p.12", "href": F("kemet-ds-p12-land-pattern.png")}],
"files": {FP: sha(FP)}})
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Marking: the real part is unmarked",
"scope": ["3d-model", "marking"], "variants": ["*"],
"checks": [{"text": f"{P['marking']} ({P['marking_src']})", "result": "pass"},
{"text": "no AI-added part-number etch on any model; KEMET's CAD logo removed from the board model, kept in the vendor original", "result": "pass"}],
"evidence": [{"label": "datasheet p.15", "href": F("kemet-ds-p15-marking.png")}, {"label": "datasheet p.2", "href": F("kemet-ds-p2-benefits-packaging.png")}],
"files": {STEP: sha(STEP)}})
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Board-use LOD GLBs are clean and share the STEP pose",
"scope": ["lod"], "variants": ["*"],
"checks": [{"text": "four levels written, read back, bounds equal the STEP (Z-up, metres, seat z = 0)", "result": "pass"},
{"text": "no footprint, pad outline, label or silkscreen helpers; terminals present at every level", "result": "pass"},
{"text": "previews looked at by the AI agent, not yet by a person", "result": "note"}],
"evidence": [{"label": "manifest", "href": "lod/manifest.json"}], "files": {lv_["path"]: lv_["sha256"] for lv_ in lod["levels"]}})
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Pin 1, polarity and symbol",
"scope": ["footprint", "3d-model", "symbol"], "variants": ["*"],
"checks": [{"text": "non-polar two-terminal capacitor (datasheet p.2): pads 1 and 2 are interchangeable; symbol pins 1 and 2 map to pads 1 and 2", "result": "pass"},
{"text": "symbol pin ends at (0, +2.54) and (0, -2.54) mm, on the 2.54 mm grid", "result": "pass"},
{"text": "symbol fields MPN, Manufacturer, Mouser, DigiKey, Adom Wiki, Datasheet and Footprint filled; LCSC present but empty because JLCPCB/LCSC list no part (" + TODAY + ")", "result": "note"},
{"text": "model terminals sit on the footprint pads (both centred on the origin, long axis on X)", "result": "pass"}],
"evidence": [], "files": {FP: sha(FP), SYM: sha(SYM), STEP: sha(STEP)}})
if have_hero:
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Hero GLB built to the adom-hero standard",
"scope": ["3d-model", "hero"], "variants": ["*"],
"checks": [{"text": "built with adom/component-hero hero_glb.py (unmodified) from package-reference.glb, the footprint and page.json; alignment check OK", "result": "pass"},
{"text": "teal dashed pad outlines (alpha 0.5), silkscreen (alpha 0.3) and pad-number labels 1 and 2 (alpha 0.5); no pin-1 dot because the part is non-polar", "result": "pass"},
{"text": "preview looked at by the AI agent; the live wiki viewer still needs a person's look", "result": "note"}],
"evidence": [{"label": "preview", "href": HERO_PNG}, {"label": "overlay record", "href": HERO_SIDE}],
"files": {HERO: sha(HERO), "package-reference.glb": sha("package-reference.glb")}})
if have_alt or have_lbr:
entries.append({"date": TODAY, "by": by, "status": "verified", "title": "Fusion and Altium libraries generated from the KiCad symbol and footprint",
"scope": ["symbol", "footprint"], "variants": ["*"],
"checks": [{"text": "adom-lbr generate --part-metadata page.json: .lbr lint passed", "result": "pass"},
{"text": "adom-lbr import-kicad then assemble-altium --no-dedupe: native .SchLib and .PcbLib written, STEP body embedded", "result": "pass"},
{"text": "not yet opened in Fusion or Altium (no desktop app used for this page)", "result": "note"}],
"evidence": [], "files": {f: sha(f) for f in (LBR, SCH, PCB, HUB) if ex(f)}})
json.dump({"schema": "adom/verification@1", "part": MPN, "variants": [], "entries": entries}, open(p_("verification.json"), "w"), indent=1)
# ---------------- models.json ----------------
SRC = f"KEMET 3D model (STEP) for {MPN}, {STEP_URL}"
models = [
{"path": STEP, "format": "step", "title": "Package model (STEP, KEMET, Z-up)", "status": "current", "slot": "step", "variant": "plain", "role": "manufacturer",
"use": ["board-cad"], "marking": None, "derived_from": ORIG,
"unique": "The board CAD model: KEMET's package solid re-posed to Z-up, seated on z = 0 and centred; KEMET's CAD logo glyphs dropped (the real part is unmarked)",
"source": SRC, "sha256": sha(STEP), "git_blob": blob(STEP), "bytes": os.path.getsize(p_(STEP)), "thumb": "docs/models/step-plain.png"},
{"path": ORIG, "format": "step", "title": "KEMET original download (STEP)", "status": "current", "variant": "original", "role": "manufacturer",
"use": ["archive"], "marking": {"text": "KEMET", "surface": "top of the ceramic", "colour": "SolidWorks default lavender (no colour set by KEMET)"},
"unique": "The file exactly as downloaded: Y-up, corner at the origin, with KEMET's logo as three 5 um solids on top",
"source": SRC, "sha256": sha(ORIG), "git_blob": blob(ORIG), "bytes": os.path.getsize(p_(ORIG))},
{"path": "package-reference.glb", "format": "glb", "title": "Package model (GLB)", "status": "current", "slot": "model_3d_plain", "variant": "plain",
"role": "derived", "use": ["render", "board-insertion"], "marking": None, "derived_from": STEP,
"unique": "Clean board-use model for viewers (step2glb service), no footprint artwork", "source": SRC,
"sha256": sha("package-reference.glb"), "git_blob": blob("package-reference.glb"), "bytes": os.path.getsize(p_("package-reference.glb"))},
]
if have_hero:
models.append({"path": HERO, "format": "glb", "title": "Hero model (GLB)", "status": "current", "slot": "model_3d", "variant": "hero", "role": "derived",
"use": ["wiki-hero"], "marking": None, "derived_from": "package-reference.glb",
"unique": "The page's 3D view: the package plus teal dashed pad outlines, silkscreen and pad-number labels from the footprint (adom-hero standard)",
"source": "adom/component-hero hero_glb.py", "sha256": sha(HERO), "git_blob": blob(HERO), "bytes": os.path.getsize(p_(HERO)), "thumb": HERO_PNG})
for lv_ in lod["levels"]:
models.append({"path": lv_["path"], "format": "glb", "title": f"Board LOD, {lv_['level']}", "status": "current", "variant": "lod", "role": "derived",
"use": ["board-insertion", "render"], "marking": None, "derived_from": STEP,
"unique": f"{lv_['level']} detail for board and scaffold viewers: {lv_['triangles']} triangles, {lv_['primitives']} primitives",
"thumb": lv_["preview"]["path"], "source": SRC, "sha256": lv_["sha256"], "git_blob": blob(lv_["path"]), "bytes": lv_["sizeBytes"]})
json.dump({"schema": "adom/models@1", "part": MPN, "models": models, "updated": TODAY}, open(p_("models.json"), "w"), indent=1)
# ---------------- LICENSE ----------------
open(p_("LICENSE"), "w").write(f"""{MPN} component page
Original Adom content on this page (README text, the KiCad symbol {SYM}, the verification
drawings, the JSON records and the scripts in provenance/tools/) is licensed under the Creative
Commons Attribution 4.0 International License (CC-BY-4.0): https://creativecommons.org/licenses/by/4.0/
Third-party files keep their own terms and are not relicensed by this page:
- {ORIG} is KEMET's 3D model for this part, downloaded from KEMET, under KEMET's terms.
{STEP} and every model derived from it (package-reference.glb, {HERO}, lod/*.glb, the body
inside altium/{MPN}.PcbLib) are re-posed derivatives of that file and keep KEMET's terms.
- {FP} is KiCad library content, CC-BY-SA 4.0 with the KiCad library exception
({GL}/kicad-footprints); the footprint inside {LBR} and altium/{MPN}.PcbLib keeps that license.
- {ds['file']} and the page crops in docs/figures/ are KEMET documents, copyright of KEMET
Electronics Corporation (YAGEO Group), included unchanged (or cropped) for reference.
""")
# ---------------- README ----------------
spec_rows = [
("Capacitance", "0.12 uF (120 nF) +/-5 % (code 124, J)", "p.1 ordering information"),
("Rated voltage", "100 V DC (voltage code 1)", "p.1"),
("Dielectric", "C0G (NP0), EIA Class I, temperature compensating", "p.1"),
("Temperature coefficient", "0 +/-30 ppm/C from -55 to +125 C, referenced to +25 C and 0 V DC", "p.1, p.4"),
("Voltage coefficient", "no capacitance change with applied rated DC voltage", "p.1, p.2"),
("Aging", "0 % (maximum capacitance loss per decade hour); no capacitance decay with time", "p.2, p.4"),
("Dissipation factor", "0.1 % max at 25 C (1 kHz, 1.0 Vrms for parts above 1,000 pF)", "p.4"),
("Insulation resistance", "1,000 MOhm x uF or 100 GOhm, whichever is lower: about 8.3 GOhm min for 0.12 uF (100 V applied, 25 C)", "p.4"),
("Dielectric withstanding voltage", "250 % of rated voltage (250 V) for 5 +/-1 s, charge current up to 50 mA", "p.4"),
("After life, humidity and moisture tests", "capacitance shift 0.3 % or +/-0.25 pF max, DF 0.5 % max, IR 10 % of initial limit", "p.4"),
("Operating temperature", "-55 to +125 C", "p.4"),
("Size", "L 4.50 +/-0.30, W 3.20 +/-0.30, T 1.40 +/-0.15 (thickness code GH), B 0.60 +/-0.35, S 2.30 min (mm)", "p.3, p.8, p.10"),
("Termination", "100 % matte tin over nickel barrier over copper (termination code C)", "p.1, p.15"),
("Packaging (TU)", "7 inch reel, unmarked; embossed plastic tape 12 mm wide, 8 mm pitch; 1,000 pieces per reel", "p.2, p.10, p.16"),
("Soldering", "reflow only for 1812; matte Sn profile peaks at 260 C; up to three reflow passes", "p.3, p.13"),
("Compliance", "lead (Pb) free, RoHS and REACH compliant without exemptions", "p.1, p.2"),
("Marking", "none: C0G parts are supplied unmarked only", "p.2, p.15"),
]
spec_tbl = "| Parameter | Value | Datasheet page |\n|---|---|---|\n" + "".join(f"| {a} | {b} | {c} |\n" for a, b, c in spec_rows)
dist_tbl = ("| Distributor | Part number | Stock seen " + TODAY + " | Price seen |\n|---|---|---|---|\n"
+ "".join(f"| {n} | [{D[kk][0]}]({D[kk][1]}) | {D[kk][2]:,} | {D[kk][3]} |\n" for kk, n in (("mouser", "Mouser"), ("digikey", "DigiKey")))
+ "| LCSC / JLCPCB | not listed | - | - |\n")
fig_tbl = "| Figure | Source |\n|---|---|\n" + "".join(f"| [{f['caption']}]({f['file']}) | KEMET C1003_C0G, p.{f['page']} |\n" for f in figs)
cad_rows = [(f"`{SYM}`", "KiCad symbol (standard capacitor graphic, pin ends on the 2.54 mm grid) with MPN, Manufacturer, Mouser, DigiKey, LCSC (empty) and Adom Wiki fields"),
(f"`{FP}`", f"KiCad footprint (KiCad library `{P['fp']}`, renamed; model `${{KIPRJMOD}}/{STEP}`)")]
if have_lbr: cad_rows.append((f"`{LBR}`", "Fusion / EAGLE library made with `adom-lbr generate`"))
if have_alt: cad_rows.append((f"`{SCH}`, `{PCB}`", f"Altium symbol and footprint libraries (native binary) made with `adom-lbr import-kicad` and `assemble-altium` (the PcbLib embeds the STEP body); `{HUB}` is the adom-lbr hub record"))
cad_rows += [(f"`{STEP}`", "3D model, STEP: KEMET's package solid, Z-up, seated and centred"), (f"`{ORIG}`", "KEMET's STEP exactly as downloaded"),
("`package-reference.glb`", "3D model, GLB (clean, for board viewers)")]
if have_hero: cad_rows.append((f"`{HERO}`", "the page's 3D view: package plus footprint pad outlines, silkscreen and pad labels"))
cad_rows += [("`lod/`", "board-use GLBs in four levels of detail, with previews and manifest")]
cad_tbl = "| File | What it is |\n|---|---|\n" + "".join(f"| {a} | {b} |\n" for a, b in cad_rows)
res_tbl = ("| Resource | Link |\n|---|---|\n"
f"| Product page | {PRODUCT} (the KEMET address {PRODUCT_KEMET} redirects there) |\n"
f"| Datasheet C1003_C0G, 2/20/2025 | [PDF on this page]({ds['file']}) ([KEMET]({DS_URL}), [YAGEO]({DS_URL_ALT})) |\n"
f"| 3D model (STEP) | [{STEP_URL}]({STEP_URL}) (copy under `vendor/`) |\n"
f"| KEMET K-SIM simulation (impedance, ESR, temperature rise) | {KSIM} |\n"
"| Flexible termination version | KEMET product bulletin C1062_C0G_FT-CAP_SMD (datasheet p.1 note 1) |\n")
hero_para = (f"""
The page viewer shows `{HERO}`: the clean model plus nonphysical reference artwork drawn under it to the adom-hero
standard (adom/component-hero): the footprint's pads as teal dashed outlines at 50 % opacity, its silkscreen at 70 %
transparency and the pad numbers 1 and 2. The part is non-polar, so no pin-1 dot is added. The artwork never goes into
the STEP, `package-reference.glb` or the board LODs.

""" if have_hero else "")
readme = f"""# {MPN}
KEMET {MPN}: {P['brief']}. A commercial grade, class I multilayer ceramic chip capacitor from KEMET's C0G series
(KEMET is part of the YAGEO Group). C0G holds its capacitance against DC voltage, temperature and time, which makes it the
choice for timing, tuning, filters, snubbers and other circuits where the value must not move.
::adom-verified{{src="/{OWNER}/{slug}/render/verification.json"}}
| Field | Value |
|---|---|
| Manufacturer | {P['mfr_full']} |
| Manufacturer part number | {MPN} |
| Type | {P['subcategory']} |
| Capacitance | {P['value']}, {P['tol']} |
| Rated voltage | 100 V DC |
| Dielectric | C0G (NP0): 0 +/-30 ppm/C, -55 to +125 C |
| Package | {P['package']}, 4.50 x 3.20 x 1.40 mm (thickness code GH) |
| Marking | none (C0G parts are supplied unmarked) |
| Datasheet | [{ds['title']}]({ds['file']}) |
## Why C0G: stable with voltage, temperature and time
The figures below are KEMET's, from the datasheet on this page:
- **Voltage.** "No capacitance change with respect to applied rated DC voltage" (p.2; the overview on p.1 says C0G
"exhibits no change in capacitance with respect to time and voltage"). At 100 V this part is still 0.12 uF.
- **Temperature.** Capacitance change is limited to +/-30 ppm/C from -55 to +125 C, referenced to +25 C (p.1, p.4).
Worked out from that limit: at most +/-0.3 % at +125 C and +/-0.24 % at -55 C.
- **Time.** Aging rate 0 % per decade hour (p.4), "no capacitance decay with time" (p.2).
- **No piezoelectric noise**, low ESR and ESL and high ripple current capability are listed as benefits (p.1).
By contrast, a class II X7R capacitor is allowed +/-15 % over -55 to +125 C (the EIA X7R definition), loses part of its
capacitance under DC bias, and ages over time; at a 100 V rating that bias loss can be large. That is the reason to
choose this C0G part over an X7R of the same value where the capacitance has to stay put: the cost is size, since 0.12 uF
at 100 V needs an 1812 case in C0G.


## Key specifications
{spec_tbl}
Page numbers refer to [KEMET C1003_C0G, 2/20/2025]({ds['file']}).
## Ordering
{dist_tbl}
Stock and prices are a snapshot from the Adom parts search on {TODAY}; check the distributor before ordering. DigiKey lists
the part as Active. {P['lcsc_note']}.
## Part number
C ceramic | 1812 case size | C standard series | 124 = 12 x 10^4 pF = 0.12 uF | J +/-5 % | 1 = 100 V | G = C0G |
A failure rate not applicable | C 100 % matte Sn termination | TU 7 inch reel, unmarked (datasheet p.1 and p.2). The
thickness is not in the part number: Table 1B (p.8) gives code GH for 0.12 uF at 100 V in 1812, and Table 2A (p.10)
gives GH = 1.40 +/-0.15 mm.

## Manufacturer and resources
{res_tbl}
## Pins
| Pin | Function |
|---|---|
| 1 | terminal (non-polar) |
| 2 | terminal (non-polar) |
A ceramic capacitor has no polarity: either terminal may face either way (datasheet p.2, "non-polar device").
## Land pattern: KiCad footprint vs KEMET
<table>
<tr>
<td width="104"><a href="land-pattern/README.md"><img src="land-pattern/land-pattern-icon.png" width="112" alt="Land pattern"></a><br><sub> Land pattern </sub></td>
<td>The footprint is KiCad's standard `{P['fp']}`, and this guide lays its pads over KEMET's recommended IPC-7351 land (datasheet p.12, density level B) at true scale. Land centres, length and gap are identical; KiCad's pads are 0.10 mm narrower (3.40 vs 3.50 mm) and have rounded corners. Use it to decide whether to keep the KiCad pads or widen them to KEMET's level B before layout.<br><br><a href="land-pattern/README.md">The comparison, with KEMET's three density levels</a></td>
</tr>
</table>
## 3D model
The model is **KEMET's own STEP** for this part number, downloaded by plain HTTP from KEMET's component documentation
service. KEMET's file (CCS_CCSTD_1812_L4.8W3.5T1.55B0.6) is Y-up with a corner at the origin; `{STEP}` is the same
package solid moved by one rigid transform (rotate +90 degrees about X, then translate) so it is Z-up, seated on z = 0 and
centred on the footprint origin, with its face colours copied over and its volume unchanged. KEMET's file also carries a
"KEMET" logo as three 5 um thick solids on top of the ceramic, coloured only with SolidWorks' default lavender. The real
part has no marking (KEMET supplies C0G parts unmarked only, p.15), so the board model leaves the logo out. The download
itself is kept unchanged as `{ORIG}`, and every step is recorded in [`{REPOSE}`]({REPOSE}).
The model is drawn at the top of every printed range: 4.80 x 3.50 x 1.55 mm against L 4.50 +/-0.30, W 3.20 +/-0.30 and,
for this part's thickness code GH, T 1.40 +/-0.15 mm. Its terminal band measures {band:.2f} mm on the top face, inside
B 0.60 +/-0.35 mm. A real part will usually be smaller than the model in all three directions.
{hero_para}
::adom-models{{src="/{OWNER}/{slug}/render/models.json"}}
## Model checked against the printed dimensions
The model was rendered in orthographic top, bottom, side and end views at true scale and laid over a drawing made at the same
scale from the printed limits (nominal outline, tolerance limits, allowed terminal band). Every dimension is inside the printed
range: {", ".join(f"{c['dim']} {c['model_mm']:.3f} mm ({c['datasheet_min']:.2f} to {c['datasheet_max']:.2f})" for c in check['checks'])}.

Source: {P['dims_text']}.
## Board levels of detail
Clean board-use GLBs (no footprint pads, outlines, labels or silkscreen) in four levels, all in the same Z-up, metre,
footprint-origin pose as the STEP. Previews are rendered from each GLB.
::adom-component-lod{{src="/{OWNER}/{slug}/render/lod/manifest.json"}}
## CAD files
{cad_tbl}
## Datasheet figures
The pages this record cites, cropped from the datasheet:
{fig_tbl}
## Sources and license
- KEMET datasheet C1003_C0G, 2/20/2025 ({DS_URL}), sha256 {sha(ds['file'])}
- KEMET 3D model: {STEP_URL}, sha256 {sha(ORIG)}, {TODAY}
- KiCad library footprint: [{P['fp_lib']}.pretty/{P['fp']}.kicad_mod]({GL}/kicad-footprints/-/blob/master/{P['fp_lib']}.pretty/{P['fp']}.kicad_mod)
- Distributor numbers, stock and prices: Mouser, DigiKey and JLCPCB/LCSC through the Adom parts search, {TODAY}
Original Adom content is CC-BY-4.0. KEMET's STEP, its derivatives and the datasheet keep KEMET's terms and the KiCad
footprint keeps its upstream license (CC-BY-SA 4.0 with the KiCad library exception); see [LICENSE](LICENSE).
[provenance.json](provenance.json) records every source and file hash; the scripts that built the checks are in
`provenance/tools/`.
This is a catalog record for the part, not a manufacturing approval: check KEMET's current specification for your design.
"""
readme = re.sub(r"\n{3,}", "\n\n", readme)
for bad in ("—", "–"):
assert bad not in readme and bad not in land_readme, "dash in README"
open(p_("README.md"), "w").write(readme)
# ---------------- page.json / package.json ----------------
title = f"{MPN} - {P['mfr']}"
parts_ = {"symbol": SYM, "footprint": FP, "step": STEP, "model_3d": HERO if have_hero else "package-reference.glb",
"model_3d_plain": "package-reference.glb", "datasheet": ds["file"]}
if have_lbr: parts_["lbr"] = LBR
if have_alt: parts_.update({"altium_schlib": SCH, "altium_pcblib": PCB})
component = {
"mpn": MPN, "manufacturer": P["mfr"], "package": P["package"], "category": P["category"], "subcategory": P["subcategory"],
"pin_count": 2, "body_size": P["body_mm"], "value": P["value"], "tolerance": P["tol"], "rating": "100 V DC",
"dielectric": "C0G / NP0 (0 +/-30 ppm/C, -55 to +125 C; no change with DC voltage; 0 % aging)",
"thickness_code": "GH (1.40 +/-0.15 mm)",
"pins": [{"number": "1", "name": "~"}, {"number": "2", "name": "~"}],
"parts": parts_,
"manufacturer_links": {"product": PRODUCT, "datasheet_pdf": DS_URL, "step": STEP_URL, "simulation": KSIM},
"distributor_links": {"mouser": {"part": D["mouser"][0], "url": D["mouser"][1]}, "digikey": {"part": D["digikey"][0], "url": D["digikey"][1]}, "lcsc": False},
"lcsc_note": P["lcsc_note"],
"stock": {"date": TODAY, "mouser": D["mouser"][2], "digikey": D["digikey"][2], "source": "adom-parts-search"},
"marking": {"text": None, "statement": P["marking"], "source": P["marking_src"]},
"provenance": {"model_3d": "KEMET STEP for this part number, re-posed to Z-up, CAD logo glyphs dropped, checked against the printed dimensions for thickness code GH",
"footprint": "KiCad standard library C_1812_4532Metric, renamed", "land_pattern_check": "land-pattern/README.md (matches KEMET level B except land width 3.40 vs 3.50 mm)",
"omitted": ["KEMET logo glyph solids from the board model (real part is unmarked; original kept in vendor/)"]},
}
eda = {"kicad": {"symbol": SYM, "footprint": FP, "model": STEP, "provenance": "generated"}}
if have_lbr: eda["fusion"] = {"lbr": LBR, "provenance": "generated"}
if have_alt: eda["altium"] = {"schlib": SCH, "pcblib": PCB, "provenance": "generated"}
page = {"slug": slug, "title": title, "eda_assets": eda, "type": "hardware", "kind": "component", "version": "0.1.0",
"description": P["brief"], "brief": P["brief"],
"tags": ["hardware", "component", "passive", "capacitor", "mlcc", "1812", "c0g", "np0", "100v", "kemet"],
"discovery_triggers": [MPN, MPN.lower(), "80-C1812C124J1G", "0.12 uF 100 V 1812 C0G", "120nF 100V C0G 1812 capacitor", "KEMET C0G 1812"],
"dependencies": {}, "license": "CC-BY-4.0", "hero": {"path": "docs/hero.png", "chrome": False},
"component": component, "visibility": {"public": True}, "source": {"tool": "kemet", "url": PRODUCT}}
json.dump(page, open(p_("page.json"), "w"), indent=1)
json.dump({"name": slug, "title": title, "version": "0.1.0", "description": P["brief"], "type": "hardware", "kind": "component",
"license": "CC-BY-4.0", "files": []}, open(p_("package.json"), "w"), indent=1)
# ---------------- provenance.json ----------------
files = {}
for dp, dn, fn in os.walk(OUT):
for f in fn:
rel = os.path.relpath(os.path.join(dp, f), OUT)
if rel != "provenance.json":
files[rel] = sha(rel)
finp = os.path.join(ROOT, "work", f"{slug}-finish.json")
fin = json.load(open(finp)) if os.path.exists(finp) else {}
prov = {
"manufacturer_reference": PRODUCT,
"datasheet": {"file": ds["file"], "sha256": sha(ds["file"]), "url": DS_URL, "same_bytes_at": DS_URL_ALT, "title": ds["title"], "revision": "C1003_C0G 2/20/2025", "checked": TODAY},
"specs_read_from_datasheet": {"capacitance": "0.12 uF +/-5 % (124, J), p.1", "rated_voltage": "100 V (code 1), p.1", "dielectric": "C0G, p.1",
"tcc": "+/-30 ppm/C, -55 to +125 C, p.1 and p.4", "voltage": "no capacitance change with applied rated DC voltage, p.2",
"aging": "0 %, p.4", "df": "0.1 %, p.4", "ir": "1,000 MOhm uF or 100 GOhm, p.4", "dwv": "250 % rated, p.4",
"dimensions_mm": {"L": "4.50 +/-0.30", "W": "3.20 +/-0.30", "T": "1.40 +/-0.15 (GH, p.8 and p.10)", "B": "0.60 +/-0.35", "S_min": "2.30"},
"packaging": "TU: 7 inch reel, unmarked, 1,000 pcs plastic, 12 mm tape, 8 mm pitch (p.2, p.10, p.16)",
"marking": "C0G supplied unmarked only, p.15", "soldering": "reflow only (1812), p.3 and p.13"},
"symbol_source": "Original, written for this page (standard capacitor graphic, non-polar, pin ends on the 2.54 mm grid). CC-BY-4.0.",
"footprint_source": f"KiCad standard library {P['fp_lib']}:{P['fp']} (CC-BY-SA 4.0 with the KiCad library exception); renamed {FP[:-10]}, model path ${{KIPRJMOD}}/{STEP}; copper unchanged",
"footprint_upstream_url": f"{GL}/kicad-footprints/-/raw/master/{P['fp_lib']}.pretty/{P['fp']}.kicad_mod",
"footprint_upstream_sha256": hashlib.sha256(open(os.path.join(ROOT, "dl/kicad", P["fp"] + ".kicad_mod"), "rb").read()).hexdigest(),
"manufacturer_step": {"found": True, "url": STEP_URL,
"also_served_at": "https://connect.kemet.com:7667/gateway/IntelliData-ComponentDocumentation/1.0/download/step/C1812C124J1GACTU (same bytes)",
"method": "plain HTTP GET, no browser, no session", "retrieved": TODAY, "file": ORIG, "sha256": sha(ORIG),
"header_name": "CCS_CCSTD_1812_L4.8W3.5T1.55B0.6.STEP", "authoring": "SolidWorks 2021, 2024-09-06",
"units": "mm", "up_axis": "+Y", "repose": REPOSE},
"board_step": {"file": STEP, "sha256": sha(STEP), "transform": repose["matrix_3x4"], "dropped": repose["dropped"], "kept": repose["kept"]},
"geometry_status": "Manufacturer-issued CAD for this part number, every printed dimension checked for thickness code GH (docs/verify).",
"marking": {"real_marking": None, "statement": P["marking"], "source": P["marking_src"]},
"frame": {"units": "mm (STEP), metres (GLB)", "up_axis": "Z", "seat_z": 0, "origin": "footprint origin"},
"glb": {"tool": "step2glb convert (service)", "source": STEP, "exit": 0},
"hero_image": {"tool": "step2glb thumbnail --width 1600 --height 1000 (iso, 16:10)", "source": STEP, "path": "docs/hero.png"},
"hero_glb": fin.get("hero"), "fusion_lbr": fin.get("lbr"), "altium": fin.get("altium"),
"document_figures": figs,
"datasheet_check": {"overlay": f"docs/verify/{slug}-overlay.png", "numbers": f"docs/verify/{slug}-check.json", "result": "PASS" if check["all_pass"] else "FAIL"},
"land_pattern_check": {"readme": "land-pattern/README.md", "numbers": "land-pattern/land-check.json", "source": L["source"], "levels": LV,
"result": "KiCad matches KEMET level B except land width (3.40 vs 3.50 mm); KiCad kept"},
"distributors": {"tool": "adom-parts-search search " + MPN, "date": TODAY,
"mouser": {"part": D["mouser"][0], "url": D["mouser"][1], "stock": D["mouser"][2], "price": D["mouser"][3]},
"digikey": {"part": D["digikey"][0], "url": D["digikey"][1], "stock": D["digikey"][2], "price": D["digikey"][3]},
"lcsc": None, "lcsc_note": P["lcsc_note"]},
"lod": {"manifest": "lod/manifest.json", "generator": "provenance/tools/lod.py", "source": STEP, "source_sha256": sha(STEP)},
"tools_note": "Scripts adapted from adom/grm188r72a103ka01d and adom/msash168sc7224ktca01; the hero generator is adom/component-hero hero_glb.py, unmodified.",
"files": files, "files_note": "provenance.json itself is not listed.", "built_by": "Claude (AI agent) for John Lauer", "date": TODAY,
}
json.dump(prov, open(p_("provenance.json"), "w"), indent=1)
print("records written", slug, "hero" if have_hero else "-", "altium" if have_alt else "-", "lbr" if have_lbr else "-")