{
  "resourceType": "StructureDefinition",
  "id": "test-digidot-RecallServiceRequest-no",
  "url": "http://novari.no/fhir/digidot/StructureDefinition/test-digidot-RecallServiceRequest-no",
  "version": "0.1.0-test",
  "name": "TestDigidotRecallServiceRequestNo",
  "title": "TEST DigiDot Recall ServiceRequest (NO)",
  "status": "draft",
  "date": "2026-05-28",
  "publisher": "Novari AS - DigiDOT",
  "description": "TEST comparison draft. Not for production use. DigiDOT profile for a regular dental recall need or next due window. This profile represents the plan/request layer. Proposed or booked time slots are represented separately with no-basis-Appointment using Appointment.basedOn, and the actual contact is represented with Encounter.",
  "purpose": "Use this profile for the recall need or next due timing. Scheduling remains Appointment, the actual visit remains Encounter, and a fixed recall cadence can be expressed with native FHIR occurrenceTiming.repeat.",
  "fhirVersion": "4.0.1",
  "kind": "resource",
  "abstract": false,
  "type": "ServiceRequest",
  "baseDefinition": "http://novari.no/fhir/digidot/StructureDefinition/test-digidot-ServiceRequest-no",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "ServiceRequest",
        "path": "ServiceRequest",
        "constraint": [
          {
            "key": "recall-due-window",
            "severity": "error",
            "human": "A recall ServiceRequest must include occurrence[x] to describe the next due date or due window.",
            "expression": "occurrence.exists()"
          }
        ]
      },
      {
        "id": "ServiceRequest.status",
        "path": "ServiceRequest.status",
        "short": "Lifecycle status of the recall need.",
        "definition": "Use active while the recall still needs to be fulfilled, completed when the recall contact has happened or the cycle is closed, revoked when the recall is cancelled, and on-hold when it is temporarily paused."
      },
      {
        "id": "ServiceRequest.intent",
        "path": "ServiceRequest.intent",
        "short": "Recall is represented as a plan.",
        "fixedCode": "plan"
      },
      {
        "id": "ServiceRequest.category",
        "path": "ServiceRequest.category",
        "short": "Recall category marker.",
        "min": 1,
        "max": "1",
        "patternCodeableConcept": {
          "coding": [
            {
              "system": "http://novari.no/fhir/digidot/CodeSystem/test-digidot-service-request-category",
              "code": "dental-recall"
            }
          ]
        },
        "binding": {
          "strength": "required",
          "valueSet": "http://novari.no/fhir/digidot/ValueSet/test-digidot-service-request-category"
        }
      },
      {
        "id": "ServiceRequest.code",
        "path": "ServiceRequest.code",
        "short": "Recall examination or service being planned.",
        "definition": "Use an agreed SNOMED CT concept for the recall examination or service. The example uses 185349003 |Encounter for check up (procedure)| until DigiDOT terminology work agrees a more precise dental recall concept.",
        "patternCodeableConcept": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "185349003"
            }
          ]
        }
      },
      {
        "id": "ServiceRequest.occurrence[x]",
        "path": "ServiceRequest.occurrence[x]",
        "short": "Next recall timing, due date or due window.",
        "definition": "Use occurrenceTiming when a fixed recall cadence should be exchanged, for example repeat.frequency = 1, repeat.period = 12 and repeat.periodUnit = mo for 12-month recall. Use occurrencePeriod when only the next due window is exchanged. Appointment remains the scheduling resource for proposed or booked times.",
        "min": 1,
        "type": [
          {
            "code": "dateTime"
          },
          {
            "code": "Period"
          },
          {
            "code": "Timing"
          }
        ]
      }
    ]
  }
}