Skip to content

ValueSet be-vs-requested-services-nurse-detail is not usable in practice #474

@lionel-cremer

Description

@lionel-cremer

Problem

The ValueSet be-vs-requested-services-nurse-detail aggregates codes used in different contexts and different prescription types.
As a result, it is not possible in practice for an integrator to determine:

  • which values are allowed for ServiceRequest.orderDetail,
  • for a given prescription type and context.

The ValueSet contains values that are valid in some prescriptions but invalid in others, without any way to identify the applicable subset.

Practical impact for integrators

In real implementations, integrators need to:

  • populate UI selectors with only valid values,
  • validate incoming prescriptions,
  • implement deterministic business logic.

With the current ValueSet:

  • integrators only get a flat, global list,
  • they must manually interpret documentation or examples,
  • the ValueSet cannot be used as a reliable source of truth.

Root cause

The ValueSet mixes intentions and meanings that belong to different prescription contexts, instead of providing context-specific, intention-driven ValueSets.

Example of intention-based ValueSets

Instead of a single global ValueSet, integrators would benefit from intention-specific ValueSets, for example:

Example 1 – Sampling Type

Prescription Type : Sampling
Intent : Specifies which biological substance must be sampled

{
  "resourceType": "ValueSet",
  "id": "sample-substance-type",
  "url": "https://.../fhir/ValueSet/sample-substance-type",
  "version": "1.0.0",
  "name": "SampleSubstanceTypeVS",
  "title": "Sample substance type",
  "status": "active",
  "experimental": false,
  "date": "2025-12-12",
  "publisher": "Digital Referral Prescription",
  "description": "ValueSet listing the types of substances that can be requested for sample collection in a prescription.",
  "compose": {
    "include": [
      {
        "system": "http://snomed.info/sct",
        "concept": [
          {
            "code": "247450001",
            "display": "Exudate",
            "designation": [
              { "language": "fr", "value": "Exsudat" },
              { "language": "nl", "value": "Exsudaat" }
            ]
          },
          {
            "code": "39477002",
            "display": "Feces",
            "designation": [
              { "language": "fr", "value": "Fèces" },
              { "language": "nl", "value": "Feces" }
            ]
          },
          {
            "code": "45710003",
            "display": "Sputum",
            "designation": [
              { "language": "fr", "value": "Expectorations" },
              { "language": "nl", "value": "Sputum" }
            ]
          },
          {
            "code": "78014005",
            "display": "Urine",
            "designation": [
              { "language": "fr", "value": "Urine" },
              { "language": "nl", "value": "Urine" }
            ]
          },
          {
            "code": "87612001",
            "display": "Blood",
            "designation": [
              { "language": "fr", "value": "Sang" },
              { "language": "nl", "value": "Bloed" }
            ]
          },
          {
            "code": "410582009",
            "display": "Nasal fluid",
            "designation": [
              { "language": "fr", "value": "Liquide nasal" },
              { "language": "nl", "value": "Neusvocht" }
            ]
          },
          {
            "code": "256897009",
            "display": "Saliva",
            "designation": [
              { "language": "fr", "value": "Salive" },
              { "language": "nl", "value": "Speeksel" }
            ]
          },
          {
            "code": "257915005",
            "display": "Other",
            "designation": [
              { "language": "fr", "value": "Autre" },
              { "language": "nl", "value": "Andere" }
            ]
          }
        ]
      }
    ]
  }
}

Example 2 – Glycemia Measurement Time

Prescription Type : Glycemia Measurment
Intent : Indicates when blood glucose must be measured

{
  "resourceType": "ValueSet",
  "id": "drp-glycemia-measurement-timing",
  "url": "https://.../fhir/ValueSet/drp-glycemia-measurement-timing",
  "version": "1.0.0",
  "name": "DRPGlycemiaMeasurementTimingVS",
  "title": "DRP - Glycemia measurement timing",
  "status": "active",
  "experimental": false,
  "date": "2025-12-12",
  "publisher": "Digital Referral Prescription",
  "description": "Hybrid ValueSet indicating when the caregiver must measure the patient's blood glucose (glucometer). Uses SNOMED CT where suitable and local codes otherwise.",
  "compose": {
    "include": [
      {
        "system": "http://snomed.info/sct",
        "concept": [
          {
            "code": "271062006",
            "display": "Fasting blood glucose measurement (procedure)",
            "designation": [
              { "language": "fr", "value": "Glycémie à jeun altérée" },
              { "language": "nl", "value": "Verstoorde nuchtere glycemie" }
            ]
          }
        ]
      },
      {
        "system": "https://.../fhir/CodeSystem/drp-glycemia-measurement-timing-local",
        "concept": [
          {
            "code": "for-insulin-administration",
            "display": "For insulin administration",
            "designation": [
              { "language": "fr", "value": "Lors l'administration d'insuline" },
              { "language": "nl", "value": "Voor insulinetoediening" }
            ]
          },
          {
            "code": "for-medication-administration",
            "display": "For medication administration",
            "designation": [
              { "language": "fr", "value": "Lors de l'administration de médicaments" },
              { "language": "nl", "value": "Voor medicatietoediening" }
            ]
          },
          {
            "code": "glycemic-day-profile",
            "display": "Glycemic day profile",
            "designation": [
              { "language": "fr", "value": "Profil glycémique journalier" },
              { "language": "nl", "value": "Dagprofiel van de glycemie" }
            ]
          }
        ]
      }
    ]
  }
}

Example 3 – Type of Parameters

Prescription Type : Taking Parameters
Intent : Identifies which parameter must be measured

 {
  "resourceType": "ValueSet",
  "id": "drp-parameter-type",
  "url": "https://.../fhir/ValueSet/drp-parameter-type",
  "version": "1.0.0",
  "name": "DRPParameterTypeVS",
  "title": "DRP - Parameter type",
  "status": "active",
  "experimental": false,
  "date": "2025-12-12",
  "publisher": "Digital Referral Prescription",
  "description": "Hybrid ValueSet listing parameter types that can be requested in a prescription for vital signs/parameters monitoring. SNOMED CT where applicable + local code for 'Other'.",
  "compose": {
    "include": [
      {
        "system": "http://snomed.info/sct",
        "concept": [
          {
            "code": "75367002",
            "display": "Blood pressure",
            "designation": [
              { "language": "fr", "value": "Pression artérielle" },
              { "language": "nl", "value": "Bloeddruk" }
            ]
          },
          {
            "code": "163033001",
            "display": "Lying blood pressure",
            "designation": [
              { "language": "fr", "value": "Pression artérielle allongée" },
              { "language": "nl", "value": "Liggende bloeddruk" }
            ]
          },
          {
            "code": "163034007",
            "display": "Standing blood pressure",
            "designation": [
              { "language": "fr", "value": "Pression artérielle debout" },
              { "language": "nl", "value": "Staande bloeddruk" }
            ]
          },
          {
            "code": "78564009",
            "display": "Pulse rate",
            "designation": [
              { "language": "fr", "value": "Pouls" },
              { "language": "nl", "value": "Pols" }
            ]
          },
          {
            "code": "431314004",
            "display": "Peripheral oxygen saturation",
            "designation": [
              { "language": "fr", "value": "Saturation en oxygène périphérique" },
              { "language": "nl", "value": "Perifere zuurstofsaturatie" }
            ]
          },
          {
            "code": "415882003",
            "display": "Axillary temperature",
            "designation": [
              { "language": "fr", "value": "Température axillaire" },
              { "language": "nl", "value": "Okseltemperatuur" }
            ]
          },
          {
            "code": "86290005",
            "display": "Respiratory rate",
            "designation": [
              { "language": "fr", "value": "Fréquence respiratoire" },
              { "language": "nl", "value": "Ademhalingsfrequentie" }
            ]
          },
          {
            "code": "162098000",
            "display": "Frequency of defecation",
            "designation": [
              { "language": "fr", "value": "Fréquence de défécation" },
              { "language": "nl", "value": "Frequentie van ontlasting" }
            ]
          },
          {
            "code": "27113001",
            "display": "Body weight",
            "designation": [
              { "language": "fr", "value": "Poids corporel" },
              { "language": "nl", "value": "Lichaamsgewicht" }
            ]
          },
          {
            "code": "251977001",
            "display": "Single voided urinary volume",
            "designation": [
              { "language": "fr", "value": "Volume d'urine produit" },
              { "language": "nl", "value": "Geproduceerd urinevolume" }
            ]
          },
          {
            "code": "225908003",
            "display": "Pain score",
            "designation": [
              { "language": "fr", "value": "Score de douleur" },
              { "language": "nl", "value": "Pijnscore" }
            ]
          },
          {
            "code": "364632003",
            "display": "Pain character",
            "designation": [
              { "language": "fr", "value": "Caractère de la douleur" },
              { "language": "nl", "value": "Pijnkarakter" }
            ]
          },
          {
            "code": "364689004",
            "display": "Stool observable",
            "designation": [
              { "language": "fr", "value": "Aspect des selles" },
              { "language": "nl", "value": "Waarneembaarheid van de ontlasting" }
            ]
          }
        ]
      },
      {
        "system": "https://.../fhir/CodeSystem/drp-parameter-type-local",
        "concept": [
          {
            "code": "other-parameter-type",
            "display": "Other parameter type",
            "designation": [
              { "language": "fr", "value": "Autre type de paramètre" },
              { "language": "nl", "value": "Ander parametertype" }
            ]
          }
        ]
      }
    ]
  }
}

Proposal

Avoid a single global ValueSet for ServiceRequest.orderDetail.
Provide intention- and context-specific ValueSets.
Ensure that, for any given prescription, an integrator can retrieve the exact list of allowed values for the field.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions