languagesAvailable should return a set of strings that includes those keys in translations.
currentRevision should return "uncontrolled" if isControlled returns false.
The invariants below should be enforced. some require the terminological service.
Original_language_valid: original_language /= void and then code_set(Code_set_id_languages).has_code(original_language.as_string)
Languages_available_valid: languages_available /= Void and then languages_available.has(original_language)
Revision_history_valid: is_controlled xor revision_history = Void
Current_revision_valid: (current_revision /= Void and not is_controlled) implies current_revision.is_equal(“(uncontrolled)”)
Translations_valid: translations /= Void implies (not translations.is_empty and not translations.has(orginal_language.code_string))
Description_valid: translations /= Void implies (description.details.for_all(d | translations.has_key(d.language.code_string)))
Maybe it would be interesting to implement a representation method for this class.