That’s a great reference, thanks. And you are right - this is a real mess!!
So my view FWIW
Agree use DV_ORDINAL where it is need for computation e.g in a total score or grade. (easy!!) BTW a new ‘DV_SCALE’ datatype is coming that allows us to handle real number such as 0.5 in these annoying scales.
Where a numeric is normally associated with the scale (as in Clinical frailty) use a DV_ORDINAL as that number may often be used by UI developers - much easier for them to handle than coded-text. Same applies oto something like +,++, +++ in urinalysis - pseudo numeric but close enough.
Where there is no natural number associated with a valueset , use dv_Coded_TEXT , even though you could assign some sort of weighting to things like mild, moderate , severe. We used to do that in early archetypes but I think it was mistake as the allocation of the number to the code is really very arbitrary.
The tricky ones are something like the NYHA functional classification which has Grade 1 to Grade 4. That might qualify as a pseudo-numeric but I would be worried about somebody adding Grade 4a and Grade 4b.
So I think I would stick closely to using DV_ORDINAL where there are clear associations of a number (not a Grade or Class) to a particular term, with perhaps urinalysis being a bit of an anomoly.