Skip to main content

Data Sources: connecting clinical systems to Patient Journey Intelligence

A data source in Patient Journey Intelligence is a registered, validated connection to a system that holds clinical data. The Data Sources module is where those connections are created, configured, credentialed, monitored, and retired. Nothing enters the ingestion pipeline except through a registered source or a Local Upload, so everything downstream depends on what is defined here.

Data Sources: registering and managing clinical data connections

This video demonstrates the interface visually without audio narration.

This video demonstrates the interface visually without audio narration.

Supported connectors by data type​

A connector is the typed integration between Patient Journey Intelligence and one external system. Thirteen connector types are available today. Files on your own machine can also be imported directly with Local Upload, and two Databricks connectors are in development.

Thirteen connectors feed registered data sources and the ingestion pipeline: Amazon S3, Google Cloud Storage, SFTP; EHR, Epic, AWS HealthLake, HTTP Plugin; AWS HealthImaging, DICOMweb; Snowflake, OMOP CDM; PostgreSQL, Elasticsearch. Local Upload feeds ingestion directly without source registration.

All 13 supported connectors, grouped by data type. Register an external source to use its connector; choose Local Upload during ingestion to import files from your machine.

The cards below follow the same groups. Each one names the connectors in that group and the kind of data they bring in. Where a step-by-step tutorial exists, the card links to it, so you can go from choosing a source to a finished ingestion without searching the docs.

EHR and clinical APIs

Epic (FHIR R4, backend OAuth 2.0), EHR, AWS HealthLake, and HTTP Plugin for RESTful endpoints. Brings in patient records, FHIR resources, and clinical notes.

File and object storage

Amazon S3, Google Cloud Storage, and SFTP. Brings in clinical documents such as notes, reports, and scanned PDFs, from a whole bucket or a single folder.

OMOP CDM and data warehouses

OMOP CDM for a direct connection to an existing OMOP database, with optional table selection, and Snowflake for data warehouse tables.

Files from your machine

Local Upload, chosen when you start an ingestion rather than registered here. Takes FHIR R4 bundles, FHIR and HL7 CDA documents, and document batches with structured metadata.

Medical imaging

DICOMweb for any DICOMweb-compatible imaging server, with four authentication options, and AWS HealthImaging for DICOM objects in an AWS datastore.

Databases

PostgreSQL and Elasticsearch. Beyond ingestion, both can be explored read-only, and PostgreSQL sources support saved row-level filters.

What each connector needs​

Each connector type renders its own configuration fields in the source creation wizard and applies its own validation rules.

ConnectorWhat it brings inConfiguration
Amazon S3Clinical documents from an S3 bucketThe S3 bucket to read
Google Cloud StorageFiles from a Google Cloud Storage bucketGCP cloud credential, bucket name, and project ID. An optional prefix restricts ingestion to a single path, so one connector can target a department folder such as radiology/2026/ instead of the whole bucket
SFTPFiles from an SFTP endpointHost details and secure paths
EHRData from an electronic health record sourceEndpoint and authentication settings specific to the connector
EpicPatient records and clinical notes over Epic's FHIR R4 APIBackend OAuth 2.0 with a private key held as an encrypted Epic credential. Patients are selected by search when you set up the ingestion
AWS HealthLakeFHIR-native structured dataAn AWS HealthLake datastore
HTTP PluginData from RESTful endpointsHTTP methods, headers, and payload schemas
AWS HealthImagingDICOM image objectsAn AWS HealthImaging datastore
DICOMwebImages from any DICOMweb-compatible imaging serverServer base URL and one of four authentication methods: none, basic, bearer token, or OAuth 2.0
SnowflakeData warehouse tablesAccount, warehouse, database, schema, username, and password. Role, stage name, and filename are optional
OMOP CDMRecords from an existing OMOP Common Data Model database, with no file export step in betweenHost, port, database name, schema, username, and password. Optionally select tables such as person, visit_occurrence, and condition_occurrence; an empty list imports every table
PostgreSQLTables from a PostgreSQL databaseHost, port, database name, and credentials stored under the separate Database credential type, never on the source. TLS is optional: paste a certificate authority, or turn certificate checking off for test environments
ElasticsearchIndices from an Elasticsearch clusterHost, port, and authentication. TLS works as for PostgreSQL

Local Upload is not a registered connector. You choose it instead of a data source when you start an ingestion job in the Data Ingestion module, and it is the usual route for FHIR and CDA content you already hold as files.

Connectors in development​

Two connector types appear in the source type list so you can plan integration work against them. They are not yet available for operational use and will not complete a connection test until backend support ships.

ConnectorPlanned capability
Databricks Unity CatalogAccess to files stored in Unity Catalog volumes, configured with a Databricks credential and a Unity Catalog volume path
Databricks Delta CDMAccess to OMOP CDM tables held in Databricks Delta Lake through a Databricks SQL warehouse, configured with a Databricks credential, SQL warehouse HTTP path, catalog, schema, and optional table selection

Register a source in three steps​

Selecting Add Source opens a guided three-step wizard.

Step 1: Name the source and choose its type​

Enter a unique name and pick the connector type. Each type in the list carries a short description to guide the choice, and the two Databricks types are listed but not yet usable.

Step 2: Configure the connection​

The wizard shows the fields for the selected type, as listed in What each connector needs. Typical parameters are bucket or datastore identifiers, endpoint URLs, the geographic region for cloud systems, credentials and authentication tokens, HTTP methods, headers, and payload schemas, and SFTP host details and paths. Advanced network options include private VPC routing and static IP allowlisting.

All credential inputs are encrypted, masked, and stored in compliance with enterprise security and healthcare regulatory requirements.

Step 3: Review and create​

The final screen summarizes the source metadata, the connection parameters, and the selected ingestion schedule. Selecting Create Source makes the connector available to the Data Ingestion module immediately.

Manage sources from the connector registry​

The registry is a searchable, sortable table of every connector, active and retired. Its audit metadata supports governance and compliance reviews.

FieldDescription
Source identifierDescriptive label for the connection
Connector typeOne of the connector types listed above
Created by / timestampAudit trail for the origin of the configuration
Last modifiedMost recent update to parameters or schedule
Last successful connectionConfirms ingestion recency
StatusActive, Completed, or Failed
Ingestion scheduleNone, Daily, Weekly, or Monthly
ActionsEdit, Delete

Both actions are restricted by role through the platform's access control layer:

  • Edit reopens the full configuration. Name, connection parameters, credentials, and schedule can change at any time without affecting previously ingested data. The connector type is locked after creation to preserve schema compatibility with that data.
  • Delete removes the connector from active use and stops future ingestion jobs. All previously ingested data is retained.

Credential rotation

When you edit a source, existing credentials stay hidden. Leave the credential fields blank to keep the current keys, or enter new ones to rotate them. Keys stay out of the interface after setup, and a rotation never requires deleting and recreating the source or interrupting active ingestion jobs.

Schedule ingestion per source​

Set the schedule during source creation and change it at any time:

ScheduleBehavior
NoneIngestion is triggered manually from the UI or via API
DailyExecutes once per 24-hour cycle
WeeklyExecutes on specific days of the week
MonthlyExecutes on designated calendar dates

Scheduled jobs are queued in the ingestion pipeline automatically, so the Data Ingestion module needs no further configuration.

Monitor connection health​

Every registered source reports four signals in real time:

  • Last visit timestamp: the most recent successful connection
  • Status indicators: Active, Completed, or Failed
  • Historical execution status and latency diagnostics: past run outcomes and connection latency, which identify degraded or intermittent sources
  • Error logs: diagnostic output for resolving connection failures

When a job fails, its status changes to Failed and its error log appears here, so you can diagnose the problem and retrigger the job manually before a gap in source data reaches the downstream OMOP datasets or the NLP enrichment pipeline.

Database sources: explore and saved filters​

PostgreSQL and Elasticsearch sources feed the ingestion pipeline like any other connector. They also let you explore the source structure and, for PostgreSQL, build reusable filters directly against it.

Exploring a source​

Select a registered database source and click Explore to open a read-only interface.

  • For PostgreSQL, browse tables and columns, see column types and sample values, and run read-only SQL queries. Queries return a preview and import nothing into the platform.
  • For Elasticsearch, browse the available indices and run index queries.

Exploration is the fastest way to verify a connection, read the schema before building a filter, and spot-check content after a change at the source.

Saved filters on PostgreSQL sources​

A saved filter defines a subset of rows in a PostgreSQL source. Build one with the point-and-click condition builder by picking columns, operators, and values, or write the query directly. Before saving, the platform reports how many rows the filter matches, so you validate the scope while it is still a configuration question.

Saved filters can be edited, run again, and deleted. They are private to the person who created them and cannot be shared.

Elasticsearch and saved filters

Saved filters are supported on PostgreSQL sources only. You can register and explore an Elasticsearch source, and filter saving is not yet available for Elasticsearch.

Example: a reusable lab population​

A data engineer registers the institution's external lab database as a PostgreSQL source and builds a saved filter for HbA1c results above 9.0 in the past 12 months. The builder reports 4,212 matching rows, which matches the count the lab team expected, so the filter is saved. Running it again next quarter returns the current population without anyone rewriting the query.

How data flows from source to pipeline​

After registration, data is scanned, downloaded, organized into batches, and staged in local processing storage, where the ingestion pipeline picks it up.

External storage, EHR/FHIR, imaging, and database sources pass through source registration, file discovery, file download, batch organization, and local storage registration. Supporting stores retain source and batch metadata, discovery results, local processing files, and the file registry. Registered files feed content extraction, NLP, imaging, and OMOP modeling pipelines.

From source registration to processing-ready files. External clinical systems, including object storage, EHR and FHIR services, imaging servers, and data warehouses, are registered, scanned, downloaded, organized into batches, and staged in local processing storage for downstream extraction and modeling.

Every ingestion job then runs the full pipeline: NLP extraction from unstructured notes, OMOP conversion of structured and semi-structured data, terminology normalization across 40+ standard vocabularies, patient-level deduplication, and clinical reasoning and enrichment.

Registered sources cover all three clinical data modalities: structured data (FHIR resources, EHR extracts, Snowflake tables, PostgreSQL tables, and records imported directly from an existing OMOP CDM database), unstructured data (clinical notes, scanned documents), and imaging metadata (DICOM and DICOMweb). With encrypted credentials, role-based access control, and an audit trail for every connection, the module is the governance anchor for the data supply chain feeding the platform.


FAQ​

Thirteen connector types are available today: Amazon S3, Google Cloud Storage, and SFTP for files; EHR, Epic, AWS HealthLake, and HTTP Plugin for health records and clinical APIs; AWS HealthImaging and DICOMweb for imaging; Snowflake and OMOP CDM for warehouses and OMOP data; and PostgreSQL and Elasticsearch for databases. Databricks Unity Catalog and Databricks Delta CDM appear in the list but are still in development and will not complete a connection test.

All credential inputs are encrypted, masked, and stored in compliance with enterprise security and healthcare regulatory requirements. When you edit a source, existing credentials stay hidden: leave the fields blank to keep them or enter new values to rotate them. PostgreSQL and Elasticsearch credentials are held under the separate Database credential type and are never saved on the source.

Yes. Deleting a connector removes it from the active registry and stops future ingestion jobs. All previously ingested data is retained in the platform.

No. The connector type is locked after creation to preserve schema compatibility with ingested data. Name, connection parameters, credentials, and schedule can all be changed at any time without affecting previously ingested records.

Each source has a schedule of none, daily, weekly, or monthly, and scheduled jobs are queued in the ingestion pipeline automatically. If a job fails, the source status changes to Failed and the error log appears in the monitoring view, so you can diagnose the problem and retrigger the job manually.

Both can be explored read-only: browse PostgreSQL tables, columns, types, and sample values and run read-only SQL, or browse Elasticsearch indices and run index queries. PostgreSQL sources also support private saved filters that report a match count before saving. Saved filters are not yet available for Elasticsearch.

Use the OMOP CDM connector, which connects directly to the database with no file export step. It needs the host, port, database name, schema, username, and password. Select tables such as person, visit_occurrence, and condition_occurrence, or leave the list empty to import every table. The OMOP CDM tutorial also covers patient identifier remapping.

The Snowflake account, warehouse, database, schema, username, and password. Role, stage name, and filename are optional.

No authentication, basic authentication, bearer token, and OAuth 2.0. The connector works with any DICOMweb-compatible imaging server and also needs the server base URL.

Yes. The Google Cloud Storage connector accepts an optional prefix that restricts ingestion to a single path inside the bucket, such as a department folder.

It is the entry point for all external data. No ingestion job runs without a registered, active data source, except a Local Upload. Once a source is registered, the Data Ingestion module runs NLP extraction, OMOP conversion, terminology normalization, deduplication, and enrichment.


Walkthroughs that start from a data source or a Local Upload, in the Patient Journey Intelligence cookbook:

Data sourceTutorialWhat it covers
EpicIngest Epic EHR patients and clinical notes over FHIR R4Epic app, key pair, and credential setup, then patient search and ingestion
Amazon S3Ingest clinical documents from an S3 sourceRegistering an S3 source and ingesting its documents
Amazon S3Turn clinical documents into curated, reviewable dataS3 ingestion through cohort, dataset, and data curation
OMOP CDMConnect an existing OMOP CDM databaseDirect connection, patient identifier remapping, and import
Local Upload: FHIR R4Ingest FHIR R4 into OMOP CDM, with or without NLPA FHIR bundle or archive converted to OMOP CDM records
Local Upload: FHIR documentsIngest external FHIR documents without patient linkageDocument-first ingestion with no OMOP person record
Local Upload: HL7 CDAIngest external HL7 CDA documents without patient linkageDocument-first ingestion with no OMOP person record
Local Upload: document batchesLink document batches to patients with structured OMOP metadataJSON metadata files that tie each document to a patient, visit, and provider