NEWFree ROI Calculators — quantify what prior auth and siloed data are costing your organization.Prior Auth ROI Siloed Data ROI
HL7 v2Code Table9 min read

HL7 Table HL70070: Specimen Source Codes

HL70070 is the legacy specimen-source vocabulary that has shipped with HL7 v2 since v2.2. It is a flat list of short uppercase mnemonics — BLD, UR, CSF, TISS, SER, and roughly seventy others — used to identify what kind of biological material an order or result refers to. The table is bound to OBR-15.1 Specimen Source identifier and to SPM-4 Specimen Type on every laboratory order (ORM/OML) and result (ORU) message. Although still normative through v2.8.1, modern profiles prefer SNOMED CT specimen concepts and use HL70070 as a fallback.

Purpose

HL70070 answers a single question on the laboratory wire: which body fluid, tissue, swab, or other material is being collected, processed, or reported on. It is not the specimen container, not the collection site (that is HL70163), and not the test being performed (that is the universal service identifier in OBR-4); it is the substance itself. A blood gas drawn from an arterial line is BLDA; the same patient's clean-catch urine sample is URC.

Because the values are short mnemonics rather than descriptive strings, every lab interface engine must keep a lookup of the full set. The table is HL7-defined, normative, and a receiver is expected to recognize all entries listed in the version of v2 the channel is conformant with.

Where it's used

  • OBR-15.1 Specimen Source — identifier component of the specimen source name/code in the laboratory order.
  • SPM-4 Specimen Type — primary specimen identifier on the SPM segment introduced in v2.5.
  • OBX-19 may indirectly reference specimen type metadata when an observation reports on a specimen attribute.

Code list

Selected codes — the full HL70070 set in v2.8.1 contains roughly 200 entries; common ones are listed here.

CodeDisplayComment/Description
ABSAbscessPus or fluid from a localized infection.
AMNAmniotic fluidCollected via amniocentesis.
ASPAspirateGeneric aspirated fluid.
BFLBody fluidUnspecified body fluid.
BLDBloodWhole blood, unspecified site.
BLDABlood arterialArterial draw — used for blood gases.
BLDCBlood capillaryHeel-stick or finger-stick.
BLDVBlood venousStandard venipuncture sample.
BONBoneBone biopsy or fragment.
BROBronchialBronchial brushing or wash.
BRNBurnBurn-site swab or tissue.
CSFCerebral spinal fluidLumbar-puncture sample.
CSTCystCyst aspirate or contents.
CVMCervical mucusCervical mucus sample.
CVXCervixCervical swab or scraping.
DUFLDuodenal fluidDuodenal aspirate.
EAREarEar swab.
ELTElectrodeElectrode-bound sample (rare).
ENDCEndocervicalEndocervical swab.
EYEEyeConjunctival or corneal swab.
FBLOODFetal bloodFetal-scalp or cord blood.
FLDFluidUnspecified fluid.
GASGasGas sample (rare; respiratory studies).
GASTGastric fluidNasogastric aspirate.
GENGenitalGeneric genital swab.
HARHairHair sample (toxicology).
HEMHematomaHematoma aspirate.
LAMLamellaCorneal lamella.
LIQLiquidGeneric liquid specimen.
LNLineIndwelling line draw (site unspecified).
LNALine arterialArterial-line draw.
LNVLine venousVenous-line draw.
LYMLymphocytesIsolated lymphocyte fraction.
MARMarrowBone marrow aspirate or biopsy.
MECMeconiumNeonatal stool.
MILKMilkMilk (typically breast).
MLKBreast milkBreast milk explicitly.
NAILNailNail clipping (mycology).
NOSNoseNasal swab.
ORHOtherOther specimen type.
PAFLPleural fluidThoracentesis sample.
PLASPlasmaAnticoagulated plasma.
PLCPlacentaPlacental tissue.
PMNPolymorphonuclear neutrophilsIsolated PMN fraction.
PRTPeritoneal fluidParacentesis sample.
PUSPusPurulent material.
RBCRBCIsolated red cells.
SALSalivaSaliva sample.
SEMSeminal fluidSemen.
SERSerumClotted-tube serum.
SKNSkinSkin scraping or biopsy.
SMMSynovial massSynovial mass.
SNVSynovial fluidJoint aspirate.
SPRMSpermatozoaIsolated spermatozoa.
SPTSputumExpectorated sputum.
STLStoolFeces.
STNStoneCalculus (renal, biliary).
SWTSweatSweat sample (cystic fibrosis testing).
TEARTearsTear sample.
THRTThroatThroat swab.
TISSTissueTissue biopsy.
UMBUmbilical bloodCord blood.
URUrineUrine, unspecified collection.
URCUrine clean catchClean-catch midstream urine.
URTUrine catheterCatheterized urine.
URTHUrethraUrethral swab.
VITFVitreous fluidVitreous tap.
VOMVomitusVomitus.
WBCWhite blood cellsIsolated WBC fraction.
WNDWoundWound swab or material.
WNDAWound abscessWound abscess material.
WNDDWound drainageWound drainage.
WNDEWound exudateWound exudate.

The published v2.8.1 table contains additional rarely-used codes (organ-specific tissues, environmental specimens, instrument-derived materials). Engines should treat any code not in the official list as a validation failure and route to curation.

Code system OID

  • OID: 2.16.840.1.113883.18.23
  • Canonical URI: http://terminology.hl7.org/CodeSystem/v2-0070

Vorro emits the OID in CWE.14 when the destination profile demands OID-bound coded values, and emits the canonical URI in FHIR Coding.system.

HL7-defined vs user-defined

HL70070 is HL7-defined. Sites must not extend the table with local mnemonics; richer specimen semantics belong in a CWE-bound value set referencing SNOMED CT directly. HL70487 (Specimen Type) was added in v2.5 alongside the new SPM segment as the modern replacement, and v2.8.1 retains both — HL70070 for legacy OBR-15 traffic and HL70487 for SPM-4 in profiles that mandate SCT.

Version differences

  • v2.2 — Initial table with the laboratory core: BLD, SER, UR, STL, SPT, CSF, TISS, etc.
  • v2.3 – v2.4 — Steady expansion to roughly 100 codes; the swab and body-fluid families grow.
  • v2.5 — SPM segment introduced; HL70487 added as the preferred specimen vocabulary. HL70070 remains valid in OBR-15.
  • v2.6 – v2.7 — Minor additions for endoscopic and aspirated specimens.
  • v2.8 / v2.8.1 — Table size stable around 200 entries; no breaking changes. HL7 publishes the v2-to-FHIR ConceptMap that resolves common mnemonics to SNOMED CT.

Common mistakes

  • Sending the descriptive word in OBR-15.1 — Blood instead of BLD. The field is a code, not free text.
  • Confusing BLD and SER. Whole blood and serum are different specimens; downstream lab systems reject mismatched tube types.
  • Using UR for catheterized samples. Catheter urine is URT; clean-catch is URC; only voided/unspecified samples are bare UR.
  • Inventing local mnemonics (SWB, BIO, MISC). HL70070 is HL7-defined and not site-extensible.
  • Treating HL70070 as a body-site code. Site of collection belongs in OBR-15.2 (HL70163), not the mnemonic.

Examples

A basic chemistry order on serum:

OBR|1|10456^LIS|10456^LIS|80048^Basic Metabolic Panel^L|||20260610093000|||||||||SER^Serum^HL70070

Arterial blood gas with SPM segment in a v2.5+ profile:

OBR|1|||3040^Arterial Blood Gas^L|||20260610094500
SPM|1|||BLDA^Blood arterial^HL70070|||||||||||||20260610094500

Same BLD value translated to FHIR Specimen.type using the SCT-preferred mapping:

{
  "resourceType": "Specimen",
  "id": "spec-10456",
  "type": {
    "coding": [
      {
        "system": "http://snomed.info/sct",
        "code": "119297000",
        "display": "Blood specimen"
      },
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0070",
        "code": "BLD",
        "display": "Blood"
      }
    ]
  }
}

Mapping failure example — unknown mnemonic:

OBR|1|...||5050^Toxicology Screen^L|||20260610|||||||||SWAB^Generic swab^HL70070

SWAB is not in HL70070; the correct value depends on collection site (THRT, NOS, WND, etc.). A conformant engine should route to curation rather than guessing.

FHIR mapping

The v2-to-FHIR IG does not publish a ConceptMap for this table; the mapping below follows the obvious correspondence, resolving HL70070 mnemonics to SNOMED CT specimen concepts on Specimen.type. Selected mappings:

HL7 v2 (HL70070)FHIR (SCT)
BLD119297000 Blood specimen
SER119364003 Serum specimen
PLAS119361006 Plasma specimen
UR122575003 Urine specimen
CSF258450006 CSF specimen
STL119339001 Stool specimen
TISS119376003 Tissue specimen
SPT119334006 Sputum specimen
BLDA122554006 Arterial blood specimen

Round-trip is lossy in some cases — ORH (Other) does not have a clean SCT equivalent and is typically emitted as Specimen.type.text with the original mnemonic preserved as a secondary Coding.

Engine considerations

  • Case sensitivity — All HL70070 mnemonics are uppercase. Engines should normalize on ingest and reject lowercase variants.
  • Length variability — Codes range from two characters (UR) to six (FBLOOD); validate against the published set, not by regex length.
  • OBR-15 vs SPM-4 coexistence — In v2.5+ ORU messages, both fields may be populated; receivers should prefer SPM-4 when present.
  • SCT preference — On outbound FHIR, emit both the SCT code and the HL70070 mnemonic in Specimen.type.coding so legacy v2 round-trips survive.

How Vorro handles HL70070

Vorro validates OBR-15.1 and SPM-4 against the full HL70070 v2.8.1 table on ingest. Values that match pass through to all downstream channels untouched. Unknown mnemonics — including lowercase variants, vendor extensions, and free-text strings — are routed to the terminology curation queue, where they either resolve to a canonical HL70070 code (and a remap rule is created) or to a SNOMED CT specimen concept that the FHIR channel can carry directly.

On outbound FHIR, Vorro emits the SCT-preferred coding as the primary Specimen.type.coding entry and preserves the original HL70070 mnemonic as a secondary coding so that round-trip back to v2 is lossless.

Sources

← Back to HL7 v2 Guide

Ready to Integrate This Into Your Workflow?

Talk to a Vorro expert about implementing HL7 v2 in your specific environment.

Browse HL7 v2 Guides
HL7 Table HL70070: Specimen Source Codes | Vorro Academy | Vorro