Skip to content

Files

Latest commit

Dec 31, 2023
b7bc1ea · Dec 31, 2023

History

History
60 lines (49 loc) · 2.37 KB

README.md

File metadata and controls

60 lines (49 loc) · 2.37 KB

FHIR Pipes 🔥

  • Pieces of FHIR data pipelines
  • Split up data processing in time and space using:
    • Event-Driven ETL (Extract, Transform, Load)
    • Scalable transformation functions
  • More focused on comparing mapping and messaging implementations
  • Less focused on orchestrating full pipelines
  • Demonstrates examples of event-driven architecture and infrastructure-as-code
    • Applicable to other kinds of data processing not specific to FHIR

Architecture

Loading
graph LR
FHIRSource((FHIR \nSource Servers))
DataSource[(Data Sources)]

%%% EventSource[Incoming Events]
MessageSource([Incoming \nMessages/Events])

Function{{Transformation\nFunctions}}

%%% EventSink[Outgoing Events]
MessageSink([Outgoing \nMessages/Events])
DataSink[(Data Sinks)]
FHIRSink((FHIR \nSink Servers))

%%% 
FHIRSource --> |produce/publish/trigger| MessageSource
%%% FHIRSource --> |publish| EventSource
DataSource --> |produce/publish| MessageSource
%%% DataSource --> |publish| EventSource

MessageSource -.-> |trigger| Function
Function -.-> |consume/subscribe| MessageSource
%%% EventSource --> Function

%%% Function --> |publish| EventSink
Function --> |write/publish| MessageSink
Function --> |write| DataSink
Function --> |write| FHIRSink

ETL Implementations

FHIR as Sink

FHIR as Source

Declarative Mappings

Data transformations can be more concise, readable, and easier to reason about when expressed declaratively. Here are some options worth exploring for encoding these transformations in data.