Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
97548c7
Refactor sandbox to separate module
jenniferjiangkells Apr 30, 2025
b17b55d
Fix tests
jenniferjiangkells Apr 30, 2025
e1a4d57
Gateway module WIP
jenniferjiangkells May 1, 2025
f5b6f57
Update poetry.lock
jenniferjiangkells May 2, 2025
278f86d
Add fhirclient, bump python min to 3.9, update poetry
jenniferjiangkells May 6, 2025
3365436
Update module structure
jenniferjiangkells May 6, 2025
40451ee
Use consistent pydantic models to silence serialization warning
jenniferjiangkells May 7, 2025
85f5866
Fix bugs in configs
jenniferjiangkells May 7, 2025
bd56d6d
Fix code snippet in docs
jenniferjiangkells May 7, 2025
cb9ece0
Migrating service module to gateway/services
jenniferjiangkells May 7, 2025
454096b
Implement cdshooks and notereader services plus clean up on base and …
jenniferjiangkells May 9, 2025
433c2ef
Remove async from cdshooks
jenniferjiangkells May 9, 2025
c140d00
Update relatesTo access
jenniferjiangkells May 9, 2025
1b19026
Add fields to CdsRequest
jenniferjiangkells May 9, 2025
b5ee97a
Update sandbox usage and tests
jenniferjiangkells May 9, 2025
946a1d6
Update tests for gateway module
jenniferjiangkells May 9, 2025
6a715af
Remove scrap
jenniferjiangkells May 9, 2025
40ba249
Add HealthChainAPI class and FhirRouter placeholder
jenniferjiangkells May 12, 2025
ba32959
Update poetry.lock
jenniferjiangkells May 12, 2025
9c7a0bb
Update CI python version
jenniferjiangkells May 12, 2025
601c7f3
Fix typo
jenniferjiangkells May 12, 2025
bf72ff0
Pass test
jenniferjiangkells May 12, 2025
b2beda7
Fix namespace conflict
jenniferjiangkells May 13, 2025
697d2db
Fix patching issue in tests for python 3.10
jenniferjiangkells May 13, 2025
ef4bb6a
Fix pydantic to <2.11
jenniferjiangkells May 13, 2025
017cce5
Tidy up structure
jenniferjiangkells May 13, 2025
49877f6
Added event dispatch and unified everything to gateways
jenniferjiangkells May 14, 2025
d233c16
Update dependencies
jenniferjiangkells May 14, 2025
7aee31e
Added dependency injection and protocol with tests
jenniferjiangkells May 15, 2025
b2bda89
Deprecate Service module
jenniferjiangkells May 15, 2025
186936d
Fix tests
jenniferjiangkells May 15, 2025
7c89d34
Merge branch 'main' of https://github.com/dotimplement/HealthChain in…
jenniferjiangkells May 19, 2025
4cd7eb5
Chaotic WIP
jenniferjiangkells May 23, 2025
a7ffebc
Added connection pool management
jenniferjiangkells Jun 6, 2025
26aea49
Merge branch 'main' of https://github.com/dotimplement/HealthChain in…
jenniferjiangkells Jun 6, 2025
6ed3be4
Add validation of response
jenniferjiangkells Jun 6, 2025
4946190
Add handler validation and read only method WIP
jenniferjiangkells Jun 6, 2025
7b1d7c9
poetry.lock
jenniferjiangkells Jun 9, 2025
071f32b
Only run CI on non-draft PRs
jenniferjiangkells Jun 9, 2025
7a896e8
Simpler FHIR client implementation
jenniferjiangkells Jun 9, 2025
3cc560c
Update poetry - remove fhirclient
jenniferjiangkells Jun 9, 2025
34d3d67
Update dependencies
jenniferjiangkells Jun 10, 2025
5f74b12
Added oauth2.0 flow and dynamic jwt token management
jenniferjiangkells Jun 10, 2025
3a25ada
Added tests for client and auth
jenniferjiangkells Jun 10, 2025
7bc3737
Update connection pool impl and fhir methods
jenniferjiangkells Jun 11, 2025
e346432
Update tests for client and pool
jenniferjiangkells Jun 11, 2025
bab5c67
Refactor cdshooks and notereader as services instead of gateways
jenniferjiangkells Jun 11, 2025
1f439af
Add validation for client secret path in auth and add tests
jenniferjiangkells Jun 12, 2025
b60fe96
Add FHIR error handling to methods
jenniferjiangkells Jun 12, 2025
5f7eef5
Refactor FHIRGateway to /core and clean up base class + separate conn…
jenniferjiangkells Jun 13, 2025
82df2ed
Remove result validation and use strict type[Resource] inputs
jenniferjiangkells Jun 13, 2025
d10ed44
Move connection string methods to auth config and removed unused methods
jenniferjiangkells Jun 13, 2025
d74e76b
Remove debug log
jenniferjiangkells Jun 13, 2025
6d0a319
Refactor event dispatch
jenniferjiangkells Jun 16, 2025
277ee68
Clean up tests
jenniferjiangkells Jun 16, 2025
dffc641
Minor refactor
jenniferjiangkells Jun 18, 2025
569de46
Add crud operations to fhirgateway
jenniferjiangkells Jun 18, 2025
3515d65
Add metadata and status endpoints in fhirgateway
jenniferjiangkells Jun 19, 2025
0c8b5eb
Clean up protocols and event dispatcher
jenniferjiangkells Jun 19, 2025
1262c7f
Refactor event emission
jenniferjiangkells Jun 19, 2025
24173a3
Update tests
jenniferjiangkells Jun 19, 2025
24d9e89
Refactor HealthChainAPI lifespan and route management
jenniferjiangkells Jun 20, 2025
cac65cd
Refactor EventDispatcher and tidy some tests
jenniferjiangkells Jun 20, 2025
1fcd42a
Fix pass kwargs to client
jenniferjiangkells Jun 23, 2025
27c03f0
Potential fix for code scanning alert no. 9: Incomplete URL substring…
jenniferjiangkells Jun 23, 2025
955d39c
Merge branch 'feature/fhir-api-gateway' of https://github.com/dotimpl…
jenniferjiangkells Jun 23, 2025
2e79916
Test fix for python3.9
jenniferjiangkells Jun 23, 2025
8229a5d
3.9 Event loop fix
jenniferjiangkells Jun 23, 2025
79fdbb1
Update .gitignore
jenniferjiangkells Jun 23, 2025
1d99bef
Use asyncio in test
jenniferjiangkells Jun 23, 2025
f976475
Use asyncio instead of anyio
jenniferjiangkells Jun 23, 2025
2c9a2b6
Remove unused dependencies
jenniferjiangkells Jun 25, 2025
650ba2b
Add gateway reference to docs
jenniferjiangkells Jun 25, 2025
4eda22a
Update README.md
jenniferjiangkells Jun 25, 2025
734f61f
Update docs
jenniferjiangkells Jun 26, 2025
b6aac61
Remove security and monitoring modules from gateway (moved to separat…
jenniferjiangkells Jun 26, 2025
3d88291
Clean up sandbox docs
jenniferjiangkells Jun 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,32 @@
branches: [ "main" ]
pull_request:
branches: [ "main" ]
types: [opened, synchronize, reopened, ready_for_review]

jobs:
test:
if: github.event.pull_request.draft == false
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11"]
poetry-version: [1.8.2]
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v3
- name: "Setup Python, Poetry and Dependencies"
uses: packetcoders/action-setup-cache-python-poetry@main
with:
python-version: ${{matrix.python-version}}
poetry-version: ${{matrix.poetry-version}}
- name: Install package
run: |
poetry install --no-interaction
- name: Lint with Ruff
run: |
poetry run ruff format
poetry run ruff check
continue-on-error: true
- name: Run tests
run: |
poetry run pytest

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,5 @@ scrap/
.vscode/
.ruff_cache/
.python-version
.cursor/
scripts/
213 changes: 110 additions & 103 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,115 @@

</div>

Build simple, portable, and scalable AI and NLP applications in a healthcare context 💫 🏥.
Connect your AI models to any healthcare system with a few lines of Python 💫 🏥.

Integrating AI with electronic health records (EHRs) is complex, manual, and time-consuming. Let's try to change that.

Integrating electronic health record systems (EHRs) data is complex, and so is designing reliable, reactive algorithms involving unstructured healthcare data. Let's try to change that.

```bash
pip install healthchain
```
First time here? Check out our [Docs](https://dotimplement.github.io/HealthChain/) page!

Came here from NHS RPySOC 2024 ✨?
[CDS sandbox walkthrough](https://dotimplement.github.io/HealthChain/cookbook/cds_sandbox/)
[Slides](https://speakerdeck.com/jenniferjiangkells/building-healthcare-context-aware-applications-with-healthchain)

## Features
- [x] 🔥 Build FHIR-native pipelines or use [pre-built ones](https://dotimplement.github.io/HealthChain/reference/pipeline/pipeline/#prebuilt) for your healthcare NLP and ML tasks
- [x] 🔌 Connect pipelines to any EHR system with built-in [CDA and FHIR Connectors](https://dotimplement.github.io/HealthChain/reference/pipeline/connectors/connectors/)
- [x] 🔄 Convert between FHIR, CDA, and HL7v2 with the [InteropEngine](https://dotimplement.github.io/HealthChain/reference/interop/interop/)
- [x] 🧪 Test your pipelines in full healthcare-context aware [sandbox](https://dotimplement.github.io/HealthChain/reference/sandbox/sandbox/) environments
- [x] 🗃️ Generate [synthetic healthcare data](https://dotimplement.github.io/HealthChain/reference/utilities/data_generator/) for testing and development
- [x] 🚀 Deploy sandbox servers locally with [FastAPI](https://fastapi.tiangolo.com/)
- [x] 🔌 **Gateway**: Connect to multiple EHR systems with [unified API](https://dotimplement.github.io/HealthChain/reference/gateway/gateway/) supporting FHIR, CDS Hooks, and SOAP/CDA protocols
- [x] 🔥 **Pipelines**: Build FHIR-native ML workflows or use [pre-built ones](https://dotimplement.github.io/HealthChain/reference/pipeline/pipeline/#prebuilt) for your healthcare NLP and AI tasks
- [x] 🔄 **InteropEngine**: Convert between FHIR, CDA, and HL7v2 with a [template-based engine](https://dotimplement.github.io/HealthChain/reference/interop/interop/)
- [x] 🔒 Type-safe healthcare data with full type hints and Pydantic validation for [FHIR resources](https://dotimplement.github.io/HealthChain/reference/utilities/fhir_helpers/)
- [x] ⚡ Event-driven architecture with real-time event handling and [audit trails](https://dotimplement.github.io/HealthChain/reference/gateway/events/) built-in
- [x] 🚀 Deploy production-ready applications with [HealthChainAPI](https://dotimplement.github.io/HealthChain/reference/gateway/api/) and FastAPI integration
- [x] 🧪 Generate [synthetic healthcare data](https://dotimplement.github.io/HealthChain/reference/utilities/data_generator/) and [sandbox testing](https://dotimplement.github.io/HealthChain/reference/sandbox/sandbox/) utilities

## Why use HealthChain?
- **EHR integrations are manual and time-consuming** - HealthChain abstracts away complexities so you can focus on AI development, not EHR configurations.
- **It's difficult to track and evaluate multiple integration instances** - HealthChain provides a framework to test the real-world resilience of your whole system, not just your models.
- [**Most healthcare data is unstructured**](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6372467/) - HealthChain is optimized for real-time AI and NLP applications that deal with realistic healthcare data.
- **Built by health tech developers, for health tech developers** - HealthChain is tech stack agnostic, modular, and easily extensible.
- **EHR integrations are manual and time-consuming** - **HealthChainAPI** abstracts away complexities so you can focus on AI development, not learning FHIR APIs, CDS Hooks, and authentication schemes.
- **Healthcare data is fragmented and complex** - **InteropEngine** handles the conversion between FHIR, CDA, and HL7v2 so you don't have to become an expert in healthcare data standards.
- [**Most healthcare data is unstructured**](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6372467/) - HealthChain **Pipelines** are optimized for real-time AI and NLP applications that deal with realistic healthcare data.
- **Built by health tech developers, for health tech developers** - HealthChain is tech stack agnostic, modular, and easily extensible with built-in compliance and audit features.

## HealthChainAPI

The HealthChainAPI provides a secure, asynchronous integration layer that coordinates multiple healthcare systems in a single application.

### Multi-Protocol Support

Connect to multiple healthcare data sources and protocols:

```python
from healthchain.gateway import (
HealthChainAPI, FHIRGateway,
CDSHooksService, NoteReaderService
)

# Create your healthcare application
app = HealthChainAPI(
title="My Healthcare AI App",
description="AI-powered patient care platform"
)

# FHIR for patient data from multiple EHRs
fhir = FHIRGateway()
fhir.add_source("epic", "fhir://fhir.epic.com/r4?client_id=...")
fhir.add_source("medplum", "fhir://api.medplum.com/fhir/R4/?client_id=...")

# CDS Hooks for real-time clinical decision support
cds = CDSHooksService()

@cds.hook("patient-view", id="allergy-alerts")
def check_allergies(request):
# Your AI logic here
return {"cards": [...]}

# SOAP for clinical document processing
notes = NoteReaderService()

@notes.method("ProcessDocument")
def process_note(request):
# Your NLP pipeline here
return processed_document

# Register everything
app.register_gateway(fhir)
app.register_service(cds)
app.register_service(notes)

# Your API now handles:
# /fhir/* - Patient data, observations, etc.
# /cds/* - Real-time clinical alerts
# /soap/* - Clinical document processing
```

### FHIR Operations with AI Enhancement

```python
from healthchain.gateway import FHIRGateway
from fhir.resources.patient import Patient

gateway = FHIRGateway()
gateway.add_source("epic", "fhir://fhir.epic.com/r4?...")

# Add AI transformations to FHIR data
@gateway.transform(Patient)
async def enhance_patient(id: str, source: str = None) -> Patient:
async with gateway.modify(Patient, id, source) as patient:
# Get lab results and process with AI
lab_results = await gateway.search(
Observation,
{"patient": id, "category": "laboratory"},
source
)
insights = nlp_pipeline.process(patient, lab_results)

# Add AI summary to patient record
patient.extension = patient.extension or []
patient.extension.append({
"url": "http://healthchain.org/fhir/summary",
"valueString": insights.summary
})
return patient

# Automatically available at: GET /fhir/transform/Patient/123?source=epic
```

## Pipeline
Pipelines provide a flexible way to build and manage processing pipelines for NLP and ML tasks that can easily integrate with complex healthcare systems.
Expand Down Expand Up @@ -139,116 +222,40 @@ cda_data = engine.from_fhir(fhir_resources, dest_format=FormatType.CDA)

## Sandbox

Sandboxes provide a staging environment for testing and validating your pipeline in a realistic healthcare context.

### Clinical Decision Support (CDS)
[CDS Hooks](https://cds-hooks.org/) is an [HL7](https://cds-hooks.hl7.org) published specification for clinical decision support.

**When is this used?** CDS hooks are triggered at certain events during a clinician's workflow in an electronic health record (EHR), e.g. when a patient record is opened, when an order is elected.

**What information is sent**: the context of the event and [FHIR](https://hl7.org/fhir/) resources that are requested by your service, for example, the patient ID and information on the encounter and conditions they are being seen for.

**What information is returned**: “cards” displaying text, actionable suggestions, or links to launch a [SMART](https://smarthealthit.org/) app from within the workflow.

Test your AI applications in realistic healthcare contexts with [CDS Hooks](https://cds-hooks.org/) sandbox environments.

```python
import healthchain as hc

from healthchain.pipeline import SummarizationPipeline
from healthchain.sandbox.use_cases import ClinicalDecisionSupport
from healthchain.models import Card, Prefetch, CDSRequest
from healthchain.data_generator import CdsDataGenerator
from typing import List

@hc.sandbox
class MyCDS(ClinicalDecisionSupport):
def __init__(self) -> None:
self.pipeline = SummarizationPipeline.from_model_id(
"facebook/bart-large-cnn", source="huggingface"
)
self.data_generator = CdsDataGenerator()
def __init__(self):
self.pipeline = SummarizationPipeline.from_model_id("facebook/bart-large-cnn")

# Sets up an instance of a mock EHR client of the specified workflow
@hc.ehr(workflow="encounter-discharge")
def ehr_database_client(self) -> Prefetch:
def ehr_database_client(self):
return self.data_generator.generate_prefetch()

# Define your application logic here
@hc.api
def my_service(self, data: CDSRequest) -> CDSRequest:
result = self.pipeline(data)
return result
```

### Clinical Documentation

The `ClinicalDocumentation` use case implements a real-time Clinical Documentation Improvement (CDI) service. It helps convert free-text medical documentation into coded information that can be used for billing, quality reporting, and clinical decision support.

**When is this used?** Triggered when a clinician opts in to a CDI functionality (e.g. Epic NoteReader) and signs or pends a note after writing it.

**What information is sent**: A [CDA (Clinical Document Architecture)](https://www.hl7.org.uk/standards/hl7-standards/cda-clinical-document-architecture/) document which contains continuity of care data and free-text data, e.g. a patient's problem list and the progress note that the clinician has entered in the EHR.

```python
import healthchain as hc

from healthchain.pipeline import MedicalCodingPipeline
from healthchain.sandbox.use_cases import ClinicalDocumentation
from healthchain.models import CdaRequest, CdaResponse
from fhir.resources.documentreference import DocumentReference

@hc.sandbox
class NotereaderSandbox(ClinicalDocumentation):
def __init__(self):
self.pipeline = MedicalCodingPipeline.from_model_id(
"en_core_sci_md", source="spacy"
)

# Load an existing CDA file
@hc.ehr(workflow="sign-note-inpatient")
def load_data_in_client(self) -> DocumentReference:
with open("/path/to/cda/data.xml", "r") as file:
xml_string = file.read()

cda_document_reference = create_document_reference(
data=xml_string,
content_type="text/xml",
description="Original CDA Document loaded from my sandbox",
)
return cda_document_reference

@hc.api
def my_service(self, data: CdaRequest) -> CdaResponse:
annotated_ccd = self.pipeline(data)
return annotated_ccd
```
### Running a sandbox

Ensure you run the following commands in your `mycds.py` file:

```python
cds = MyCDS()
cds.start_sandbox()
```
This will populate your EHR client with the data generation method you have defined, send requests to your server for processing, and save the data in the `./output` directory.

Then run:
```bash
healthchain run mycds.py
# Run with: healthchain run mycds.py
```
By default, the server runs at `http://127.0.0.1:8000`, and you can interact with the exposed endpoints at `/docs`.

## Road Map
- [x] 🔄 Transform and validate healthcare HL7v2, CDA to FHIR with template-based interop engine
- [ ] 🏥 Runtime connection health and EHR integration management - connect to FHIR APIs and legacy systems
- [ ] 🔒 Built-in HIPAA compliance validation and PHI detection
- [ ] 📊 Track configurations, data provenance, and monitor model performance with MLFlow integration
- [ ] 🚀 Compliance monitoring, auditing at deployment as a sidecar service
- [ ] 🔒 Built-in HIPAA compliance validation and PHI detection
- [ ] 🧠 Multi-modal pipelines that that have built-in NLP to utilize unstructured data
- [ ] 🔄 HL7v2 parsing and FHIR profile conversion support
- [ ] 🧠 Multi-modal pipelines


## Contribute
We are always eager to hear feedback and suggestions, especially if you are a developer or researcher working with healthcare systems!
- 💡 Let's chat! [Discord](https://discord.gg/UQC6uAepUz)
- 🛠️ [Contribution Guidelines](CONTRIBUTING.md)

## Acknowledgement
This repository makes use of [fhir.resources](https://github.com/nazrulworld/fhir.resources), and [CDS Hooks](https://cds-hooks.org/) developed by [HL7](https://www.hl7.org/) and [Boston Children’s Hospital](https://www.childrenshospital.org/).

## Acknowledgements 🤗
This project builds on [fhir.resources](https://github.com/nazrulworld/fhir.resources) and [CDS Hooks](https://cds-hooks.org/) standards developed by [HL7](https://www.hl7.org/) and [Boston Children's Hospital](https://www.childrenshospital.org/).
Binary file added docs/assets/images/openapi_docs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 15 additions & 14 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Welcome to HealthChain
# Welcome to HealthChain 💫 🏥

HealthChain 💫🏥 is an open-source Python framework designed to streamline the development, testing, and validation of AI, Natural Language Processing, and Machine Learning applications in a healthcare context.
HealthChain is an open-source Python framework for building real-time AI applications in a healthcare context.

[ :fontawesome-brands-discord: Join our Discord](https://discord.gg/UQC6uAepUz){ .md-button .md-button--primary }
&nbsp;&nbsp;&nbsp;&nbsp;
Expand All @@ -19,19 +19,19 @@ HealthChain 💫🏥 is an open-source Python framework designed to streamline t

[:octicons-arrow-right-24: Pipeline](reference/pipeline/pipeline.md)

- :octicons-beaker-24:{ .lg .middle } __Test in a sandbox__
- :material-connection:{ .lg .middle } __Connect to multiple data sources__

---

Test your models in a full health-context aware environment from day 1
Connect to multiple healthcare data sources and protocols with **HealthChainAPI**.

[:octicons-arrow-right-24: Sandbox](reference/sandbox/sandbox.md)
[:octicons-arrow-right-24: Gateway](reference/gateway/gateway.md)

- :material-database:{ .lg .middle } __Interoperability__

---

Configuration-driven InteropEngine to convert between FHIR, CDA, and HL7v2
Configuration-driven **InteropEngine** to convert between FHIR, CDA, and HL7v2

[:octicons-arrow-right-24: Interoperability](reference/interop/interop.md)

Expand All @@ -49,16 +49,17 @@ HealthChain 💫🏥 is an open-source Python framework designed to streamline t

## Why HealthChain?

You've probably heard every *AI will revolutionize healthcare* pitch by now, but if you're one of the people who think: wait, can we go beyond just vibe-checking and *actually* build products that are reliable, reactive, and easy to scale in complex healthcare systems? Then HealthChain is probably for you.
Healthcare AI development has a **missing middleware layer**. Traditional enterprise integration engines move data around, EHR platforms serve end users, but there's nothing in between for developers building AI applications that need to talk to multiple healthcare systems. Few solutions are open-source, and even fewer are built in modern Python where most ML/AI libraries thrive.

Specifically, HealthChain addresses two challenges:
HealthChain fills that gap with:

1. **Scaling Electronic Health Record system (EHRs) integrations of real-time AI, NLP, and ML applications is a manual and time-consuming process.**
- **🔥 FHIR-native ML pipelines** - Pre-built NLP/ML pipelines optimized for structured / unstructured healthcare data, or build your own with familiar Python libraries such as 🤗 Hugging Face, 🤖 LangChain, and 📚 spaCy
- **🔒 Type-safe healthcare data** - Full type hints and Pydantic validation for FHIR resources with automatic data validation and error handling
- **🔌 Multi-protocol connectivity** - Handle FHIR, CDS Hooks, and SOAP/CDA in the same codebase with OAuth2 authentication and connection pooling
- **⚡ Event-driven architecture** - Real-time event handling with audit trails and workflow automation built-in
- **🔄 Built-in interoperability** - Convert between FHIR, CDA, and HL7v2 using a template-based engine
- **🚀 Production-ready deployment** - FastAPI integration for scalable, real-time applications

2. **Testing and evaluating unstructured data in complex, outcome focused systems is a challenging and labour-intensive task.**

We believe more efficient end-to-end pipeline and integration testing at an early stage in development will give you back time to focus on what actually matters: developing safer, more effective and more explainable models that scale to real-world *adoption*. Building products for healthcare in a process that is *human*-centric.

HealthChain is made by a (very) small team with experience in software engineering, machine learning, and healthcare NLP. We understand that good data science is about more than just building models, and that good engineering is about more than just building systems. This rings especially true in healthcare, where people, processes, and technology all play a role in making an impact.
HealthChain is made by a small team with experience in software engineering, machine learning, and healthcare NLP. We understand that good data science is about more than just building models, and that good engineering is about more than just building systems. This rings especially true in healthcare, where people, processes, and technology all play a role in making an impact.

For inquiries and collaborations, please get [in touch](mailto:jenniferjiangkells@gmail.com)!
Loading