Skip to content

Message version

Lint rule that checks an HL7v2 message's MSH-12 version satisfies a semver range expression.

Lint rule that checks an HL7v2 message's MSH-12 version satisfies a semver range expression.

What it does

Reads MSH-12.1 from the tree and evaluates it against the configured expression using @glion/util-semver. Reports a message when MSH-12 is missing, when it is empty, when the value is not a valid semver-like version, or when it falls outside the allowed range. The default expression ("<3.0.0 >=2.3") accepts HL7v2 versions 2.3 through 2.9 and excludes future v3 values.

Install

npm install @glion/lint-message-version

Use

import { hl7v2Parser } from "@glion/parser";
import hl7v2LintMessageVersion from "@glion/lint-message-version";
import { unified } from "unified";
import { reporter } from "vfile-reporter";

const message =
  "MSH|^~\\&|SENDER|FAC|RCVR|FAC|20250101010101||ADT^A01^ADT_A01|MSG00001|P|2.5";

const file = await unified()
  .use(hl7v2Parser)
  .use(hl7v2LintMessageVersion, { expression: "<3.0.0 >=2.3" })
  .process(message);

console.error(reporter([file]));

API

unified().use(hl7v2LintMessageVersion[, options])

A unified lint rule plugin.

import type { Plugin } from "unified";
import type { Root } from "@glion/ast";

export interface MessageVersionLintOptions {
  /** Semver range expression to evaluate against `MSH-12.1`. Default: "<3.0.0 >=2.3". */
  expression: string;
}

declare const hl7v2LintMessageVersion: Plugin<
  [MessageVersionLintOptions?],
  Root
>;
export default hl7v2LintMessageVersion;

Expressions are parsed and evaluated by @glion/util-semver.

What it checks

The value of MSH-12.1 must be present and must satisfy the configured semver expression.

Valid

MSH-12 is 2.5, within the default range <3.0.0 >=2.3:

MSH|^~\&|SENDER|FAC|RCVR|FAC|20250101010101||ADT^A01^ADT_A01|MSG00001|P|2.5

Invalid

MSH-12 is 2.2, below the default minimum:

MSH|^~\&|SENDER|FAC|RCVR|FAC|20250101010101||ADT^A01^ADT_A01|MSG00001|P|2.2

Reported message:

The version is outside the supported range; it must satisfy `<3.0.0 >=2.3`.

MSH-12 is missing:

The message has no `MSH-12` (Version ID); a message must declare its HL7v2 version.

MSH-12 is present but empty:

The version is empty; a message must declare its HL7v2 version.

MSH-12 contains a value that cannot be parsed as semver:

The version is not a version number; a version must be numbers separated by dots, such as `2.5` or `2.5.1`.

Each report on a value sets actual to that value; a version outside the range also sets expected to the configured expression. The rule reports at most one message per tree and exits as soon as the first problem is detected.