German Practice Management FHIR Profiles (R4)
0.90.0 - STU1
Germany
German Practice Management FHIR Profiles (R4) - Local Development build (v0.90.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
The assessment/attestation, device-order, and non-prescription medication
recommendation profiles are documented together on
Annex 2b Independent Resource Contracts.
The crosswalk explains why QuestionnaireResponse/DiagnosticReport/
Composition, VisionPrescription/DeviceRequest, and MedicationRequest
remain separate resource families.
This Implementation Guide is primarily extension-focused, but it also defines selected custom StructureDefinition profiles where routing, slicing, or validation rules need to be explicit on top of standard FHIR R4 and German base profiles.
The IG therefore combines reusable extensions and terminology with a small number of targeted profiles for coverage routing, laboratory exchange, billing, and related ambulatory workflows. Demographic, diagnosis, procedure, allergy, and device resources inherit the KBV base profiles directly per ADR-008 (KBV-Basis als Fundament) — see the inheritance architecture page.
| Resource | Usage | Key Extensions |
|---|---|---|
| PraxisBillingMacro | Curated billing macro / Ziffernkette (recommendation only) | specialty/venue useContext (ADR-010) |
| PraxisWorkflowDefinition | Multi-output Job template with typed inputs | specialty/venue useContext (ADR-010) |
| PraxisWorkflowInputQuestionnaire | Typed Job inputs (linkId); SDC StructureMap binding |
SDC targetStructureMap |
| PraxisBillingPattern | Legacy read compatibility (deprecated) | BillingPatternStopfield |
| ChargeItem | Individual billable service (EBM-Ziffer, GOÄ-Leistung); v1 service / context / definitionCanonical lineage |
BillingSystem, BillingCode, BillingPoints, GoaeFaktor, BillingRlvRelevanz |
| ChargeItemDefinition | Billing catalog entry (EBM/GOÄ catalog) | GoaeRegelhoechstsatzFaktor, BillingRequirements, BillingExclusions, BillingPruefzeit, BillingFachgruppen |
| Claim | Submitted billing claim per Schein | AbrechnungsquartalExt, ScheinPositionExt, RabStatusExt |
| ClaimResponse | KV response to submitted claims | HonorarbescheidCorrectionSign |
| Account | Offene Posten / accounts receivable | RechnungsbetragExt, MahnstufeExt, FaelligkeitsdatumExt |
| DiPagRechnung (dependency) | Official gematik digital patient invoice used directly | DiPag net/gross totals, gross line amounts, included tax, payment terms, deductions, and corrections |
Practice workflow migration and lineage rules: Plan-Library vs. Rule-Execution Boundary.
| Resource | Usage | Key Extensions |
|---|---|---|
| Contract | RLV/QZV budget allocation per quarter | RlvFallwert, RlvZugewiesen, RlvEntbudgetiert, RlvKategorie |
| Basic | KV benchmark data (Fachgruppen-Durchschnittswerte) | KvBenchmarkRlvFallwertAk1/2/3, KvBenchmarkDurchschnittFallzahl |
| Resource | Usage | Key Extensions |
|---|---|---|
| PaymentReconciliation | KV quarterly payment statement | HonorarbescheidQuartal |
| ClaimResponse | Individual line-item corrections | HonorarbescheidCorrectionSign |
| Resource | Usage | Key Extensions |
|---|---|---|
| Encounter | Patient visit with queue management | ArrivalTimeExt, EncounterCalledExt, EncounterCreatedAtExt |
| EncounterPraxisPoPP | PoPP-supported patient check-in (adapter-boundary stub) | TreatmentContextExt, PoPPTokenAnchorExt |
| Condition | Diagnoses with German-specific metadata | DauerdiagnoseExt |
| ServiceRequest | Überweisungen (referrals), Heilmittelverordnungen (remedy orders) | ReferralSugTypeExt, ReferralOptimizationStatusExt |
| PraxisReferralDE | Reusable incoming and outgoing referral | namespaced identity, recipient, timing, and optional assignment, priority, and structured context |
| PraxisLabServiceRequestDE | Reusable laboratory order | stable placer identifier, requester, performer, and optional indication, insurance, and specimen |
| PraxisCervicalScreeningServiceRequestDE | Cervical screening order derived from the laboratory order | extensible LOINC cytology/HPV binding |
| PraxisHospitalAdmissionServiceRequestDE | Reusable e02 hospital-admission record | shared request contract and existing admission extensions |
| PraxisPatientTransportServiceRequestDE | Reusable e04 patient-transport record | shared request contract and target provider |
| PraxisSociotherapyIndicationReferralDE | Reusable e28 indication referral | inherits outgoing referral semantics |
| PraxisTherapeuticRemedyDE | Heilmittelverordnung (Muster 13) | category discriminator, gevko EVO_VS_HLM_* bindings |
| Communication | Practice communications and message records | communication-specific content; hospital admissions use PraxisHospitalAdmissionServiceRequestDE |
| CareTeam | Treatment team (interdisciplinary care coordination) | — |
| Procedure | Ambulante Eingriffe mit OPS-Kodierung — uses KBV_PR_Base_Procedure directly |
— (OPS + Seitenlokalisation inherited from KBV base) |
| PraxisLabDiagnosticReport | Laborbefund mit LAB/MB/PAT Varianten | category slicing, result/specimen references, supports Einzelbefund/Kumulativbefund/Mikrobiologie/Pathologie |
| PraxisLabObservation | Laborergebnisse mit LOINC/LDT-Codierung | Observation status, category, code slicing, referenceRange, interpretation |
| PraxisSpecimen | Probenmaterial für xDT-Adapter (LDT/GDT) | — (SNOMED-CT + optional LDT-Code) |
| PraxisCervicalScreeningObservationDE | Cervical screening result observation | required request and specimen correlation |
| PraxisCervicalScreeningSpecimenDE | Cervical screening specimen | uterine-cervix type and required request correlation |
| PraxisCervicalScreeningDiagnosticReportDE | Cervical screening report | required report-to-order, specimen, and observation correlation |
| PraxisImmunization | Ambulatory-practice immunization | optional protocolApplied.targetDisease with required KBV MIO target-disease binding |
PraxisImmunization remains a profile on base FHIR Immunization, not a KBV MIO Immunization profile. protocolApplied and protocolApplied.targetDisease are Must Support but preserve their base 0..* cardinalities, so historical records without evidenced target diseases remain conformant. When a target disease is supplied, it must be coded from https://fhir.kbv.de/ValueSet/KBV_VS_MIO_Vaccination_TargetDisease|1.1.0 with required binding strength. A legal-documentation workflow using KBV MIO Record_Prime or Record_Addendum may impose mandatory target-disease requirements independently of this generic profile.
| Resource | Usage | Key Extensions |
|---|---|---|
| Patient | Patient demographics — uses KBV_PR_Base_Patient directly |
— (VSD on standard Name/KVID/Coverage fields) |
| AIProvenanceCompatibility | Accepted-resource AI lineage with a direct ai-model role discriminator and the official AI-Device target constraint |
— |
| Provenance | Ordinary non-AI audit events use base FHIR Provenance | — |
| FPDECoverageGKV | GKV insurance with Wohnortprinzip (WOP) | gkv/wop |
| FPDECoveragePrivat | PKV / self-pay coverage with optional PVS routing | billingAssignment |
| PractitionerRole | WB-Assistent / Sicherstellungsassistent | WbRolleExt, WbSupervisorRoleExt |
| PraxisHealthcareServiceDE | Ambulatory service offerings | — (type/specialty ValueSet bindings) |
| PraxisPractitionerRoleDE | Arzt-Standort-Zuordnung with service-offering link | WbBefugnisExt, healthcareService |
| Consent | Patient consent management | EinwilligungKuerzelExt, EinwilligungWiderrufMoeglichExt, EinwilligungAuswahlExt |
Diagnoses are recorded on KBV_PR_Base_Condition_Diagnosis directly. Per ADR-008 (KBV-Basis als Fundament) the former Praxis-specific Condition wrappers were dissolved: the asserter/evidence constraints were not sourced from the PVS (the recorder is set instead), and the Dauerdiagnose flag is carried by the local DauerdiagnoseExt boolean marker on the open Condition.extension slot — a marker semantically aligned with, and a 1:1 crosswalk to, the WeST istDauerdiagnose extension (mirrored, not a WeST package dependency).
KBV base already carries the German diagnosis requirements needed for KV billing (KVDT 6.06):
http://fhir.de/StructureDefinition/icd-10-gm-diagnosesicherheit extension — required by the KV on billing claimsThe KVDT diagnosis-certainty semantics map to Condition status as follows:
| Code | Meaning | Clinical Status | Verification Status |
|---|---|---|---|
| G | Gesichert (Confirmed) | active / resolved / remission | confirmed |
| A | Ausschluss (Ruled out) | — | refuted |
| V | Verdacht (Suspected) | active / provisional | provisional |
| Z | Zustand nach (History of) | resolved | confirmed |
PVS systems must populate the Diagnosesicherheit on every diagnosis before submitting the claim to the KV. See the Claim Diagnosis Contract for how these Conditions project onto Claim.diagnosis.
The following resources also dropped their Praxis* wrappers and now use the KBV base profile directly. See the inheritance architecture page for the full rationale.
| Resource | KBV base profile | Notes |
|---|---|---|
| Patient | KBV_PR_Base_Patient |
VSD lands on standard Name/KVID/Coverage fields; maiden-name/Ortsteil modeling was redundant |
| Practitioner | KBV_PR_Base_Practitioner |
Telematik-ID not populated; ZANR moved to the dental IG |
| Procedure | KBV_PR_Base_Procedure |
Ambulante Eingriffe; OPS (CodingOPS) + Seitenlokalisation inherited from KBV |
| AllergyIntolerance | KBV_PR_Base_AllergyIntolerance |
stronger SNOMED/ASK binding than a local wrapper; PraxisFlag still covers broad CAVE/workflow warnings |
| Device | KBV_PR_Base_Device |
medical devices / lab analyzers; the GDT-8402 Gerätekennung is carried as Device.identifier (system gdt-device-id) |
The AnamneseQuestionnaire profile extends the base FHIR Questionnaire resource to standardize ambulatory history-taking forms (Anamneseboegen) in practice management systems. It supports multiple questionnaire types (initial intake, pain assessment, preventive health screening, and follow-up) with structured groups of clinical questions.
| Type | Code | Usage |
|---|---|---|
| Erstanamnese | erstanamnese |
Comprehensive initial intake form for new patients |
| Schmerzanamnese | schmerzanamnese |
Focused pain assessment questionnaire |
| Praeventionsanamnese | praevention |
Preventive health screening form |
| Verlaufsanamnese | follow-up |
Repeat assessment during treatment course |
| Fachspezifisch | fachspezifisch |
Specialty-specific questionnaire template |
#active for active templates#PatientAnamneseBogentypVStrue, PVS systems should surface the item prominently in the clinical workflow.Standard FHIR Questionnaire item types including: group, display, boolean, decimal, integer, date, dateTime, time, string, text, url, choice, open-choice, attachment, reference, quantity.
Patients complete these questionnaires via a QuestionnaireResponse-Builder interface. Each response is linked to the template via QuestionnaireResponse.questionnaire reference. PVS systems can then:
See example example-anamnese-erstanamnese for a complete three-group Erstanamnese template (Previous Conditions, Medication, Social History).
The InsurancePlanDE profile extends the base FHIR InsurancePlan resource with slicing on plan to distinguish GKV (statutory health insurance) and PKV (private health insurance) tariffs.
| Slice | Type Code | Usage |
|---|---|---|
plan[gkv] |
InsurancePlanType#gkv |
GKV Satzungsleistungen und kassenindividuelle Leistungen |
plan[pkv] |
InsurancePlanType#pkv |
PKV GOÄ-Faktoren und Erstattungsregeln |
FHIR R4 does not provide a direct reference element from Coverage to InsurancePlan. The recommended pattern for this IG is to use Coverage.class to link a patient's Coverage to the specific InsurancePlan tariff by identifier:
Coverage.class[type=plan].value → InsurancePlan.identifier (Tarif-Identifier)
Coverage.class[type=plan].name → InsurancePlan.name (human-readable label)
Example: A GKV patient with AOK Bayern PZR Satzungsleistung:
Coverage.class[0].type = http://terminology.hl7.org/CodeSystem/coverage-class#plan
Coverage.class[0].value = "aok-bayern-pzr"
Coverage.class[0].name = "AOK Bayern — Basis + PZR Satzungsleistung"
The value "aok-bayern-pzr" matches the InsurancePlan.identifier of the corresponding InsurancePlanDE instance. Systems can look up the full tariff details (benefit limits, GOÄ-Faktoren, Satzungsleistungen) from the referenced InsurancePlan resource using this identifier.
See example-coverage-aok-tarif for a complete example.
The CareTeamDE profile models treatment teams (Behandler-Teams) in German ambulatory care. It supports interdisciplinary care coordination with role-based participant slicing.
| Element | Cardinality | Profile Constraint |
|---|---|---|
status |
0..1 | MS; proposed | active | suspended | inactive | entered-in-error |
category |
0..* | MS; typically LOINC LA27975-4 (Encounter-focused care team) |
name |
0..1 | MS; human-readable team name (e.g. "Zahnarztpraxis Dr. Mueller") |
subject |
0..1 | MS; Reference(Patient) — the patient for whom the team provides care |
period |
0..1 | MS; start and end times for team engagement |
participant |
0..* | MS; sliced by role (BehandlerRolleVS) |
participant[behandler].member |
0..1 | MS; Reference(Practitioner | PractitionerRole | Organization) |
participant[behandler].role |
0..* | MS; bound to BehandlerRolleVS (required) |
managingOrganization |
0..* | Reference(Organization) — the practice or facility managing the team |
Participants are sliced on the role element to distinguish treatment roles:
| Slice | Role CodeSystem | Usage |
|---|---|---|
participant[behandler] |
BehandlerRolleCS | Individual health professionals or organizations with a clinical role on the team |
Each participant[behandler] slice must include:
role from BehandlerRolleVS (Zahnarzt, Arzt, ZFA, MFA, WB-Assistent, Physiotherapeut)member Reference to the Practitioner, PractitionerRole, or Organization holding that roleperiod (start/end) for that participant's engagementA PVS adapter should:
CareTeamDE instance for each patient-facing treatment team.period.start / period.end to track when the team composition was active.See examples: example-care-team, example-care-team-small, example-care-team-inactive, example-care-team-mvz.
The FPDECoverageGKV profile extends the base FHIR Coverage resource to support German statutory health insurance (GKV — gesetzliche Krankenversicherung) with the Wohnortprinzip (WOP — residence-based principle) designation. The WOP indicates the regional KV (Kassenärztliche Vereinigung) responsible for the patient's care based on their place of residence.
| Element | Cardinality | Extension | Description |
|---|---|---|---|
status |
0..1 | Coverage status (active, inactive, entered-in-error, etc.) | |
type |
1..1 | Must code GKV using http://fhir.de/CodeSystem/versicherungsart-de-basis |
|
beneficiary |
1..1 | Reference(Patient) — the insured patient | |
payor |
1..* | Reference to the insurance carrier (Krankenkasse) | |
extension |
0..* | gkv/wop |
MS; Wohnortprinzip (WOP) code from KBV CodeSystem |
gkv/wop — Wohnortprinzip (WOP)The extension http://fhir.de/StructureDefinition/gkv/wop from de.basisprofil.r4 is used to specify the regional KV responsible for the patient. The value is a Coding from the KBV CodeSystem https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ITA_WOP, which lists all German KV regions (e.g., 38 = Nordrhein, 20 = Westfalen-Lippe).
Example:
extension[0].url = "http://fhir.de/StructureDefinition/gkv/wop"
extension[0].valueCoding.system = "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ITA_WOP"
extension[0].valueCoding.code = "38"
extension[0].valueCoding.display = "Nordrhein"
| Code | Display | Region |
|---|---|---|
| 38 | Nordrhein | Nordrhein (North Rhine) |
| 20 | Westfalen-Lippe | Westfalen-Lippe (Westphalia-Lippe) |
| 33 | Baden-Württemberg | Baden-Württemberg |
| 52 | Saarland | Saarland |
| (and others) | See KBV CodeSystem for complete list |
When recording GKV coverage in a PVS:
Coverage resourcestatus = #active (or appropriate status)type with GKV coding from http://fhir.de/CodeSystem/versicherungsart-de-basisbeneficiary to a Reference(Patient)payor to the insurance carrier (Krankenkasse) name or referencegkv/wop extension with the appropriate WOP codeFPDECoverageGKV before submissionUpstream Dependency: The gkv/wop extension is provided by the de.basisprofil.r4 package and is not redefined in this IG. It is reused as-is.
See examples: example-coverage-gkv-wop, example-coverage-gkv-wop-west.
The FPDECoveragePrivat profile constrains Coverage for private billing scenarios where routing to an external billing service (PVS) is decided per Coverage. This is the critical modeling choice: a patient can have multiple Coverage resources, and only some of them may route receivables to a third-party biller.
de.basisprofil.r4 version 1.5.4 does not currently publish a dedicated coverage-de-pkv profile. This IG therefore derives FPDECoveragePrivat from coverage-de-basis and requires a German insurance type coding of PKV or SEL.
| Element | Cardinality | Extension | Description |
|---|---|---|---|
status |
0..1 | Coverage status | |
type |
1..1 | Must include http://fhir.de/CodeSystem/versicherungsart-de-basis with code PKV or SEL |
|
beneficiary |
1..1 | Reference(Patient) — the covered patient | |
subscriber |
0..1 | Optional subscriber for classic PKV relationships | |
payor |
1..* | Insurance carrier or direct payer, depending on the coverage type | |
extension[billingAssignment] |
0..1 | billing-assignment |
Reference(Organization) — PVS / billing service buying receivables from this coverage relationship |
Coverage is the source of truth for external billing routing.extension[billing-assignment] is present, the referenced Organization is the PVS / billing service for that coverage.Claim.payee.type = other and Claim.payee.party.billing-assignment.When recording private billing coverage in a PVS:
Coverage resource based on FPDECoveragePrivattype with PKV or SEL from VersicherungsartDeBasisbeneficiary to the covered patient and payor to the insurer or direct payerbilling-assignment only when receivables are assigned to an external billing serviceConsent resource scoped to the same CoverageFPDECoveragePrivat before submissionSee examples: ExampleCoveragePrivat, ExamplePvsOrganization, ExampleConsentBillingAssignment.
The PraxisSpecimen profile extends the base FHIR Specimen resource to standardize specimen (Probenmaterial) documentation in German ambulatory practice. It is designed for xDT adapters (LDT, GDT 3.5) that exchange laboratory order and result information. The profile ensures that specimen identifiers and material types are captured in a PVS-agnostic manner, compatible with laboratory systems.
| Element | Cardinality | Profile Constraint |
|---|---|---|
identifier |
0..* | Optional; labs may assign their own specimen identifiers using system-specific URLs |
type |
1..1 | MS; sliced by coding system (SNOMED-CT + optional LDT) |
type.coding[snomed] |
1..1 | MS; SNOMED-CT coding (extensible) using ProbenmaterialSnomedVS |
type.coding[snomed].system |
1..1 | Fixed: http://snomed.info/sct |
type.coding[snomed].code |
1..1 | MS; SNOMED-CT code for specimen material |
type.coding[ldt] |
0..1 | Optional; LDT FK 8428 material designation using LdtMaterialbezeichnungCS |
type.coding[ldt].system |
1..1 | Fixed: https://fhir.cognovis.de/praxis/CodeSystem/ldt-materialbezeichnung |
type.coding[ldt].code |
1..1 | LDT FK 8428 code (e.g., EDTA-Blut, Serum, Urin-MSU) |
subject |
1..1 | MS; Reference(Patient) — the patient providing the specimen |
collection |
0..1 | MS; capture collection method, timing, and body site |
collection.collectedDateTime |
0..1 | MS; when the specimen was collected |
collection.method |
0..1 | MS; SNOMED-CT or LDT code for collection technique (venipuncture, swab, etc.) |
collection.bodySite |
0..1 | MS; anatomical location of specimen collection |
container |
0..* | MS; tube type and container information |
container.type |
0..1 | MS; SNOMED-CT code for container type (EDTA tube, serum separator, etc.) |
Specimen identifiers are lab-specific. No shared NamingSystem is defined for specimen identifiers. Each laboratory assigns identifiers using its own system URL:
identifier[0].system = "https://<lab-specific-url>/proben-id"
identifier[0].value = "<lab-specific-specimen-id>"
Example: A specimen from "Labor Beispiel" might use:
system = "https://labor-beispiel.de/proben-id"
value = "BL-2026-00147"
Different laboratories can have different URL structures; there is no registry of these URLs — they are internal to each laboratory system.
SNOMED-CT (extensible) provides internationally recognized coding for specimen types:
122555007 — Venous blood specimen122575003 — Urine specimen258529004 — Throat swab119364003 — Serum specimen258450006 — Cerebrospinal fluid specimen119339001 — Stool specimenLDT FK 8428 (optional) adds German-specific material designation from the KBV LDT3 specification:
EDTA-Blut — EDTA-Blut (venous blood in EDTA tube)Serum — BlutserumUrin-MSU — Mittelstrahl urineAbstrich — Swab / smearLiquor — Cerebrospinal fluidStuhl — Stool sampleBoth coding systems can coexist; SNOMED-CT is mandatory, LDT is optional. xDT adapters can map between the two at transformation time.
The kbv.mio.laborbefund (KBV MIO Laboratory Report) ImplementationGuide defines specimen handling for laboratory results in Germany. PraxisSpecimen is inspired by KBV_PR_MIO_LAB_Specimen but is not constrained to it because:
PraxisSpecimen must remain PVS-agnostic — applicable to any ambulatory practice system, not tied to a specific MIO workflowSpecimen resource as parent, ensuring broad compatibilityRefer to the KBV MIO Laboratory Report guide for context on laboratory workflow integration.
When capturing specimen information in a PVS:
Specimen resourcetype.coding[snomed] with the appropriate SNOMED-CT codetype.coding[ldt] if the PVS maintains LDT material designationssubject with a reference to the patientcollection.collectedDateTime, collection.method, collection.bodySite)container.type) aids downstream laboratory processingPraxisSpecimen before transmission122555007 (Venous blood specimen) + LDT EDTA-Blut (EDTA-Blut), collected by venipuncture, in EDTA tube.122575003 (Urine specimen) + LDT Urin-MSU (Mittelstrahl urine), mid-stream collection.258529004 (Throat swab), collected by swab technique from pharynx.See examples: example-specimen-blut-edta, example-specimen-urin-msu, example-specimen-rachenabstrich.
The PraxisLabObservation profile extends the base FHIR Observation resource to standardize laboratory result documentation in German ambulatory practice. It is designed for in-practice and rapid laboratory testing with flexible result types (quantitative, qualitative, coded) and dual coding support for LOINC and LDT test identifiers.
| Element | Cardinality | Profile Constraint |
|---|---|---|
status |
1..1 | MS; final | preliminary | registered | amended (typically #final or #preliminary) |
category |
1..* | MS; sliced to require laboratory (1..1) |
category[laboratory] |
1..1 | MS; fixed to http://terminology.hl7.org/CodeSystem/observation-category#laboratory |
code |
1..1 | MS; test code — sliced with LOINC and LDT-Testkennung (FK 8420) |
code.coding[loinc] |
0..1 | MS; LOINC coding; system fixed to http://loinc.org |
code.coding[ldt] |
0..1 | MS; LDT test identifier; system fixed to https://fhir.cognovis.de/praxis/NamingSystem/ldt-testkennungen |
code Invariant |
— | praxis-lab-obs-code; at least one of LOINC or LDT coding required (error level) |
subject |
1..1 | MS; Reference(Patient) — the patient for whom the test was performed |
effective[x] |
0..1 | MS; only dateTime allowed; when the measurement/test was performed |
value[x] |
0..1 | MS; only Quantity | string | CodeableConcept (quantitative, qualitative, or coded results) |
interpretation |
0..* | MS; result interpretation (H/L/N etc.); extensibly bound to HL7 ObservationInterpretation ValueSet |
referenceRange |
0..* | MS; normal range with UCUM-constrained low/high values |
referenceRange.low |
0..1 | MS; lower bound; system fixed to http://unitsofmeasure.org |
referenceRange.high |
0..1 | MS; upper bound; system fixed to http://unitsofmeasure.org |
specimen |
0..1 | MS; Reference(PraxisSpecimen) — the specimen analyzed (optional) |
The profile enforces flexible coding with at least one code slice present:
LOINC (Slice: loinc):
http://loinc.org4548-4 for HbA1c)LDT FK 8420 (Slice: ldt):
https://fhir.cognovis.de/praxis/NamingSystem/ldt-testkennungen03034000 for HbA1c)Invariant praxis-lab-obs-code:
code.coding.where(system = 'http://loinc.org').exists()
OR code.coding.where(system = 'https://fhir.cognovis.de/praxis/NamingSystem/ldt-testkennungen').exists()
At least one coding slice must be present; severity is #error.
The profile allows three forms of result representation:
Interpretation (MS):
H (High), L (Low), N (Normal), NEG (Negative), POS (Positive)Reference Range (MS):
low and high bounds must use UCUM-constrained unitshttp://unitsofmeasure.orgreferenceRange.age (optional)The profile is designed for xDT adapter workflows:
PraxisLabObservation:
code.coding[ldt]value[x] (Quantity, string, or CodeableConcept)specimen.collection.collectedDateTimeinterpretationKBV_PR_Base_Device) can be identified via device extension (future work)When capturing lab results in a PVS:
Observation resource of type PraxisLabObservationstatus as #final (or #preliminary if not yet verified)category[laboratory] to the fixed laboratory codecode.coding:
code.coding[loinc] if a LOINC mapping exists for the testcode.coding[ldt] if the test is identified by LDT FK 8420 codesubject to Reference(Patient)effective[x] with the test date/timevalue[x] with the appropriate result type (Quantity, string, or CodeableConcept)interpretation (e.g., #H, #L, #N) if provided by the analyzer or labreferenceRange with normal range limits using UCUM unitsspecimen = Reference(PraxisSpecimen)PraxisLabObservation before submissionlab-obs-example-hba1c — LOINC + LDT coding, 6.1 %, high interpretation, EDTA-Blut specimenlab-obs-example-leukozyten-urin — LOINC + LDT coding, "negativ" result, normal interpretationlab-obs-example-ldt-only-custom — LDT coding only, quantitative in mg/dL, custom test without LOINCSee examples: lab-obs-example-hba1c, lab-obs-example-leukozyten-urin, lab-obs-example-ldt-only-custom.
The PraxisLabDiagnosticReport profile extends the base FHIR DiagnosticReport resource to standardize laboratory result reporting in German ambulatory practice. It supports multiple laboratory report variants (standard lab, microbiology, pathology) via category slices, and accommodates both single-point and cumulative reporting patterns through separate DiagnosticReport instances.
| Element | Cardinality | Profile Constraint |
|---|---|---|
status |
1..1 | MS; final | preliminary | amended | corrected (typically #final or #preliminary) |
category |
1..* | MS; sliced by HL7 v2 Table 0074 (LAB, MB, PAT); at least one slice must be present |
category[lab] |
0..1 | MS; fixed to http://terminology.hl7.org/CodeSystem/v2-0074#LAB (standard laboratory reports) |
category[mb] |
0..1 | MS; fixed to http://terminology.hl7.org/CodeSystem/v2-0074#MB (microbiology reports) |
category[pat] |
0..1 | MS; fixed to http://terminology.hl7.org/CodeSystem/v2-0074#PAT (pathology/histology reports) |
category Invariant |
— | praxis-lab-dr-category; at least one category slice must be present (error level) |
code |
1..1 | MS; report code (typically LOINC panel code; not constrained to LOINC only to allow laboratory-specific codes) |
subject |
1..1 | MS; Reference(Patient) — the patient for whom the report was generated |
effective[x] |
0..1 | MS; only dateTime allowed; specimen collection or report generation date |
issued |
0..1 | MS; when the report was issued/authorized |
performer |
0..* | MS; Reference(Practitioner | Organization) — performing lab or technician |
resultsInterpreter |
0..* | MS; Reference(Practitioner | Organization) — physician/specialist responsible for interpretation |
specimen |
0..* | MS; Reference(PraxisSpecimen) — specimens analyzed in this report |
result |
0..* | MS; Reference(PraxisLabObservation) — individual test results |
conclusion |
0..1 | MS; narrative summary or clinical interpretation text |
presentedForm |
0..* | MS; attached PDF/document representation of the report |
basedOn |
0..* | MS; Reference(ServiceRequest) — orders underlying this report (useful for cumulative report linkage) |
The profile enforces report classification via open slicing on category with three named slices:
LAB (Standard Laboratory):
http://terminology.hl7.org/CodeSystem/v2-0074#LABMB (Microbiology):
http://terminology.hl7.org/CodeSystem/v2-0074#MBPAT (Pathology):
http://terminology.hl7.org/CodeSystem/v2-0074#PATInvariant praxis-lab-dr-category:
category.coding.where(system = 'http://terminology.hl7.org/CodeSystem/v2-0074'
and (code = 'LAB' or code = 'MB' or code = 'PAT')).exists()
At least one category slice must be present; severity is #error.
#finaleffectiveDateTime values[mb] set to #MB[pat] set to #PATpresentedForm typically contains detailed PDF reportSpecimen References:
specimen must reference only PraxisSpecimen resourcesResult References:
result must reference only PraxisLabObservation resourcesFor practices tracking longitudinal trends (e.g., quarterly HbA1c, monthly INR):
DiagnosticReport instance for each measurement dateeffectiveDateTime and issuedbasedOn references if part of a managed condition (e.g., diabetes follow-up order)GET /fhir/DiagnosticReport?code=4548-4&subject=Patient/123&sort=-dateThis pattern avoids FHIR-level grouping complexity and relies on clients to assemble trends via code + date filtering.
#preliminary, no presenter form yet.When capturing lab reports in a PVS:
DiagnosticReport resource of type PraxisLabDiagnosticReportstatus to #final (for complete reports) or #preliminary (for partial/early reports)category:
category[lab]category[mb]category[pat]code to the report code (typically LOINC, e.g., 58410-2 for CBC)subject to Reference(Patient)effective[x] with specimen collection date as dateTimeissued with report authorization/release dateresult to all relevant PraxisLabObservation resourcesspecimen to all relevant PraxisSpecimen resourcesresultsInterpreter Reference for the responsible physicianconclusion with clinical summary or interpretationpresentedForm with contentType + URL or base64PraxisLabDiagnosticReport before submissionexample-lab-dr-blutbild — LAB category, LOINC 58410-2, final status, EDTA blood specimenexample-lab-dr-urinkultur — MB category, E. coli with antibiogram, final statusexample-lab-dr-histologie — PAT category, basal cell carcinoma diagnosis, PDF report, final statusexample-lab-dr-preliminary — LAB category, preliminary status (result not yet complete)example-lab-dr-hba1c-jan — LAB category, final, Q1 2026 dateexample-lab-dr-hba1c-apr — LAB category, final, Q2 2026 date (demonstrates trend pattern)example-lab-dr-hba1c-q3 — LAB category, final, Q3 2026 date (completes quarterly series)See examples: example-lab-dr-blutbild, example-lab-dr-urinkultur, example-lab-dr-histologie, example-lab-dr-preliminary, example-lab-dr-hba1c-jan, example-lab-dr-hba1c-apr, example-lab-dr-hba1c-q3.
The PraxisTherapeuticRemedyDE profile models a German statutory Heilmittelverordnung (therapeutic remedy prescription, form Muster 13) as a ServiceRequest with intent = order. This is a remedy order — prescribing physiotherapy, occupational therapy, speech therapy, podiatry, or nutritional therapy — and is intentionally distinct from PraxisReferralDE (reusable incoming or outgoing referral) and from laboratory or imaging ServiceRequest variants.
| Element | Cardinality | Notes |
|---|---|---|
category[therapeuticRemedy] |
1..1 | Fixed discriminator (EVO_CS_FOR_FormularArt#e13) identifying eHLM remedy orders |
intent |
1..1 | Fixed to order |
subject |
1..1 | Reference(Patient) |
requester |
0..1 MS | Prescribing physician or practice (LANR/BSNR) |
authoredOn |
0..1 MS | Prescription date |
reasonCode[icd10gm] |
0..* MS | ICD-10-GM indication |
code |
0..1 MS | Heilmittelkatalog position (EVO_CS_HLM_Katalog system + per-record code; example binding only) |
orderDetail |
0..* MS | Sliced details: Diagnosegruppe (KBV), Leitsymptomatik, AnlageTyp, Heilmittelbereich, Hausbesuch (gevko) |
quantity[x] |
0..1 MS | Prescribed units (e.g. treatment sessions) |
occurrence[x] |
0..1 MS | Treatment frequency / schedule |
insurance |
0..* MS | Optional Reference(FPDECoverageGKV or FPDECoveragePrivat) |
Terminology dependencies: de.cognovis.terminology.heilmittel (gevko EVO_VS_HLM_* mirror) and de.cognovis.terminology.kbv (KBV_VS_SFHIR_HM_DIAGNOSEGRUPPE). See example-therapeutic-remedy-physio for a complete instance.
The choice of base resource follows FHIR R4 semantics:
KBV_PR_Base_Device directly; the GDT-8402 Gerätekennung is carried as Device.identifier (system gdt-device-id).