Home

PayloadLab v1.0.1

User guide

PayloadLab is a workspace for creating, checking, and refining healthcare test files. Current capabilities include HL7 test-file generation, EQRS XML validation, and supporting admin tools, with additional formats and application workflows planned for future releases.

PayloadLab does not connect directly to FOCUS, TIME, or EQRS. It does not modify those applications. Files created or validated here are intended for QA and import testing only.

What is in this build

Start the app

Open https://payloadlab.constellationkidney.com in your browser and confirm the header or footer shows 1.0.1 so you know which build you are on.

Validate an EQRS file

  1. Open EQRS (or Validate EQRS file on the home page).
  2. Choose the EQRS release (for example August 2026 current, or March 2025 previous) and confirm schemas, error codes, and the data dictionary loaded for that pack.
  3. Choose an XML file from an internal application (maximum 20 MB), or click Open XML Editor to paste XML and Revalidate. A deferredResponse envelope is decoded so the editor shows the inner XML. Clinical-feedback XML shows an outline and skips Crown error-code and data-dictionary checks. Validate enables after a file is selected.
  4. Click Validate.
  5. Browse the Outline, click a line to jump into the XML, edit, then Revalidate. Use Format XML when the file is well-formed. Use Download XML for a copy of the edited file.

Pass means the file is well-formed, matches the loaded Crown schema, and meets the data-dictionary Required=Y / C rules this tool can evaluate.

Fail lists official error codes when a schema message matches the error list (file-format problems always include 99010), data-dictionary required and conditional fields the schema does not enforce, plus any other well-formedness or schema issues that did not match a code.

Official artifacts live in eqrs-spec/packs/ by release date.

Error codes

Open Error codes in the header (or Search codes on the home page). This page is a lookup. It does not change HL7 generation or EQRS validation.

  1. Choose Type: FOCUS HL7 (MSA) for FOCUS import acknowledgments, or EQRS for Crown pack codes.
  2. For EQRS, choose the EQRS release. The list comes from that pack’s error-code workbook (the same codes the EQRS validator can attach to schema failures).
  3. Type in Search. The table filters as you type (number, mnemonic, description, condition, or message text).

FOCUS HL7 (MSA) is listed as of 2026R10 (QMS-Focus-HL7-Interface-Specification.docx). Columns are number, code, ACK (AR/AE/AA), severity, class, description, the import condition, and the FOCUS text template. Several truncation warnings share number 010; use the Code column (for example MBI TOO LONG) to tell them apart. Class follows the spec ranges (interface, patient, service, account, miscellaneous).

EQRS columns are code, severity, schema element, workbook sheet, and description. If the table is empty, the selected pack has no error workbook.

Generating an HL7 file does not check these MSA codes. Use the list when you read a FOCUS MSA after import, or when you look up an EQRS code from a validation result.

HL7 Admin

Open HL7 Admin from the top navigation. Anyone who can use the site can edit seed catalogs for their session only (unless they download JSON for reuse).

Defaults ship in App_Data/hl7-seed/{{version}}/ (for v2.2, a copy at App_Data/hl7-seed/ is used only if the version folder is missing a file).

  1. Choose a catalog (physicians, units, FT1 codes, OBX observations, and so on). The badge shows Unchanged, Not applied, or In use ✓.
  2. Edit the JSON, then Save all catalogs to session when you are ready for HL7 generation to use them.
  3. Use Import / export to download all catalogs or upload a JSON bundle in the same format.
  4. Open Advanced to download/upload seed bundles or reload default seed data from disk.

Session overrides do not change the default JSON files on disk. Download your bundle if you want to keep personal seed lists between runs.

Create a first HL7 file

  1. Open HL7 (or Create .HL7 file on the home page).
  2. Set Sending application, Unit abbreviation, and Account ID. Use Apply from seed dropdowns where shown.
  3. The page starts empty. Use Generate messages (count, type, optional prefixes, and optional Include all optional segments) or an Add button to create messages. Blank QMS# prefix defaults to PL (max 2 characters) and a 3-digit number (for example PL001). Last name prefix is prepended to PID last name only. Include-all turns on every optional segment that applies to ADT or DFT and fills canned rows so you do not have to complete each section.
  4. Edit PID, PV1, and optional segments. Expand Physicians under PV1 for nephrologist, referring, vascular, and other physician fields.
  5. Preview refreshes the HL7 text and scrolls to the preview panel. You can edit that text before download; edits are not copied back to the form. Preview again rebuilds from the form. Download .HL7 saves what you see in the preview.
  6. Import that file in FOCUS the same way you import other HL7 test files.

Generate messages asks for confirmation only when messages already exist, because it replaces the whole set. Fill sample data always asks for confirmation because it overwrites patient, charge, and optional-segment fields with canned examples (not unique random patients). Fill sample data is most useful after you have at least one message.

After Generate messages or Add, focus goes to the new message’s Patient Ref ID (QMS#). Fill sample data focuses Message 1 Patient Ref ID. Random patient focuses that message’s Patient Ref ID. Add/remove row buttons keep your place on the page. Press Alt+T anywhere on the HL7 page to jump back to the MSH message toolbar. Press Alt+P to jump to Preview (or to the Preview button if the file has not been built yet).

HL7 seed catalogs

Seed lists speed up HL7 data entry. Defaults are JSON files under App_Data/hl7-seed/{{version}}/ (for example App_Data/hl7-seed/2.2/). For HL7 v2.2, if a file is not in that folder the app falls back to the same name under App_Data/hl7-seed/.

On the HL7 page, choose Apply from seed on a field to fill it from the catalog. Catalogs come from defaults plus any session overrides you applied in HL7 Admin.

To change the shared defaults, edit those JSON files on the server (not your laptop) and use Reload default seed data in HL7 Admin Advanced, or restart the app. That applies to everyone using this site. Testers cannot change the default files from the browser. To keep personal lists, use HL7 Admin download/upload instead; session edits stay in your browser until you export them.

File settings

Messages in one file

Each card is one MSH message. Use Add ADT^A01, Add ADT^A08, Add ADT^A03, or Add DFT^P03 to put several messages in the same download. You can mix ADT and DFT. Maximum is 25 messages.

TypeUse
ADT^A01Add patient
ADT^A08Update patient
ADT^A03Discharge / delete
DFT^P03Treatment charges (FT1)

The message-type dropdown lists those four events. DFT cards show FT1 fields; ADT-only segments hide automatically.

Include segments

All optional segments are in one list. Check the box to include it; the note on the right is the FOCUS import rule for that segment. Fields appear below the list. Many fields offer Apply from seed pickers.

SegmentWhenNotes
NK1ADTEmergency contact. NK1-3 is code^description^QMS (C/H/G/I/O/P/B/S). Role is always EMER^Emergency Contact^QMS.
OBXADT and DFTOBX-3 = LAB_ITEM_CODE, OBX-5 = numeric reading. Lab item codes must exist in FOCUS.
GT1ADTMailing / secondary address.
ZMYADT and DFTModality from the FOCUS table 0999 dropdown (A/C/F/H/I/T).
ZPTADTUnit assignment plus the same four physician roles as PV1 (collapsible). Blank unit uses the sending unit.
ZDGADT and DFTICD code must exist in FOCUS ACCOUNT_ICD9.
ZDODFTHemodialysis order. Frequency must be 1–7 treatments per week.
ZPAADT and DFTAccess type and location from the FOCUS dropdowns.
ZPPADTExtras: bilateral amputee date, current gender, cause of death, re-entitlement date.

IN1 (insurance) is exported by FOCUS but is not imported, so this tool does not generate it.

Codes and test data

Not in this build

You are looking at 1.0.1. If the number in the header does not match what you expected, you are on an older run of the app — stop it and start it again from this project.