Validation & Profiles
100% offline FHIR validation with US Core 6.1.0 and implementation guide profiles.
Overview
InteropSuite provides comprehensive validation at two stages: preflight validation of source messages and FHIR validation of generated bundles. All validation runs 100% offline with no network calls required.
100% Offline - PHI Never Leaves Your Infrastructure
All validation profiles are embedded in the library. No calls to external validation services, no FHIR servers required, no PHI exposure risk.
Offline Validation
InteropSuite embeds all validation resources locally:
| Component | Description |
|---|---|
| FHIR R4 Definitions | Complete HL7 FHIR R4 structure definitions and value sets |
| US Core 6.1.0 | All US Core profiles, extensions, and terminology |
| CARIN Blue Button 2.1.0 | Consumer-directed health data exchange profiles |
| Da Vinci PAS 2.0.1 | Prior Authorization Support profiles |
| PDex 2.1.0 | Payer Data Exchange provenance profiles |
| HL7 Terminology 5.5.0 | SNOMED CT, LOINC, ICD-10, CPT, NDC, CVX, and all HL7 code systems |
Validation uses the Firely SDK with embedded specifications. No internet connection, no external FHIR servers, no terminology services required.
US Core 6.1.0 Profiles
All FHIR resources are validated against appropriate US Core profiles:
Clinical Resources
| Resource | Profile |
|---|---|
| Patient | us-core-patient |
| Encounter | us-core-encounter |
| Condition | us-core-condition-encounter-diagnosis, us-core-condition-problems-health-concerns |
| AllergyIntolerance | us-core-allergyintolerance |
| Procedure | us-core-procedure |
| Immunization | us-core-immunization |
| MedicationRequest | us-core-medicationrequest |
| MedicationDispense | us-core-medicationdispense |
Diagnostic Resources
| Resource | Profile |
|---|---|
| Observation (Lab) | us-core-observation-lab |
| Observation (Vital Signs) | us-core-vital-signs (with specific profiles per vital) |
| Observation (Smoking) | us-core-smokingstatus |
| DiagnosticReport | us-core-diagnosticreport-lab |
| DocumentReference | us-core-documentreference |
Administrative Resources
| Resource | Profile |
|---|---|
| Practitioner | us-core-practitioner |
| Organization | us-core-organization |
| Coverage | us-core-coverage |
| CareTeam | us-core-careteam |
| Provenance | us-core-provenance |
Vital Signs Profiles
Vital sign observations are automatically profiled based on LOINC code:
| Vital Sign | LOINC | Profile |
|---|---|---|
| Blood Pressure | 85354-9 | us-core-blood-pressure |
| Heart Rate | 8867-4 | us-core-heart-rate |
| Respiratory Rate | 9279-1 | us-core-respiratory-rate |
| Body Temperature | 8310-5 | us-core-body-temperature |
| Body Weight | 29463-7 | us-core-body-weight |
| Body Height | 8302-2 | us-core-body-height |
| BMI | 39156-5 | us-core-bmi |
| Oxygen Saturation | 2708-6 | us-core-pulse-oximetry |
CMS-0057-F Profiles
InteropSuite transforms X12 5010 transactions to FHIR R4 bundles validated against CMS-0057-F profiles. When using OutputFormat.Cms0057F, profiles are automatically selected based on transaction type:
CARIN Blue Button 2.1.0
Used for 835 (Remittance) and 837 (Claims) transactions:
| Resource | Profile |
|---|---|
| ExplanationOfBenefit | C4BB-ExplanationOfBenefit-Professional, C4BB-ExplanationOfBenefit-Institutional |
| Claim | C4BB-Claim-Professional, C4BB-Claim-Institutional |
| Coverage | C4BB-Coverage |
| Organization | C4BB-Organization |
Da Vinci PAS 2.0.1
Used for 278 (Prior Authorization) transactions:
| Resource | Profile |
|---|---|
| Claim | PAS-Claim |
| ClaimResponse | PAS-ClaimResponse |
| Coverage | PAS-Coverage |
PDex 2.1.0 Provenance
All CMS-0057-F bundles include PDex Provenance with source format tracking:
| Transaction | Provenance Source Code |
|---|---|
| 837P/I/D (Claims) | x12837 |
| 278 (Prior Auth) | x12278 |
| 835 (Remittance) | x12other |
| 834 (Enrollment) | x12other |
Eligibility transactions use US Core profiles (not PDex) because Da Vinci PDex 2.1.0 does not define CoverageEligibilityRequest/Response profiles.
Preflight Validation
Before transformation, source messages undergo preflight validation:
HL7 v2.x Preflight
- Message structure validation (MSH segment present)
- Required segment checks (PID for patient messages)
- Field format validation (dates, identifiers)
- Code system validation (optional)
X12 Preflight
- Envelope validation (ISA/GS/ST structure)
- Delimiter consistency
- Loop structure validation
- NPI checksum validation
C-CDA Preflight
- XML well-formedness
- ClinicalDocument root element
- HL7 v3 namespace presence
- Required header elements
Severity Levels
| Severity | Behavior |
|---|---|
| Block | Transformation stops, message is rejected |
| Error | Transformation stops, message is rejected |
| Warn | Transformation continues, warning logged |
| Info | Informational only, transformation continues |
Handling Warnings
Warnings indicate non-blocking issues that may affect data quality:
var result = await Interop.HL7ToFhirAsync(message);
// Transformation succeeds even with warnings
if (result.Success)
{
// Process the bundle
SaveBundle(result.FhirBundle);
// Log warnings for review
if (result.Warnings.Any())
{
foreach (var warning in result.Warnings)
{
_logger.LogWarning("Transformation warning: {Warning}", warning);
}
// Optionally flag for manual review
FlagForReview(result.FhirBundle, result.Warnings);
}
}
Common Warning Types
| Warning | Description | Action |
|---|---|---|
| Missing optional field | Recommended field not populated | Review source data quality |
| Unknown code | Code not found in expected code system | Verify code mapping |
| Date format | Date precision lower than expected | Check source system date handling |
| Identifier format | Identifier doesn't match expected pattern | Review identifier assignment |