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.

Encounter — Care interaction

The clinical context in which every delivered service unfolds: outpatient visit, hospitalisation, emergency, telehealth. Every result, prescription, document points to an Encounter to be bound to a stay.

Purpose

Encounter represents an interaction between a patient and a healthcare provider for the purpose of providing healthcare or assessing the health status of the patient. The resource covers the full duration — from registration to discharge — and every type: outpatient visit, MCO inpatient stay, emergency, home health, telehealth, nursing home, day hospital.

Encounter is the administrative container for clinical data. An Observation, a Condition, a MedicationRequest, a Procedure all point to the Encounter via their encounter field to be bound to the stay. This modelling lets an EHR easily aggregate the data of an episode.

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers (visit number, encounter id from the HIS).
statuscode1..1planned, in-progress, on-hold, discharged, completed, cancelled, discontinued, entered-in-error, unknown.
classCodeableConcept[]0..*Encounter class (IMP=inpatient, AMB=ambulatory, EMER=emergency, HH=home health, VR=virtual…).
priorityCodeableConcept0..1Priority (R=routine, EM=emergency…).
typeCodeableConcept[]0..*Specific type (SNOMED CT).
serviceTypeCodeableReference(HealthcareService)[]0..*Service rendered (cardiology, ER…).
subjectReference(Patient | Group)0..1Patient or group.
subjectStatusCodeableConcept0..1Subject status (arrived, triaged, departed…).
episodeOfCareReference(EpisodeOfCare)[]0..*Parent care episode (chain of encounters).
basedOnReference[]0..*ServiceRequest / CarePlan that initiated the encounter.
participantBackboneElement[]0..*Participants (attending physician, admitting, nurse…) with their role.
appointmentReference(Appointment)[]0..*Associated appointment.
actualPeriodPeriod0..1Actual Encounter period (start, end).
plannedStartDatedateTime0..1Planned admission date.
lengthDuration0..1Encounter length.
reasonBackboneElement[]0..*Reason (SNOMED code + Condition reference).
diagnosisBackboneElement[]0..*Diagnosis(es) with role (AD=admission, DD=discharge, CC=chief complaint, billing…).
accountReference(Account)[]0..*Billing account.
admissionBackboneElement0..1Admission details (preAdmissionIdentifier, origin, admitSource, destination, dischargeDisposition).
locationBackboneElement[]0..*Successive locations occupied (room, bed…).
serviceProviderReference(Organization)0..1Responsible organisation.
partOfReference(Encounter)0..1Parent Encounter (encounter of encounters, transfers).

Status and class

The status + class pair is the most-used semantic:

  • status=planned + class=IMP — planned admission.
  • status=in-progress + class=IMP — inpatient.
  • status=in-progress + class=EMER — patient in ER.
  • status=in-progress + class=AMB — outpatient consultation in progress.
  • status=in-progress + class=VR — telehealth.
  • status=discharged + class=IMP — discharged, file not finalised.
  • status=completed — file finalised, archived.

JSON example

Emergency admission to ICU for chest pain, status in-progress, class inpatient, priority emergency.

json encounter-example.json
{
  "resourceType": "Encounter",
  "id": "example",
  "status": "in-progress",
  "class": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
      "code": "IMP",
      "display": "inpatient encounter"
    }]
  }],
  "priority": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/v3-ActPriority",
      "code": "EM",
      "display": "emergency"
    }]
  },
  "type": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "183807002",
      "display": "Inpatient stay 9 days"
    }]
  }],
  "subject": { "reference": "Patient/example" },
  "participant": [{
    "type": [{
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/v3-ParticipationType",
        "code": "ATND",
        "display": "attender"
      }]
    }],
    "actor": { "reference": "Practitioner/example" }
  }],
  "actualPeriod": {
    "start": "2026-05-14T10:25:30+01:00"
  },
  "reason": [{
    "value": [{
      "concept": {
        "coding": [{
          "system": "http://snomed.info/sct",
          "code": "29857009",
          "display": "Chest pain"
        }]
      }
    }]
  }],
  "diagnosis": [{
    "condition": [{ "reference": { "reference": "Condition/example" } }],
    "use": [{
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/diagnosis-role",
        "code": "AD",
        "display": "Admission diagnosis"
      }]
    }]
  }],
  "location": [{
    "location": { "reference": "Location/icu-101a", "display": "ICU room 101 bed A" },
    "status": "active"
  }],
  "serviceProvider": { "reference": "Organization/hosp01" }
}
  • class = IMP (inpatient encounter), priority = EM (emergency).
  • participant with type ATND (attender) references a Practitioner.
  • diagnosis with role AD (admission diagnosis) points to a Condition.
  • location with status=active shows the current bed (ICU 101 bed A).

REST API

  • GET /Encounter/example — direct fetch.
  • GET /Encounter?patient=example&status=in-progress — patient's active encounters.
  • GET /Encounter?patient=example&date=ge2026-05-01 — recent encounters.
  • GET /Encounter?patient=example&class=IMP — hospitalisations.
  • GET /Encounter/example/$everything — composite operation returning all resources attached to the Encounter.

Profiles

ProfileRegulatorRestrictions
US Core EncounterHL7 US RealmMust carry status, class, type, subject, actualPeriod, and a participant with role.
IPS EncounterHL7 + CEN/TC 251Minimum cardinality + international value sets.
FR Core EncounterANSMust carry identifier (IEP) and link the Organization to FINESS.

Common pitfalls

  • Wrong class code system: using SNOMED CT for class instead of v3-ActCode makes class=IMP queries fail. Always use v3-ActCode.
  • status / subjectStatus confusion: status is administrative (planned, in-progress…), subjectStatus is the clinical state of the patient (arrived, triaged, departed…).
  • Multiple actualPeriod.start without end: an Encounter stuck in-progress indefinitely pollutes queries. Always close (status=discharged + actualPeriod.end) on discharge.
  • No HIS-side identifier: without an IEP / visit number, you cannot correlate with v2 flows (PV1-19). Always carry a typed identifier.
  • Duplicate locations: each move (room transfer, bed change) adds an entry to location with its own period. Only one entry should have status=active.
  • Missing reference to Patient: an Encounter without subject is anonymous and illegal in production (regulators).
  • Patient — encounter subject.
  • Practitioner — referenced by participant.
  • Condition — encounter diagnosis.
  • Observation — clinical data linked via encounter.
  • EpisodeOfCare — parent episode (multiple Encounters for the same problem).
  • Appointment — originating appointment.
  • Account — associated billing.
  • HL7 v2 equivalentADT^A01 segment PV1.