orthonym.assembly.handlers.thiocyanate#

Note

Internal API. Names and behaviour may change between releases.

W3-P08 thiocyanate-ester handler — functional-class naming.

A thiocyanate ester R-S-C#N is named in the two-word functional-class form <R> thiocyanate; e.g. propan-2-yl thiocyanate). Thiocyanic acid (HS-C#N) is a retained PIN (BBv2 L30987) and its esters are functional-class PINs (BBv2 L32033 ‘(CH3)2CH-S-CN propan-2-yl thiocyanate (PIN)’).

The thiocyanate FG is detected but has no seniority principal-group entry (it is a pseudohalide prefix), so principal_group is None and — without this emitter — R-S-C#N reads as ‘unknown’ (the substitutive ‘thiocyanato’ prefix path mis-builds and is self-consistency-suppressed).

CRITICAL — distinct from isothiocyanate: the isothiocyanate ester C-N=C=S has its PIN as the substitutive isothiocyanato prefix and is NOT handled here (different SMARTS/connectivity; fg['thiocyanate'] never matches it). Only S-C#N connectivity fires this handler.

Modeled on handlers/nitrite_ester.py (two-word functional-class, predicate-pure + pool.add + stereo injection) and registered in inner_dispatch at the specialty tier (priority 2965, after nitrite_ester, before tier_a_ring).

orthonym.assembly.handlers.thiocyanate.name_thiocyanate(features, mol=None, style='pin')#

Emit <R> thiocyanate for a thiocyanate ester R-S-C#N.

Algorithm: from the thiocyanate SMARTS match (S, C, N), take the S’s carbon neighbour that is NOT the nitrile carbon (the organyl R), name that R fragment via the universal substituent pipeline, and join as "<R> thiocyanate". Returns None (defer / fail-closed) if the R cannot be named. Style is ignored (single PIN per compound, internal notes); the thiocyanate ester PIN IS functional-class, so it is NOT declined under ‘pin’.