SP16 Task 2: resolves the DISPLAY LETTER for a caries/filling surface,
respecting the surfaceNotation setting ("full", default) and — in full
mode — the tooth's arch (upper/lower) and anterior/posterior position.
FULL: occlusal -> "I" (incisal) on an anterior tooth, else "O" (occlusal);
buccal -> "L" (labial) on an anterior tooth, else "B" (buccal); lingual ->
"P" (palatal) on an upper tooth, else "L" (lingual) — on a LOWER ANTERIOR
tooth this means BOTH buccal(labial) and lingual(lingual) letter as "L"
(ratified: position in the surface-cross and the caption disambiguate; a
"(L, L)"-style summary is inherently ambiguous, which is accepted).
mesial -> "M", distal -> "D", subcrown -> "SC" always.
SIMPLE: always the tooth-independent B/M/O/D/L/SC set, regardless of
position. Exported so both summarySurfaceLetter and the live
surface-cross UI (buildSurfaceCross/refreshCheckLabels) share one source
of truth.
SP16 Task 2: resolves the DISPLAY LETTER for a caries/filling surface, respecting the
surfaceNotationsetting ("full", default) and — in full mode — the tooth's arch (upper/lower) and anterior/posterior position.FULL: occlusal -> "I" (incisal) on an anterior tooth, else "O" (occlusal); buccal -> "L" (labial) on an anterior tooth, else "B" (buccal); lingual -> "P" (palatal) on an upper tooth, else "L" (lingual) — on a LOWER ANTERIOR tooth this means BOTH buccal(labial) and lingual(lingual) letter as "L" (ratified: position in the surface-cross and the caption disambiguate; a "(L, L)"-style summary is inherently ambiguous, which is accepted). mesial -> "M", distal -> "D", subcrown -> "SC" always.
SIMPLE: always the tooth-independent B/M/O/D/L/SC set, regardless of position. Exported so both summarySurfaceLetter and the live surface-cross UI (buildSurfaceCross/refreshCheckLabels) share one source of truth.