Use only the attached synthetic input. Return a JSON object with these exact fields: source_tag, target_tag, tag_match, numeric_match, approval_status. Use null for information not stated. Preserve identifiers, units and revision states. Lists follow first appearance in the input, except an explicitly requested chronological order. Use snake_case for categorical labels. Do not add inferred engineering decisions. Field types: {"source_tag": "string", "target_tag": "string", "tag_match": "boolean", "numeric_match": "boolean", "approval_status": "string"} Task: Separate language review from invariant checks. Compare protected tags and numbers explicitly, then have a qualified reader assess technical meaning. Flag V-104 versus V-140. Recognise 310.5 and 310,5 as the same numeric value in this packet. Retain the not-approved qualifier.