ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

Specimen — Biological specimen

Blood, urine, biopsy, COVID swab, frozen plasma: Specimen models every biological sample, from collection through preservation and container, into the lab.

Purpose

Specimen is the pivot of the lab workflow: it is referenced by ServiceRequest (the order), carries collection / container / preservation data, then is referenced by Observation and DiagnosticReport (the results).

The typical lab workflow chain:

  1. The clinician creates a ServiceRequest "CBC".
  2. The nurse draws the tube and creates a Specimen referencing the ServiceRequest.
  3. The lab receives the Specimen (accessionIdentifier) and runs the Observations.
  4. The DiagnosticReport aggregates the Observations and references the Specimen via specimen[].

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers.
accessionIdentifierIdentifier0..1Lab accession number — unique key within the LIS.
statuscode0..1available | unavailable | unsatisfactory | entered-in-error.
typeCodeableConcept0..1Specimen type (SNOMED or v2-0487 table).
subjectReference(Patient | Group | Device | Substance | Location)0..1Patient sampled.
receivedTimedateTime0..1Lab receipt time.
parentReference(Specimen)[]0..*Parent Specimen (aliquot, splitting).
requestReference(ServiceRequest)[]0..*Source order(s).
combinedcode0..1grouped or pooled.
roleCodeableConcept[]0..*Role (P=Patient, C=Control...).
featureBackboneElement[]0..*Special features (lesion, lens).
collectionBackboneElement0..1Collection block (who, when, where, how).
collection.collectorReference(Practitioner | PractitionerRole | Patient | RelatedPerson)0..1Who collected.
collection.collected[x]dateTime | Period0..1When collected.
collection.quantityQuantity0..1Volume collected.
collection.methodCodeableConcept0..1Method (puncture, swab...).
collection.bodySiteBackboneElement0..1Anatomical sampling site.
processingBackboneElement[]0..*Processing steps (centrifugation, fixation...).
containerBackboneElement[]0..*Physical container (tube, vial).
conditionCodeableConcept[]0..*Specimen condition at receipt.

JSON example

Serum sample (SST tube 6 mL) on Peter Chalmers, for chemistry:

json specimen-blood-example.json
{
  "resourceType": "Specimen",
  "id": "blood-example",
  "identifier": [{
    "system": "http://lab.example.org/specimens",
    "value": "23234352356"
  }],
  "accessionIdentifier": {
    "system": "http://lab.example.org/accession",
    "value": "X352356"
  },
  "status": "available",
  "type": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/v2-0487",
      "code": "SER",
      "display": "Serum"
    }]
  },
  "subject": { "reference": "Patient/example" },
  "receivedTime": "2026-05-14T08:30:00+02:00",
  "request": [{ "reference": "ServiceRequest/example" }],
  "collection": {
    "collector": { "reference": "Practitioner/example" },
    "collectedDateTime": "2026-05-14T07:55:00+02:00",
    "quantity": { "value": 6, "unit": "mL", "system": "http://unitsofmeasure.org", "code": "mL" },
    "method": {
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/v2-0488",
        "code": "LNV",
        "display": "Line, Venous"
      }]
    },
    "bodySite": {
      "concept": {
        "coding": [{
          "system": "http://snomed.info/sct",
          "code": "49852007",
          "display": "Structure of median cubital vein (body structure)"
        }]
      }
    }
  },
  "container": [{
    "device": { "reference": "Device/lab-tube-sst" },
    "specimenQuantity": { "value": 5, "unit": "mL", "system": "http://unitsofmeasure.org", "code": "mL" }
  }]
}

Common pitfalls

  • No accessionIdentifier — LIS rejects non-accessioned Specimens.
  • Missing type — without a type code (SER, BLD...), the lab cannot route the tube to the analyser.
  • Unchained aliquots — an aliquot MUST reference its parent via parent, otherwise chain-of-custody is lost.
  • Specimen container ≠ Device — in R5, container.device references a Device (the physical tube). Don't inline it.
  • Multiple ServiceRequests without combined — when one tube serves several orders, declare combined=grouped.