Tiro.health Implementation Guide
0.1.0 - ci-build
Tiro.health Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Atticus uses FHIR Provenance resources to track the origin and lifecycle of every field populated in a QuestionnaireResponse. This enables full auditability — whether a value was entered manually, extracted by AI, computed by a FHIRPath expression, or loaded from a preset.
Each populated field receives its own FormProvenance resource. These are returned as repeated parameter[name="provenance"] entries alongside the QuestionnaireResponse in the $populate response.
Each Provenance targets the enclosing QuestionnaireResponse and identifies the specific populated item via the standard targetElement extension:
Provenance.target[0].reference = "#" ← the QuestionnaireResponse
Provenance.target[0].extension[targetElement].valueUri ← QuestionnaireResponse.item.id (a UUID)
Note: targetElement carries the item's id (a server-assigned UUID), not its linkId.
Every Provenance carries at least one FormActivity code in activity.coding plus an optional ISO 21089 lifecycle code. For activities that have a specific child code, the backend also includes the parent code (e.g. definition + data-import).
| Code | Description |
|---|---|
user |
Manually entered by the clinician |
manual |
Manual input without system assistance |
| Code | Description |
|---|---|
static |
Preconfigured value set without active user choice |
preset |
Loaded from a saved preset configuration |
initial-value |
Populated by Questionnaire.item.initial |
| Code | Description |
|---|---|
calculation |
Computed from a calculatedExpression (FHIRPath) |
| Code | Description |
|---|---|
ai |
Generic AI population |
ai-clipboard |
AI extraction from a clinical document (contextual-populate) |
speech-population |
Speech-to-text population |
| Code | Description |
|---|---|
data-import |
Import from FHIR resources or external data sources |
initial-expression |
Evaluated from Questionnaire.item.initialExpression — sent alongside data-import |
definition |
Matched via Questionnaire.item.definition to a FHIR resource — sent alongside data-import |
| Code | Description |
|---|---|
originate |
Initial creation (used for all population activities) |
amend |
Modification of existing data |
merge |
Combining data from multiple sources |
All automated Atticus engines use provenance-participant-type#assembler as the agent type and a Device resource as agent.who. Source document authors (for AI clipboard) use provenance-participant-type#author.
| Device | Display | Used for |
|---|---|---|
Device/atticus-fhirpath-engine |
Atticus FHIRPath Engine | initialExpression, calculatedExpression |
Device/atticus-population-engine |
Atticus Population Engine | Initial values, repopulation, definition import |
Device/atticus-preset-engine |
Atticus Preset Engine | Preset loading |
Device/atticus-ai-marking-engine |
Atticus AI Marking Engine | HTML marking (labeling) |
Device/atticus-ai-population-engine |
Atticus AI Population Engine | AI clipboard extraction |
Note: The backend uses integer Device IDs
Device/1–Device/5; the IG uses descriptive IDs for readability.
The legacy AgentTypes CodeSystem (fhirpath-engine, population-engine, etc.) is retired. Existing persisted Provenance resources may still reference those codes.
For AI-populated fields, the model's reasoning can be recorded in two places:
activity.text: Plain-string reasoning. This is what the backend currently populates.extension[why] (ProvenanceWhy): Markdown reasoning — a pre-adoption of the R6 Provenance.why element. This is the intended location going forward.When contextual-populate extracts a value from a clinical document, the Provenance includes an entity pointing to the source DocumentReference. The html-element-id extension on entity.what carries the IDs of the labeled HTML spans that contained the extracted text — enabling the UI to highlight the source passage:
Provenance.entity[0].role = "source"
Provenance.entity[0].what.reference = "DocumentReference/{id}"
Provenance.entity[0].what.extension[html-element-id][0].valueString = "label-001"
Provenance.entity[0].what.extension[html-element-id][1].valueString = "label-002"
The $populate response is a Parameters resource with one entry per populated field:
Parameters
├─ parameter[name="response"].resource → QuestionnaireResponse
├─ parameter[name="issues"].resource → OperationOutcome (optional)
└─ parameter[name="provenance"].resource → FormProvenance ← repeated, one per field
└─ parameter[name="provenance"].resource → FormProvenance
...
contextual-populate mode accepts clinical documents as context and drives the full AI pipeline:
context[name="clinical-artifacts"] with one or more DocumentReference resources (HTML or PDF attachments).FormProvenance with:
activity.coding = ai-clipboard + data-importagent.who = Device/atticus-ai-population-engineentity.what.reference = the source DocumentReferenceentity.what.extension[html-element-id] = span IDs for source highlightingactivity.text (and/or extension[why]) = the model's reasoning{
"resourceType" : "Provenance",
"id" : "prov-001",
"meta" : {
"profile" : [
🔗 "http://fhir.tiro.health/StructureDefinition/form-provenance"
]
},
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Provenance prov-001</b></p><a name=\"prov-001\"> </a><a name=\"hcprov-001\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\"/><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-form-provenance.html\">Form Provenance</a></p></div><p>Provenance for <a href=\"QuestionnaireResponse-qr-123.html\">Response to Questionnaire 'http://fhir.tiro.health/Questionnaire/example' about 'Unspecified Subject'</a></p><p>Summary</p><table class=\"grid\"><tr><td>Recorded</td><td>2025-10-29 10:30:00+0000</td></tr><tr><td>Activity</td><td><span title=\"Codes:{http://fhir.tiro.health/CodeSystem/form-activity user}, {http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle originate}\">Manually entered data by the user</span></td></tr></table><p><b>Agents</b></p><table class=\"grid\"><tr><td><b>who</b></td></tr><tr><td><a href=\"Practitioner-pract-789.html\">Practitioner Dr. Example</a></td></tr></table></div>"
},
"target" : [
{
🔗 "extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/targetElement",
"valueUri" : "item-456"
}
],
"reference" : "QuestionnaireResponse/qr-123"
}
],
"recorded" : "2025-10-29T10:30:00Z",
"activity" : {
"coding" : [
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "user",
"display" : "User input"
},
{
"system" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
"code" : "originate",
"display" : "Originate/Retain Record Lifecycle Event"
}
],
"text" : "Manually entered data by the user"
},
"agent" : [
{
"who" : {
🔗 "reference" : "Practitioner/pract-789"
}
}
]
}
{
"resourceType" : "Provenance",
"id" : "prov-002",
"meta" : {
"profile" : [
🔗 "http://fhir.tiro.health/StructureDefinition/form-provenance"
]
},
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Provenance prov-002</b></p><a name=\"prov-002\"> </a><a name=\"hcprov-002\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\"/><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-form-provenance.html\">Form Provenance</a></p></div><p>Provenance for <a href=\"QuestionnaireResponse-qr-123.html\">Response to Questionnaire 'http://fhir.tiro.health/Questionnaire/example' about 'Unspecified Subject'</a></p><p>Summary</p><table class=\"grid\"><tr><td>Recorded</td><td>2025-10-29 10:32:00+0000</td></tr><tr><td>Activity</td><td><span title=\"Codes:{http://fhir.tiro.health/CodeSystem/form-activity ai-clipboard}, {http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle originate}\">CT toont massa van 4.2cm in rechter bovenkwab met thoraxwandinvasie → cT3 (AJCC 8th)</span></td></tr></table><p><b>Agents</b></p><table class=\"grid\"><tr><td><b>Type</b></td><td><b>who</b></td></tr><tr><td><span title=\"Codes:{http://terminology.hl7.org/CodeSystem/provenance-participant-type assembler}\">Assembler</span></td><td><a href=\"Device-atticus-ai-population-engine.html\">Device: displayName = Atticus AI Population Engine</a></td></tr></table></div>"
},
"extension" : [
{
"url" : "http://fhir.tiro.health/StructureDefinition/provenance-why",
"valueMarkdown" : "The clinical note states: \"CT thorax toont een massa van 4.2cm in de rechter bovenkwab met invasie van de thoraxwand.\"\nThis indicates a tumor >4cm with chest wall invasion, corresponding to cT3 per AJCC 8th edition staging criteria."
}
],
"target" : [
{
🔗 "extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/targetElement",
"valueUri" : "item-789"
}
],
"reference" : "QuestionnaireResponse/qr-123"
}
],
"recorded" : "2025-10-29T10:32:00Z",
"activity" : {
"coding" : [
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "ai-clipboard",
"display" : "AI Clipboard"
},
{
"system" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
"code" : "originate",
"display" : "Originate/Retain Record Lifecycle Event"
}
],
"text" : "CT toont massa van 4.2cm in rechter bovenkwab met thoraxwandinvasie → cT3 (AJCC 8th)"
},
"agent" : [
{
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code" : "assembler",
"display" : "Assembler"
}
]
},
"who" : {
🔗 "reference" : "Device/atticus-ai-population-engine"
}
}
],
"entity" : [
{
"role" : "source",
"what" : {
🔗 "extension" : [
{
"url" : "http://fhir.tiro.health/StructureDefinition/html-element-id",
"valueString" : "label-001"
},
{
"url" : "http://fhir.tiro.health/StructureDefinition/html-element-id",
"valueString" : "label-002"
}
],
"reference" : "DocumentReference/doc-001",
"display" : "Referral letter from AZ Monica"
}
}
]
}
{
"resourceType" : "Provenance",
"id" : "prov-003",
"meta" : {
"profile" : [
🔗 "http://fhir.tiro.health/StructureDefinition/form-provenance"
]
},
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Provenance prov-003</b></p><a name=\"prov-003\"> </a><a name=\"hcprov-003\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\"/><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-form-provenance.html\">Form Provenance</a></p></div><p>Provenance for <a href=\"QuestionnaireResponse-qr-123.html\">Response to Questionnaire 'http://fhir.tiro.health/Questionnaire/example' about 'Unspecified Subject'</a></p><p>Summary</p><table class=\"grid\"><tr><td>Recorded</td><td>2025-10-29 10:33:00+0000</td></tr><tr><td>Activity</td><td><span title=\"Codes:{http://fhir.tiro.health/CodeSystem/form-activity calculation}, {http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle originate}\">A value computed from a FHIRPath calculatedExpression</span></td></tr></table><p><b>Agents</b></p><table class=\"grid\"><tr><td><b>Type</b></td><td><b>who</b></td></tr><tr><td><span title=\"Codes:{http://terminology.hl7.org/CodeSystem/provenance-participant-type assembler}\">Assembler</span></td><td><a href=\"Device-atticus-fhirpath-engine.html\">Device: displayName = Atticus FHIRPath Engine</a></td></tr></table></div>"
},
"target" : [
{
🔗 "extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/targetElement",
"valueUri" : "item-999"
}
],
"reference" : "QuestionnaireResponse/qr-123"
}
],
"recorded" : "2025-10-29T10:33:00Z",
"activity" : {
"coding" : [
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "calculation",
"display" : "Calculation"
},
{
"system" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
"code" : "originate",
"display" : "Originate/Retain Record Lifecycle Event"
}
],
"text" : "A value computed from a FHIRPath calculatedExpression"
},
"agent" : [
{
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code" : "assembler",
"display" : "Assembler"
}
]
},
"who" : {
🔗 "reference" : "Device/atticus-fhirpath-engine"
}
}
]
}
{
"resourceType" : "Provenance",
"id" : "prov-004",
"meta" : {
"profile" : [
🔗 "http://fhir.tiro.health/StructureDefinition/form-provenance"
]
},
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Provenance prov-004</b></p><a name=\"prov-004\"> </a><a name=\"hcprov-004\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\"/><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-form-provenance.html\">Form Provenance</a></p></div><p>Provenance for <a href=\"QuestionnaireResponse-qr-123.html\">Response to Questionnaire 'http://fhir.tiro.health/Questionnaire/example' about 'Unspecified Subject'</a></p><p>Summary</p><table class=\"grid\"><tr><td>Recorded</td><td>2025-10-29 10:34:00+0000</td></tr><tr><td>Activity</td><td><span title=\"Codes:{http://fhir.tiro.health/CodeSystem/form-activity definition}, {http://fhir.tiro.health/CodeSystem/form-activity data-import}, {http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle originate}\">Definition-based import</span></td></tr></table><p><b>Agents</b></p><table class=\"grid\"><tr><td><b>Type</b></td><td><b>who</b></td></tr><tr><td><span title=\"Codes:{http://terminology.hl7.org/CodeSystem/provenance-participant-type assembler}\">Assembler</span></td><td><a href=\"Device-atticus-population-engine.html\">Device: displayName = Atticus Population Engine</a></td></tr></table></div>"
},
"target" : [
{
🔗 "extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/targetElement",
"valueUri" : "item-444"
}
],
"reference" : "QuestionnaireResponse/qr-123"
}
],
"recorded" : "2025-10-29T10:34:00Z",
"activity" : {
"coding" : [
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "definition",
"display" : "Definition-based import"
},
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "data-import",
"display" : "Data Import"
},
{
"system" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
"code" : "originate",
"display" : "Originate/Retain Record Lifecycle Event"
}
]
},
"agent" : [
{
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code" : "assembler",
"display" : "Assembler"
}
]
},
"who" : {
🔗 "reference" : "Device/atticus-population-engine"
}
}
],
"entity" : [
{
"role" : "source",
"what" : {
"reference" : "Observation/obs-789",
"display" : "Serum Creatinine Lab Result"
}
}
]
}
{
"resourceType" : "Provenance",
"id" : "prov-005",
"meta" : {
"profile" : [
🔗 "http://fhir.tiro.health/StructureDefinition/form-provenance"
]
},
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: Provenance prov-005</b></p><a name=\"prov-005\"> </a><a name=\"hcprov-005\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\"/><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-form-provenance.html\">Form Provenance</a></p></div><p>Provenance for <a href=\"QuestionnaireResponse-qr-123.html\">Response to Questionnaire 'http://fhir.tiro.health/Questionnaire/example' about 'Unspecified Subject'</a></p><p>Summary</p><table class=\"grid\"><tr><td>Recorded</td><td>2025-10-29 10:35:00+0000</td></tr><tr><td>Activity</td><td><span title=\"Codes:{http://fhir.tiro.health/CodeSystem/form-activity preset}, {http://fhir.tiro.health/CodeSystem/form-activity static}, {http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle originate}\">Preset</span></td></tr></table><p><b>Agents</b></p><table class=\"grid\"><tr><td><b>Type</b></td><td><b>who</b></td></tr><tr><td><span title=\"Codes:{http://terminology.hl7.org/CodeSystem/provenance-participant-type assembler}\">Assembler</span></td><td><a href=\"Device-atticus-preset-engine.html\">Device: displayName = Atticus Preset Engine</a></td></tr></table></div>"
},
"target" : [
{
🔗 "extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/targetElement",
"valueUri" : "item-555"
}
],
"reference" : "QuestionnaireResponse/qr-123"
}
],
"recorded" : "2025-10-29T10:35:00Z",
"activity" : {
"coding" : [
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "preset",
"display" : "Preset"
},
{
"system" : "http://fhir.tiro.health/CodeSystem/form-activity",
"code" : "static",
"display" : "Static value"
},
{
"system" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
"code" : "originate",
"display" : "Originate/Retain Record Lifecycle Event"
}
]
},
"agent" : [
{
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code" : "assembler",
"display" : "Assembler"
}
]
},
"who" : {
🔗 "reference" : "Device/atticus-preset-engine"
}
}
],
"entity" : [
{
"role" : "source",
"what" : {
"reference" : "Basic/preset-mri-protocol",
"display" : "MRI Protocol Preset"
}
}
]
}