The three-step VISUAL SEVERITY ramp an ICDAS code renders at: the caries
layer's opacity (0.45 / 0.7 / 1.0), the data-depth bar/badge, and the
coarse three-option picker offered when ICDAS mode is off (2/4/6).
This is deliberately NOT the enamel-vs-dentine DEPTH axis the ICD codes are
derived from, and the two must not be "aligned": the coding axis follows
ICDAS itself (1-3 enamel, 4-6 dentine — code 3 is localized enamel breakdown
with NO visible dentin), and lives in deriveCariesDetail (dx/derive.ts).
The ramp groups 3 with 4 because a lesion with enamel breakdown reads as
mid-severity on the chart, which is a display judgement, not a depth claim.
A code-review pass flagged the divergence for ICDAS 3; it is intentional, and
icdas.test.ts pins both mappings side by side so it stays visible.
The three-step VISUAL SEVERITY ramp an ICDAS code renders at: the caries layer's opacity (0.45 / 0.7 / 1.0), the
data-depthbar/badge, and the coarse three-option picker offered when ICDAS mode is off (2/4/6).This is deliberately NOT the enamel-vs-dentine DEPTH axis the ICD codes are derived from, and the two must not be "aligned": the coding axis follows ICDAS itself (1-3 enamel, 4-6 dentine — code 3 is localized enamel breakdown with NO visible dentin), and lives in
deriveCariesDetail(dx/derive.ts). The ramp groups 3 with 4 because a lesion with enamel breakdown reads as mid-severity on the chart, which is a display judgement, not a depth claim. A code-review pass flagged the divergence for ICDAS 3; it is intentional, andicdas.test.tspins both mappings side by side so it stays visible.