Skip to content

Instantly share code, notes, and snippets.

@niquola
Last active March 19, 2026 15:23
Show Gist options
  • Select an option

  • Save niquola/30936ff2a8180217cf78f72e3044d468 to your computer and use it in GitHub Desktop.

Select an option

Save niquola/30936ff2a8180217cf78f72e3044d468 to your computer and use it in GitHub Desktop.
FHIR Additional Resources: Knowledge Graph vs Web Search Evaluation

FHIR Additional Resources: Comprehensive Report

1. What Are Additional Resources?

Additional Resources is a formal extensibility mechanism introduced in FHIR R6 that allows new resource types to be defined outside the core FHIR specification while still functioning as first-class FHIR resources. They are defined in Implementation Guides (called "Incubator IGs"), published on their own release cycles, and are expected to eventually migrate back into the core specification once stable.

The mechanism exists because R6 is the first fully normative FHIR release — once published, no breaking changes are allowed. Resources that are still immature (FMM 0-2) cannot be frozen normatively, so they need an alternative development pathway.

"Our market feedback is very strong that further change to the FHIR resources is getting very expensive, and one of the few incentives for the market to move to R6 is stability." — Grahame Grieve, FMG communication to committees (Aug 2025)

2. Formal Rules

2.1 Registration and Approval

From build.fhir.org/resource.html#additional:

  • Additional Resources SHALL be registered with HL7
  • Unapproved resources SHALL NOT be used
  • Registered resources are given an official name by HL7
  • All approved resources SHALL have a publicly available definition using a StructureDefinition published as part of an ImplementationGuide at the canonical URL
  • Definitions are reviewed for quality by HL7 prior to approval
  • Proposals are submitted via the Zulip channel #Additional-Resource-Proposals
  • HL7 maintains an approved list in the IG Registry with a functional listing at a GitHub endpoint containing additional-resources.json

2.2 StructureDefinition Requirements

From build.fhir.org/structuredefinition.html (notes section):

Field Requirement
Canonical URL Must be outside http://hl7.org/fhir namespace
fhirVersion SHALL be 6.0.0 or a subsequent published version
kind SHALL be resource
abstract SHALL be false
type SHALL match the canonical URL exactly
baseDefinition SHALL reference Resource or DomainResource
derivation SHALL be specialization
Root element path SHALL be the tail of the canonical URL
Root element name SHOULD be the HL7-assigned name

Additional resources MAY use the structuredefinition-implements extension to declare adherence to CanonicalResource or MetadataResource interfaces.

Compartments are defined using the (yet to be published) extension http://hl7.org/fhir/StructureDefinition/additional-resource-compartment.

2.3 Serialization

JSON

Additional resources carry an extra property resourceDefinition alongside resourceType:

{
  "resourceType": "ViewDefinition",
  "resourceDefinition": "http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition|2.0.0-pre",
  "id": "a-valid-id"
}

The resourceDefinition property:

  • Is a versioned canonical reference to the StructureDefinition
  • Is a format-level feature (like resourceType itself — not in any structural definition)
  • SHALL NOT be present if the resourceType is one defined in the core specification

XML

Similarly represented in XML with namespace and definition references.

2.4 CapabilityStatement Integration

From the R6 spec:

  • CapabilityStatement.rest.resource.type contains the resource type name from the HL7 registry
  • CapabilityStatement.rest.resource.definition contains a version-specific reference to the definition
  • The definition element SHALL NOT be present for core resources
  • Search parameters for additional resources are exposed through CapabilityStatement like any other resource
  • When an additional resource migrates to core, search parameter canonical URLs do not change (versions might)

3. Migration Process

3.1 Core to Additional (R5 -> R6)

The process decided by FMG:

  1. Work groups decide which IG hosts their resources (existing or new)
  2. If new IG needed, file an IG proposal with HL7
  3. Work groups copy resource definitions into their incubator IG
  4. Grahame Grieve removes resources from the core build (to avoid git conflicts)
  5. References to moved resources in core become extensions
  6. Core spec text can link to additional resources as "work in progress" but comparison text should move to the incubator IG

"I will yank them because [of] the super high likelihood of git conflicts." — Grahame Grieve

"Your IG will behave like a normal IG that happens to contain additional resources." — Lloyd McKenzie

3.2 Additional to Core (future R6.1? R7?)

  1. The responsible WG/WGs request moving into core
  2. FMG approves (criteria TBD)
  3. Resource is added in the next FHIR ballot cycle
  4. Published with the next milestone release
  5. The original additional resource definition is deprecated and eventually removed
  6. Post-migration, resourceDefinition may remain in instances but SHOULD NOT be added; if present, the version SHALL be correct

4. FMG Maturity Assessment and Recommendations

FMG performed a systematic analysis of resource maturity using:

  • FMM (FHIR Maturity Model) levels
  • Simplifier profiling/usage numbers (from Ewout Kramer / Ward Weistra)
  • Git commit analysis across R2-R6
  • Jira ticket activity
  • Example/extension reference counts

Published at fhir.org/maturity/evaluation.html.

Resources Recommended for Additional Resources Track

Category 1 — Recommended to move:

Group WG Resources
Inventory OO+PHX FormularyItem, InventoryItem, InventoryReport
PA Development PA PersonalRelationship, EncounterHistory, InsuranceProduct
OO Development OO DeviceDispense, BiologicallyDerivedProductDispense, Transport, DeviceAssociation, DeviceUsage
PC Development #1 PC ConditionDefinition
Permission SEC Permission

Category 2 — Committee should consider:

Group WG Resources
Medication Definition BRR MedicinalProductDefinition, PackagedProductDefinition, AdministrableProductDefinition, ManufacturedItemDefinition, Ingredient, ClinicalUseDefinition, RegulatedAuthorization, SubstanceDefinition
Detailed Observation CG+II GenomicStudy, MolecularDefinition, MolecularSequence, ImagingSelection
Testing FHIR-I TestPlan, TestReport
Enrollment FM EnrollmentRequest, EnrollmentResponse
PC Development 2 PC ClinicalAssessment, Linkage
Evidence CDS ArtifactAssessment, Citation, Evidence, EvidenceVariable

Category 3 — Stay in core: ResearchStudy, ResearchSubject, EventDefinition

Category 4 — FMM 3+ resources: Stay by default (includes CarePlan, MedicationRequest, etc.)

Removed entirely (not additional resources): SubstanceNucleicAcid, SubstancePolymer, SubstanceProtein, SubstanceReferenceInformation, SubstanceSourceMaterial (FMM 0, content moved into other resources or extensions by BRR WG decision)

5. Known Incubator IGs

Repository WG Description Key Resources
HL7/fhir-testing-ig FHIR-I First example IG; testing framework TestScript, TestPlan, TestReport
HL7/api-incubator-ig FHIR-I API/infrastructure features StructureMap/FML, others
HL7/admin-incubator PA Patient Admin resources PersonalRelationship, EncounterHistory, InsuranceProduct
HL7/oo-incubator OO Supply, dispense, transport DeviceDispense, BiologicallyDerivedProductDispense, Transport, InventoryItem, etc.
HL7/immunization-incubator PHX Immunization resources ImmunizationEvaluation, ImmunizationRecommendation
HL7/ebm-incubator CDS Evidence-based medicine Citation, Evidence, EvidenceVariable, ArtifactAssessment
HL7/cg-incubator CG Clinical Genomics GenomicStudy, MolecularDefinition
HL7/data-access-policies SEC Access control policies Permission
HL7/sample-incubator-ig Template/skeleton for new incubator IGs

6. Open Issues and Community Concerns

6.1 Naming Controversy

The community debated whether "Additional Resources" implies second-class status:

"Additional Resources screams secondary and less important to me. Graham said this was an act of love, to enable resources to be nurtured and grow." — David Barwin

Alternative names proposed: "Maturing Resources", "Incubating Resources", "Changeable Resources", "Emerging Resources". The term "Incubator" was adopted for the IGs themselves (e.g., "OO FHIR Incubator"), while the formal spec term remains "Additional Resources".

6.2 Reference Breaking Changes

A critical unsolved problem: when a resource moves from core to additional, core resources can no longer declare it as a reference target.

"Core resources can't declare additional resources as allowed targets — even if they might be legitimate targets — because core doesn't know the additional resources exist." — Lloyd McKenzie

Examples:

  • Coverage (core) referenced InsurancePlan (now additional)
  • DeviceDefinition (core) referenced ChargeItemDefinition (now additional)
  • SubstanceDefinition.informationSource referenced Citation (now additional) — resolved by converting to an extension

6.3 Consent vs Permission Split

Moving Permission to additional resources while keeping Consent in core raised GDPR-related concerns. In EU contexts, consent is only one of six legal bases for data processing (GDPR Article 6). The risk is implementers stretching Consent to cover all permission scenarios because Permission is "additional" and less visible.

Resolution approach: Consent resource description should explicitly point to Permission and clarify scope boundaries.

6.4 Tooling Gaps

SUSHI limitations:

  • SUSHI auto-lists resources in IG JSON incorrectly for additional resources
  • Workaround: resources: Bundle/id: omit in sushi-config.yaml
  • SUSHI requires snapshots for creating instances; additional resource StructureDefinitions from core don't include snapshots
  • Workaround: use build output XML (which includes snapshot) as input
  • FSH support for authoring additional resource definitions is limited but may work for simple cases

IG Publisher: Works when resources are placed in input/resources folder following the pattern established by fhir-testing-ig. Search parameter bundles need special handling.

6.5 Cross-IG Dependencies

Concern raised about additional resource IGs depending on each other (e.g., Citation referenced by other additional resources). FMG decision: no single mega-IG for all additional resources, to avoid lifecycle coupling. But a single registry/list will exist to help discoverability.

6.6 Temporary Unavailability

Some resources that moved out of core are temporarily unavailable until work groups get their incubator IG CI-builds running:

"Until the work group gets the CI-build of their 'work in progress' IG up and running, they may be temporarily unavailable." — Lloyd McKenzie (Jan 2026)

7. Impact on Implementers

What Changes for R5 -> R6 Migration

  1. Resources that moved to additional status disappear from the core spec
  2. References to those resources from core elements become extensions in the incubator IGs
  3. JSON/XML instances of additional resources need the resourceDefinition property
  4. CapabilityStatements need definition references for additional resources
  5. Search parameters move with the resources; canonical URLs stay the same
  6. Operations, value sets, and code systems move with their resources

What Stays the Same

  • Additional resources are still FHIR resources — same REST API, same search, same profiling
  • "The process of defining a resource isn't any different when it's an additional resource" (FMG)
  • Profiling works the same: "Once defined, additional resources are profiled like any other resource" (spec)

Sources

FHIR Specification

HL7 Confluence

Community Discussions (chat.fhir.org)

Other

FHIR Knowledge Graph

  • ParadeDB database: 2939 canonical concepts, 5785 relationships, 226 spec pages (FHIR R6 + SMART App Launch)

FHIR Additional Resources: Knowledge Graph Evaluation Report

Question

"What are FHIR Additional Resources?"

Method

  1. Web search — general research using web search and page fetching
  2. FHIR Knowledge Graph — queries against ParadeDB (2939 concepts, 5785 relationships, 226 spec pages)

What Web Search Provided

  • High-level explanation: additional resources are resource types defined outside core FHIR spec
  • Strategic context: R6 normative strategy requires all core content to be Normative; less mature content moves out
  • List of ~27 resources moved to incubator IGs (ChargeItem, Citation, TestScript, etc.)
  • Candidates for future migration (Invoice, InsuranceProduct, InsurancePlan)
  • Governance process: must be registered and approved by HL7

Unique Information from Knowledge Graph

1. Complete StructureDefinition Rules

The KG contained the full set of SHALL/SHOULD requirements for defining an additional resource, extracted from the structuredefinition-notes spec page:

  • Canonical URL must be outside http://hl7.org/fhir namespace
  • fhirVersion SHALL be 6.0.0 or later
  • kind SHALL be resource
  • abstract SHALL be false
  • type SHALL match the canonical URL exactly
  • baseDefinition SHALL reference Resource or DomainResource
  • derivation SHALL be specialization
  • Root element path SHALL be the tail of the canonical URL

This level of technical precision was not available from web search results.

2. JSON/XML Serialization Mechanism (resourceDefinition property)

The KG revealed the concrete serialization detail: additional resources in JSON carry a resourceDefinition property alongside resourceType. This property holds a versioned canonical reference to the StructureDefinition and is not present for core resources. Example from spec:

{
  "resourceType": "ViewDefinition",
  "resourceDefinition": "http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition|2.0.0-pre",
  "id": "a-valid-id"
}

This is a format-level feature not defined in any structural definition (similar to resourceType itself).

3. Concrete Example: ViewDefinition

The KG provided a specific, real-world example — ViewDefinition from the SQL-on-FHIR IG — with its exact canonical URL. Web search only mentioned the concept abstractly.

4. Extension for Interface Declaration

Additional resources MAY declare adherence to CanonicalResource or MetadataResource interfaces via the structuredefinition-implements extension. This mechanism was not mentioned in web search results.

5. Extension for Compartment Definitions

Compartments for additional resources are defined using http://hl7.org/fhir/StructureDefinition/additional-resource-compartment (noted as "yet to be published"). Web search did not surface this.

6. Relationship Graph

The KG provided structured relationships showing how Additional Resources connect to other FHIR concepts:

  • uses → CapabilityStatement (search support exposed through CS)
  • uses → resourceDefinition (identification via canonical reference)
  • has-subtype → Resource (they are resources, but with extra typing context)
  • defined by → 6.0.0-ballot3/ballot4 (introduced across R6 ballot cycles)

What Web Search Provided That KG Did Not

  • The full list of ~27 resources moved to incubator IGs
  • The strategic/political context (why R6 is doing this — slowing release cycles, normative purity)
  • The migration path from additional → core (FMG approval, ballot cycle)
  • Links to HL7 Confluence planning pages

Conclusion

Dimension Web Search Knowledge Graph
Strategic context (why) Strong Weak
Governance process Moderate Weak
List of affected resources Strong Weak
Technical definition rules Absent Strong
Serialization details Absent Strong
Concrete examples Absent Strong
Extension mechanisms Absent Strong
Concept relationships Absent Strong

The KG excels at technical implementation details extracted directly from normative spec text — the kind of information a developer needs to actually build support for additional resources. Web search excels at strategic narrative — understanding why this exists and what's happening organizationally. The two sources are complementary.

FHIR Additional Resources: Source Comparison Report

Question

"What are FHIR Additional Resources?" — evaluated across three information sources to determine which provides the most useful and unique information.

Sources Tested

  1. FHIR Knowledge Graph (KG) — ParadeDB database with 2939 canonical concepts, 5785 relationships, and 226 full-text R6 spec pages
  2. FHIR Chat (chat.fhir.org) — Archive of HL7 FHIR Zulip with community discussions from spec editors, WG chairs, and implementers
  3. Web Search — General web search + page fetching (Google, build.fhir.org, Health Samurai, GitHub, Confluence)

Source-by-Source Analysis

Chat (chat.fhir.org) — Most Valuable Overall

The community chat provided the richest, most unique content for this topic. Key unique contributions:

Governance and Decision-Making Process

  • Full text of the FMG communication to committees with detailed recommendations per resource group
  • The maturity scoring methodology: FMM levels + Simplifier profiling numbers + git commit analysis + Jira ticket activity + example/extension reference counts
  • Specific committee decisions (e.g., BRR WG removing all FMM 0 substance resources entirely, Security WG agreeing to move Permission out)

Concrete Resource Lists with Rationale

  • Exact categorization: Category 1 (recommended to move), Category 2 (committee should consider), Category 3 (stay), Category 4 (FMM 3+ default stay)
  • Which resources go into which incubator IG, and who is responsible
  • The naming discussions revealing IG organization philosophy

Unsolved Problems

  • Reference breaking changes: core resources cannot declare additional resources as allowed targets (InsurancePlan referenced by Coverage, ChargeItemDefinition referenced by DeviceDefinition)
  • Cross-IG dependency risks when additional resource IGs reference each other
  • Temporary unavailability of moved resources while WGs set up CI-builds (confirmed Jan 2026)

Political and Social Context

  • The naming debate: "Additional Resources" perceived as second-class; alternatives proposed ("Maturing", "Incubating", "Emerging", "Changeable"); "Incubator" adopted for IGs
  • The Consent/Permission split controversy: GDPR implications of Permission being additional while Consent stays core, risk of implementers stretching Consent to cover all permission use cases
  • David Barwin: "Additional Resources screams secondary and less important to me. Graham said this was an act of love."

Tooling Gaps

  • SUSHI cannot properly handle additional resources: auto-lists search parameter bundles incorrectly; workaround: resources: Bundle/id: omit in sushi-config.yaml
  • SUSHI requires snapshots for instances but additional resource StructureDefinitions lack them; workaround: use post-build XML output as input
  • FSH authoring of additional resource definitions not fully supported
  • IG Publisher works with input/resources folder pattern from fhir-testing-ig

Migration Process Details

  • Grahame handles removal from core build (git conflict avoidance)
  • WGs responsible for setting up destination IGs
  • References to moved resources become extensions
  • Josh Mandel's git-filter tutorial for preserving history during migration

This information is not available anywhere else — it comes from real-time discussions between the people building the specification.

Knowledge Graph — Most Valuable for Technical Precision

The KG excels at providing exact normative requirements extracted from spec pages. Key unique contributions:

Complete StructureDefinition Rules The full set of 8 SHALL/SHOULD requirements for defining an additional resource, from the structuredefinition-notes spec page:

  • Canonical URL outside http://hl7.org/fhir
  • fhirVersion SHALL be 6.0.0+
  • kind SHALL be resource, abstract SHALL be false
  • type SHALL match canonical URL, derivation SHALL be specialization
  • baseDefinition SHALL reference Resource or DomainResource
  • Root element path SHALL be tail of canonical URL

No other source provided this level of precision.

JSON/XML Serialization Mechanism The resourceDefinition property: a versioned canonical reference added alongside resourceType for non-core resources. Concrete example with ViewDefinition from SQL-on-FHIR IG. The property is a format-level feature not defined in any structural definition.

Extension Mechanisms

  • structuredefinition-implements for declaring CanonicalResource/MetadataResource adherence
  • additional-resource-compartment for compartment definitions (noted as yet to be published)

CapabilityStatement Integration Rules

  • rest.resource.type uses HL7 registry name
  • rest.resource.definition requires version-specific reference
  • definition SHALL NOT be present for core resources

Structured Concept Relationships Machine-queryable graph: Additional Resources → uses → CapabilityStatement, uses → resourceDefinition, has-subtype → Resource, defined-by → 6.0.0-ballot3/ballot4.

The KG answers the question "how do I implement this?" better than any other source.

Web Search — Least Valuable for This Topic

Web search was the weakest source, primarily useful as an entry point.

What it provided:

  • Health Samurai overview article (good general introduction)
  • Links to Confluence pages (though Confluence requires auth and cannot be fetched)
  • Discovery of GitHub incubator repositories via gh api search
  • The build.fhir.org resource.html page (also available in KG)

Why it was weak:

  • Additional Resources is too new and niche for substantial web coverage
  • Most substantive content is either behind Confluence auth or in Zulip (not indexed by search engines)
  • Blog posts and articles repeat the same high-level summary without technical depth
  • The spec itself (accessible via WebFetch) is already contained in the KG in parsed form

Web search's main value was discoverability — finding the right URLs and confirming that incubator repos exist on GitHub.

Comparative Matrix

Information Dimension Chat KG Web Search
Governance process & decisions Best Weak Moderate
Political context & debates Best Absent Absent
Open issues & unsolved problems Best Absent Absent
Tooling gaps & workarounds Best Absent Absent
Migration process details Best Absent Moderate
Technical StructureDefinition rules Moderate Best Weak
Serialization format details Absent Best Absent
Extension mechanisms Absent Best Absent
CapabilityStatement integration Absent Best Absent
Concept relationships (graph) Absent Best Absent
General overview / introduction Weak Moderate Best
Resource/repo discoverability Good Absent Best

Key Findings

1. Chat + KG together cover ~95% of needed information

Chat provides the "why", "who", "when", and "what problems remain". KG provides the "how exactly". Web search adds marginal value on top.

2. Chat is irreplaceable for governance topics

For any FHIR topic that involves process, committee decisions, or community consensus, chat.fhir.org is the primary source of truth. These discussions are not published elsewhere — no blog post or spec page captures the full FMG recommendation email, the tooling workarounds, or the naming debates.

3. KG is irreplaceable for implementation questions

A developer asking "how do I define an additional resource?" gets a precise, complete answer from KG in one query. Getting the same from chat requires reading through 45+ messages across multiple threads. Web search returns the spec page but without the parsed, queryable structure.

4. Web search has a cold-start advantage

For someone who has never heard of additional resources, web search provides the best entry point (overview articles, spec links). But it quickly plateaus — the depth of information available via search engines is shallow for this topic.

5. Source freshness matters

Chat captures information as it happens (the latest message in our dataset is Jan 2026). KG reflects the R6 ballot4 spec state. Web articles often lag by months. For a rapidly evolving topic like additional resources, chat is the most current source.

Recommendation

For comprehensive FHIR topic research, the optimal workflow is:

  1. Start with KG — get the technical definition, rules, and concept relationships
  2. Search chat — understand the context, open issues, community concerns, and practical guidance
  3. Use web search only for discovering external resources (GitHub repos, Confluence pages, blog posts) not captured by the other two sources
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment