"""OPT validation issue code constants.

All validation issues use namespaced codes for programmatic handling.
"""

from __future__ import annotations

# Category A — Well-formedness (errors)
XML_INVALID = "XML_INVALID"
XML_WRONG_NAMESPACE = "XML_WRONG_NAMESPACE"
XML_ENCODING_ISSUE = "XML_ENCODING_ISSUE"
MISSING_TEMPLATE_ID = "MISSING_TEMPLATE_ID"
INVALID_TEMPLATE_ID_FORMAT = "INVALID_TEMPLATE_ID_FORMAT"
MISSING_CONCEPT = "MISSING_CONCEPT"
MISSING_LANGUAGE = "MISSING_LANGUAGE"
INVALID_LANGUAGE_CODE = "INVALID_LANGUAGE_CODE"
INVALID_ROOT_RM_TYPE = "INVALID_ROOT_RM_TYPE"
INVALID_ARCHETYPE_ID_FORMAT = "INVALID_ARCHETYPE_ID_FORMAT"
DUPLICATE_NODE_ID = "DUPLICATE_NODE_ID"
INVALID_RM_TYPE = "INVALID_RM_TYPE"
INVALID_OCCURRENCES = "INVALID_OCCURRENCES"

# Category B — Semantic integrity (errors)
MISSING_TERM_DEF = "MISSING_TERM_DEF"
ORPHAN_TERMINOLOGY_BINDING = "ORPHAN_TERMINOLOGY_BINDING"
MANDATORY_NODE_NO_NAME = "MANDATORY_NODE_NO_NAME"
UNKNOWN_TERMINOLOGY_ID = "UNKNOWN_TERMINOLOGY_ID"

# Category C — Structural warnings
DRAFT_LIFECYCLE = "DRAFT_LIFECYCLE"
UNSTABLE_ARCHETYPE_VERSION = "UNSTABLE_ARCHETYPE_VERSION"
PROHIBITED_NODE_IN_TREE = "PROHIBITED_NODE_IN_TREE"
UNCONSTRAINED_ARCHETYPE_SLOT = "UNCONSTRAINED_ARCHETYPE_SLOT"
CONCEPT_SPECIAL_CHARS = "CONCEPT_SPECIAL_CHARS"
NO_DESCRIPTION_DETAILS = "NO_DESCRIPTION_DETAILS"
ARCHETYPE_OVERUSE = "ARCHETYPE_OVERUSE"
SPECIAL_CHARS_IN_NAME = "SPECIAL_CHARS_IN_NAME"

# Category D — FLAT path impact (info/warning)
RENAMED_NODE_DETECTED = "RENAMED_NODE_DETECTED"
FLAT_PATH_COLLISION = "FLAT_PATH_COLLISION"
