ASTM LIS2-A2 · E1381-02
Standard ASTM LIS interface
This document defines the ASTM host interface between your Laboratory Information System (LIS) and TransLABtor middleware,
based on CLSI LIS01-A2 / LIS2-A2 record content with ASTM E1381-02 low-level framing.
Implement the record sequences and field positions below to exchange orders and results.
TransLABtor driver type: astm_standard_lis.
- Document version
- 1.0.0
- Last updated
- 8 September 2026
1. Integration topology
Your LIS connects to the TransLABtor LIS channel. TransLABtor routes accepted orders to configured analyzers and returns consolidated results to the LIS.
- LIS → TransLABtor: order messages (H / P / O / L records)
- TransLABtor → LIS: result messages (H / P / O / R / L records)
- Optional: query / response (Q records) for worklist synchronization
Connection modes: TCP Server, TCP Client, or File I/O. TCP ports are assigned per site during deployment.
2. Low-level protocol (E1381-02)
Each transmission uses the standard ASTM session handshake:
- Sender transmits
ENQ(0x05) - Receiver responds
ACK(0x06) orNAK(0x15) - Sender transmits one or more frames, each framed as:
STX(0x02) + record text +ETX(0x03) orETB(0x17) + 2-character checksum +CR+LF - Receiver
ACKs each valid frame orNAKs on checksum / format error - Sender transmits
EOT(0x04) to end the session
Checksum: modulo-256 sum of all bytes from the first record character through ETX/ETB, rendered as two ASCII hexadecimal digits (CLSI LIS01).
Record delimiter within a frame: CR (0x0D). Field delimiter within a record: | (pipe).
3. Transport — File I/O
When File I/O mode is enabled:
- Inbound: drop ASTM message files (records separated by CR) into the configured incoming directory; processed files are archived.
- Outbound: result files are written to the outgoing directory with a configurable extension (default
.astm). - File mode may omit ENQ/ACK/EOT session wrapping — one file equals one logical message (H through L).
4. Record types
| Record | Direction | Purpose |
|---|---|---|
H | Both | Message header — sender, receiver, timestamp, processing ID |
P | Both | Patient demographics |
O | Both | Order / specimen — test request on inbound; context on outbound results |
R | TL → LIS | Result value, units, flags, status |
C | Both | Comment (patient, specimen, or test level) |
Q | Both | Query / worklist request (optional) |
L | Both | Message terminator |
5. Order message (LIS → TransLABtor)
5.1 Record sequence
H| P| O| (repeat per test / order line) [C|] L|
5.2 Header record (H)
| Field | Description |
|---|---|
| H-2 | Password (optional; site configuration) |
| H-3 | Sending application / LIS name |
| H-4 | Sending facility |
| H-5 | Receiving application (TransLABtor) |
| H-6 | Receiving facility |
| H-7 | Date/time YYYYMMDDHHMMSS |
| H-12 | Processing ID: P production, T test/training |
| H-13 | Version: 1394-97 or LIS2-A2 |
5.3 Patient record (P)
| Field | Description |
|---|---|
| P-2 | Patient ID (site ID type configurable) |
| P-3 | Alternate patient ID / MRN |
| P-5 | Patient name Last^First^Middle |
| P-7 | Date of birth YYYYMMDD |
| P-8 | Sex: M or F when sent |
| P-11 | Attending physician |
| P-13 | Location |
5.4 Order record (O) — required fields
| Field | Description |
|---|---|
| O-2 | Sequence number within message |
| O-3 | Specimen ID — required |
| O-4 | Instrument specimen ID (rack^position^module — optional) |
| O-5 | Universal test ID: ^^^AssayCode^AssayName^Dilution |
| O-6 | Priority: R routine, S STAT |
| O-7 | Requested date/time |
| O-11 | Action code: A add, N new, C cancel |
| O-12 | Specimen type / class: blank = patient, Q = QC |
| O-15 | Specimen fluid / source (site-specific descriptor) |
| O-16 | Ordering physician |
| O-26 | Report type: O order download, Q query response |
| O-31 | Routing instrument / destination code — maps to TransLABtor instruments.instrument_code |
Each O record represents one test line for a specimen. Multiple tests on the same specimen use multiple O records under one P record.
5.5 Terminator (L)
L-2 = 1 for normal termination. Missing or malformed terminator rejects the message.
6. Result message (TransLABtor → LIS)
6.1 Record sequence
H| P| O| R| (repeat per result) [C|] L|
6.2 Result record (R)
| Field | Description |
|---|---|
| R-2 | Sequence number |
| R-3 | Universal test ID — LIS test code in outbound position 4 (^^^LISCode^Name) |
| R-4 | Result value (numeric or text) |
| R-5 | Units |
| R-6 | Reference range |
| R-7 | Abnormal flags |
| R-8 | Result status: F final, P preliminary, X cannot process |
| R-9 | Date/time of analysis YYYYMMDDHHMMSS |
| R-10 | Operator / instrument ID |
| R-12 | Result type: F final, I instrument comment (optional handling) |
By default, only validated results are transmitted to the LIS.
7. Query (optional)
Worklist query uses Q records:
| Field | Description |
|---|---|
| Q-2 | Sequence |
| Q-3 | Starting range ID — specimen ID or ALL |
| Q-4 | Ending range ID |
| Q-13 | Request type: O orders |
TransLABtor responds with an order message (H/P/O/L) or a negative query response (Q with status X) when no orders match.
8. Validation rules
| Rule | Outcome |
|---|---|
| O-3 Specimen ID required on every order line | NAK / message rejected |
| H-12 Processing ID must match site configuration | NAK / message rejected |
P-8 Sex, when present, must be M or F | NAK / message rejected |
| Patient ID mismatch on existing specimen | Rejected (patient safety guard) |
| Frame checksum failure | NAK — retransmit frame |
| Routing code (O-31) unknown | Order line skipped; audit recorded |
9. Test and instrument mapping
LIS assay codes in O-5 are mapped to instrument wire codes per target analyzer before download.
Outbound R-3 uses the LIS code stored at order time (ordered_lis_test_code).
Provide a crosswalk during scoping or configure mappings in TransLABtor after deployment.
10. Examples — orders (illustrative)
10.1 One specimen, multiple tests, same instrument
Single P record and one O record per test. All lines share specimen ID SM2026001
and the same routing code in O-31.
H|\^&|||LIS|HOSP|TransLABtor|LAB|20260202120000||P|1394-97|20260202120000 P|1|PAT001||Doe^John||19800101|M||||||||||||||||||| O|1|SM2026001||^^^GLU^Glucose|R|20260202100000|||||A||||SER|||||||HEM001||||||O O|2|SM2026001||^^^BUN^Urea|R|20260202100000|||||A||||SER|||||||HEM001||||||O O|3|SM2026001||^^^CREA^Creatinine|R|20260202100000|||||A||||SER|||||||HEM001||||||O L|1|N
10.2 One specimen, multiple tests, split by instrument
Change O-31 per line when tests route to different analyzers.
H|\^&|||LIS|HOSP|TransLABtor|LAB|20260202120500||P|1394-97|20260202120500 P|1|PAT001||Doe^John||19800101|M||||||||||||||||||| O|1|SM2026001||^^^GLU^Glucose|R|20260202100000|||||A||||SER|||||||HEM001||||||O O|2|SM2026001||^^^HGB^Haemoglobin|R|20260202100000|||||A||||SER|||||||HEM001||||||O O|3|SM2026001||^^^PT^Prothrombin Time|R|20260202100000|||||A||||PLASMA|||||||COAG001||||||O L|1|N
11. Example — result with multiple tests (TransLABtor → LIS)
One message may include multiple O / R pairs for the same specimen — one pair per completed test.
H|\^&|||TransLABtor|LAB|LIS|HOSP|20260202143000||P|1394-97|20260202143000 P|1|PAT001||Doe^John||19800101|M O|1|SM2026001||^^^GLU^Glucose||||||||||||||||||||||| R|1|^^^GLU^Glucose|5.4|mmol/L|3.9-6.1|N|F|20260202142500|HEM001||F O|2|SM2026001||^^^BUN^Urea||||||||||||||||||||||| R|1|^^^BUN^Urea|6.2|mmol/L|2.5-7.1|N|F|20260202142500|HEM001||F O|3|SM2026001||^^^CREA^Creatinine||||||||||||||||||||||| R|1|^^^CREA^Creatinine|88|umol/L|59-104|N|F|20260202142500|HEM001||F L|1|N
12. Deployment parameters (negotiated per site)
| Parameter | Notes |
|---|---|
| Processing ID | P or T — must match inbound H-12 |
| Routing field | Default O-31 instrument destination code |
| Patient ID field | P-2 vs P-3 selection |
| File I/O paths | Incoming / outgoing directories |
| E1381 variant | E1381-02 framed (default) or record-only file mode |