# Specification - Dermatology Image Annotation FHIR Implementation Guide v0.1.0

* [**Table of Contents**](toc.md)
* **Specification**

## Specification

### Specification

This page provides a technical overview of the three Observation profiles defined by this IG. For formal definitions, see the [Artifacts](artifacts.md) page.

#### DermatologyImageAnnotation

The [DermatologyImageAnnotation](StructureDefinition-dermatology-image-annotation.md) profile represents a single annotation result from clinical dermatology photography. It follows the US Core Observation pattern with component slicing for structured data elements.

**Category pattern.** Each instance requires two category entries: `imaging` from the standard Observation category system, and `dermatology-annotation` from this IG's [AnnotationType](CodeSystem-annotation-type.md) CodeSystem. Category slicing uses a `#pattern` discriminator on `$this` with `rules = #open`.

**derivedFrom requirement.** Every annotation must reference its source image through `derivedFrom`, which accepts references to ImagingStudy, DocumentReference, or Media resources. This creates a traceable link from clinical finding to source evidence.

**Method binding.** The `method` element uses a required binding to [AnnotationMethods](ValueSet-annotation-methods.md), which captures how the annotation was produced (expert manual, clinician point-of-care, AI-assisted confirmed, AI-assisted corrected, or AI inference).

**Component slicing.** Components use a discriminator of type `#pattern` on path `code` with `rules = #open`, following US Core conventions. Required slices include `skinFinding` (1..*) with an extensible binding to [DermatologyFindings](ValueSet-dermatology-findings.md). Optional slices cover confidence score, segmentation mask, bounding boxes, QA review status, and inter-annotator agreement.

#### AIPrediction

The [AIPrediction](StructureDefinition-ai-prediction.md) profile represents an AI model's classification output before clinician review. It is distinct from DermatologyImageAnnotation in several ways:

**AIAST security tagging.** Every AIPrediction instance must carry `meta.security` with the `AIAST` code from `v3-ObservationValue`, per the [HL7 AI Transparency on FHIR IG](https://build.fhir.org/ig/HL7/ai-transparency/). This ensures that downstream consumers can identify AI-generated content through a standard mechanism.

**Device requirement.** The `device` element is required and must reference the Device resource that identifies the AI model, including its name, manufacturer, and version. The `performer` element SHOULD NOT be populated for pure AI inference.

**Status constraint.** The status is bound to a restricted ValueSet that excludes `final`. AI predictions remain `preliminary` until a clinician acts on them. A clinician's acceptance produces a separate DermatologyImageAnnotation with method `ai-assisted-confirmed` or `ai-assisted-corrected`.

**AI-specific components.** Required slices include `predictedFinding` (1..*) and `predictionConfidence` (1..1). Optional slices cover `heatmap` (gradient visualization URL) and `inferenceTimeMs` (model latency).

#### AnnotationSeries

The [AnnotationSeries](StructureDefinition-annotation-series.md) profile groups annotations for the same lesion over time using the `hasMember` pattern.

**hasMember pattern.** The `hasMember` element requires at least two references to DermatologyImageAnnotation resources. The series does not impose temporal ordering on the references themselves. Consumers MUST sort by the `effectiveDateTime` of referenced observations to reconstruct the correct temporal sequence.

**Change detection components.** Required slices include `changeDetected` (boolean indicating whether the classification changed between time points), `earliestDate`, and `latestDate`. An optional `changeType` slice uses a required binding to the [ChangeType](CodeSystem-change-type.md) CodeSystem for structured change classification.

**Status and performer.** The series status is fixed to `final` because it represents a computed summary. The `performer` element SHOULD NOT be populated because the series is system-generated.

