Skip to content

Extra fields

Lint rule that warns when a segment contains fields beyond the maximum sequence defined in its profile.

Lint rule that warns when a segment has more fields than its profile defines.

What it does

Flags a segment with more fields than the HL7v2 standard defines for it in the message's version. The rule reads profile context attached by @glion/annotate-profile-context. Segments without a known profile (for example Z-segments) are skipped.

Install

npm install @glion/lint-profile-extra-fields

Use

import { hl7v2AnnotateProfileContext } from "@glion/annotate-profile-context";
import { hl7v2Parser } from "@glion/parser";
import hl7v2LintExtraFields from "@glion/lint-profile-extra-fields";
import { unified } from "unified";
import { reporter } from "vfile-reporter";

const message = [
  "MSH|^~\\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^A01^ADT_A01|MSG00001|P|2.5",
  "PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F",
].join("\r");

const file = await unified()
  .use(hl7v2Parser)
  .use(hl7v2AnnotateProfileContext)
  .use(hl7v2LintExtraFields)
  .process(message);

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

API

unified().use(hl7v2LintExtraFields)

A unified lint rule plugin. Takes no options.

Reports one message for each segment with too many fields, with the number of fields in actual.

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

declare const hl7v2LintExtraFields: Plugin<[], Root>;
export default hl7v2LintExtraFields;

What it checks

A segment has at most as many fields as its profile defines. MSH in v2.5 ends at MSH-21, so it allows 21 fields.

Valid

MSH stops at MSH-12 (Version ID) and all fields are within the v2.5 definition:

MSH|^~\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^A01^ADT_A01|MSG00001|P|2.5
PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F

Invalid

MSH has 22 fields, one more than v2.5 defines:

MSH|^~\&|SENDER|FAC|RECV|RFAC|20250601120000||ADT^A01^ADT_A01|MSG00001|P|2.5||||||||||EXTRA
PID|1||PATID1234^^^HOSP^MR||DOE^JANE||19800101|F

Reported message:

The segment has 22 fields; it allows at most 21 fields.

The version is taken from the annotated profile context. A segment is reported once, however many fields it has past its last.