The recurrent ("sub") caries surfaces on ONE tooth — a surface carries BOTH
caries and a filling (state.caries has caries-{surface} AND
state.fillingSurfaceMaterials has {surface}). Returns the surfaces'
letters, in the codebase's existing anatomical order (SUMMARY_SURFACE_ORDER:
B, M, O, D, L), concatenated with no separator (e.g. "MOD", "B"); "" when the
tooth has no recurrent-caries surface. On an anterior tooth the
occlusal/incisal surface's letter is "I" instead of "O" (the stored value is
still plain "occlusal"). Pure and exported for direct unit testing.
The recurrent ("sub") caries surfaces on ONE tooth — a surface carries BOTH caries and a filling (
state.carieshascaries-{surface}ANDstate.fillingSurfaceMaterialshas{surface}). Returns the surfaces' letters, in the codebase's existing anatomical order (SUMMARY_SURFACE_ORDER: B, M, O, D, L), concatenated with no separator (e.g. "MOD", "B"); "" when the tooth has no recurrent-caries surface. On an anterior tooth the occlusal/incisal surface's letter is "I" instead of "O" (the stored value is still plain "occlusal"). Pure and exported for direct unit testing.