In order to number the surfaces, you need to get them grouped and/or sorted in some meaningful way.
I sorted and grouped them by the Y-position of their centroids and then sorted them by angle (angles measured from group bounding box center to part bounding box center):
OpenNest plug-in was used to make the text labels and determine their locations (I noticed you had OpenNest components in your file).
You didn’t ask about nesting, but I also added code using OpenNest to pack and nest the surfaces.
The OpenNest component produces overlapping shapes when the Rotations input is set to 16. I checked for problems with the curves or DataTrees but couldn’t find anything wrong. Different shapes overlap with different Seed inputs.
Nesting will not start until you change the Iterations input to a non-zero value or toggle the Run input to True. One nesting iteration takes ~2 minutes, five iterations takes ~5.5 minutes.