Skip to main content

Core SDK Overview

The Ignixa Core SDK is a collection of high-performance, reusable .NET libraries for building FHIR applications. These packages can be used independently of the Ignixa FHIR Server.

Package Overview

┌─────────────────────────────────────────────────────────────────────────┐
│ Feature Packages │
├─────────────────────────────────────────────────────────────────────────┤
│ Search Validation FhirFakes NarrativeGenerator SqlOnFhir │
│ FhirMappingLanguage PackageManagement Extensions.FirelySdk6│
└──────┬─────────┬──────────────┬─────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────────────────┐
│ Core Packages │
├──────────────┬──────────────────────────┬───────────────────────────────┤
│ Specification│ Serialization │ FhirPath │
│ (metadata) │ (JSON) │ (expressions) │
└──────┬───────┴────────────┬─────────────┴──────────────┬────────────────┘
│ │ │
└────────────────────┼────────────────────────────┘

┌────────────────────────────┐
│ Ignixa.Abstractions │
│ (IElement, ISourceNode) │
└────────────────────────────┘

Dependency Relationships (from .csproj files):

PackageDepends On
Abstractions(foundation - no internal deps)
SerializationAbstractions
FhirPathAbstractions
SpecificationSerialization, Abstractions
SearchFhirPath, Specification, Serialization
ValidationFhirPath, Specification, Serialization
FhirFakesSpecification, Serialization
NarrativeGeneratorAbstractions, FhirPath, Serialization
SqlOnFhirAbstractions, FhirPath, Serialization
FhirMappingLanguageAbstractions, FhirPath, Serialization
PackageManagementAbstractions
Extensions.FirelySdk6Abstractions, Serialization

Available Packages

Foundation

PackageDescription
Ignixa.AbstractionsCore interfaces (IElement, ISourceNavigator, IType)
Ignixa.SpecificationFHIR structure definitions for STU3/R4/R4B/R5/R6

Data Processing

PackageDescription
Ignixa.SerializationHigh-performance JSON serialization with typed models
Ignixa.SearchSearch parameter definitions and indexing
Ignixa.ValidationSchema-based validation engine

Advanced Features

PackageDescription
Ignixa.FhirPathCompiled FHIRPath expression engine
Ignixa.FhirMappingLanguageFHIR Mapping Language (FML) evaluator
Ignixa.NarrativeGeneratorFHIR narrative generation (HTML, Markdown, Compact)
Ignixa.SqlOnFhirSQL on FHIR v2 ViewDefinition evaluator
Ignixa.PackageManagementFHIR package loading from NPM registry

Testing & Development

PackageDescription
Ignixa.FhirFakesSynthetic FHIR data generator with clinical scenarios

Interoperability

PackageDescription
Ignixa.Extensions.FirelySdk6Bidirectional Firely SDK 6.x integration

Quick Start

# Core packages
dotnet add package Ignixa.Abstractions
dotnet add package Ignixa.Serialization
dotnet add package Ignixa.Specification

# FHIRPath evaluation
dotnet add package Ignixa.FhirPath

# Validation
dotnet add package Ignixa.Validation

# Test data generation
dotnet add package Ignixa.FhirFakes

Basic Usage

Parse FHIR JSON

using Ignixa.Serialization;
using Ignixa.Specification;

var json = """
{
"resourceType": "Patient",
"id": "123",
"name": [{ "family": "Smith", "given": ["John"] }]
}
""";

// Parse to ISourceNavigator
var sourceNode = JsonSourceNodeFactory.Parse(json);

// Navigate the structure
var resourceType = sourceNode.ResourceType; // "Patient"
var id = sourceNode["id"].Text; // "123"
var familyName = sourceNode["name"][0]["family"].Text; // "Smith"

Evaluate FHIRPath

using Ignixa.FhirPath.Evaluation;
using Ignixa.Specification;

var schemaProvider = FhirVersion.R4.GetSchemaProvider();
var element = sourceNode.ToElement(schemaProvider);

// Simple path
var names = element.Select("name.given");

// Boolean check
var isActive = element.IsTrue("active = true");

// Scalar value
var birthDate = element.Scalar("birthDate")?.ToString();

Validate Resources

using Ignixa.Validation;
using Ignixa.Validation.Schema;

var schemaProvider = FhirVersion.R4.GetSchemaProvider();
var schemaResolver = new StructureDefinitionSchemaResolver(schemaProvider);
var cachedResolver = new CachedValidationSchemaResolver(schemaResolver);

// Get validation schema
var schema = cachedResolver.GetSchema("Patient");

// Validate
var element = sourceNode.ToElement(schemaProvider);
var settings = new ValidationSettings { Depth = ValidationDepth.Spec };
var state = new ValidationState();
var result = schema.Validate(element, settings, state);

if (!result.IsValid)
{
foreach (var issue in result.Issues)
{
Console.WriteLine($"{issue.Severity}: {issue.Message}");
}
}

Generate Test Data

using Ignixa.FhirFakes.Scenarios;
using Ignixa.FhirFakes.Scenarios.Predefined;
using Ignixa.Specification;

var schemaProvider = FhirVersion.R4.GetSchemaProvider();

// Use predefined clinical scenarios
var diabeticPatient = schemaProvider.GetDiabeticPatient(age: 52);
var bundle = diabeticPatient.ToBundle();

// Or build custom scenarios
var scenario = new ScenarioBuilder(schemaProvider)
.WithPatient(p => p.WithAge(35).WithGender(g => g.Female))
.AddEncounter("Annual checkup")
.AddComprehensiveMetabolicPanel()
.Build();

Key Design Principles

1. ISourceNavigator Abstraction

All packages work with ISourceNavigator, a lightweight abstraction over FHIR JSON:

public interface ISourceNavigator
{
string Name { get; }
string Text { get; }
string Location { get; }
string ResourceType { get; }
IEnumerable<ISourceNavigator> Children(string? name = null);
}

2. IElement for Typed Operations

Convert to IElement for FHIRPath evaluation and validation:

var element = sourceNode.ToElement(schemaProvider);

// IElement has type information
var instanceType = element.InstanceType; // "Patient"
var typeInfo = element.Type; // Type metadata

3. Compiled Expressions

FHIRPath expressions are automatically parsed, compiled, and cached:

// First call: parse + compile + cache
var result = element.Select("name.given.first()");

// Subsequent calls: uses cached compiled delegate
var result2 = element.Select("name.given.first()");

FHIR Version Support

PackageSTU3R4R4BR5R6
Abstractions
Specification
Serialization
FhirPath
Validation
Search