Serialisation utilities for OMOP CDM cohorts and CQI builder
Project description
OA Cohorts – Reporting & Cohort Execution Engine
This package provides the core machinery for defining, executing, and inspecting cohort-based reports over OMOP-style clinical data. It’s designed to support building real-world evidence reports from composable clinical rules, measures, cohorts, and indicators, with both programmatic APIs and lightweight HTML rendering for debugging and exploration.
The framework implemented here supports configuration-driven clinical quality indicators over OMOP-harmonised data, with explicit support for disease and treatment episodes, temporality, and combinatorial logic. Measures can be defined in terms of diagnoses, treatments, procedures, observations, measurements, and demographics, and composed into clinically interpretable cohorts and indicators.
This enables the same indicator definitions to support bulk benchmarking, trend analysis over time, and patient-level drill-down, without rewriting query logic for each use case. In practice, this provides a bridge between formal indicator specifications and the operational reality of multidisciplinary care.
At a high level, the system lets you:
- Define query rules (exact, hierarchical, scalar thresholds, phenotypes, etc.)
- Combine rules into subqueries
- Build measures from subqueries (including composite measures with AND/OR/EXCEPT logic)
- Group measures into dash cohorts and cohort definitions
- Define indicators (numerator/denominator pairs)
- Assemble everything into a report
- Execute the report against a database session and materialise results as in-memory member sets
- Inspect SQL, executability, and structure via HTML renderers (handy in notebooks)
This is intentionally object-centric: once a report is executed, downstream payloads are assembled from the resolved cohort and indicator member sets, with report-level demography fetched only for the in-scope cohort person_ids.
What’s here (roughly)
Report / ReportCohortMap: Top-level report definition, linking cohorts and indicators.DashCohort / DashCohortDef: User-facing cohort groupings backed by executable measures.Measure / MeasureSQLCompiler / MeasureExecutor: The core executable units. Measures compile to SQL, execute against a session, and materialise member sets with dating and episode context.Indicator: Numerator/denominator semantics over measures, including optional indicator-level relative date windows anchored to report cohort membership.QueryRule (+ subclasses): The rule DSL: exact matches, hierarchies, exclusions, scalar thresholds, phenotypes, substring matches, etc.HTMLRenderable mixins: Lightweight visualisation of structure, SQL previews, and executability for debugging and exploration.
Execution model
report.execute(session)
report.assert_executed()
rows = report.members(executor) # all cohort members
indicators = report.indicators # output rows are built per denominator member within the report cohort
Indicator-relative date windows
Indicators can optionally define dynamic numerator and denominator date windows using:
numerator_max_days_priornumerator_max_days_postdenominator_max_days_priordenominator_max_days_post
These windows are evaluated relative to the report cohort membership date, not globally on the reusable measure definition. This keeps measures portable while allowing the same measure to participate in different indicators with different timing requirements.
Execution semantics:
- measures still execute broadly and materialise their full
MeasureMembersets - indicator row assembly then narrows numerator and denominator rows relative to the in-scope report cohort membership date
- when the denominator is the full report cohort (
measure_id = 0), filtering is still evaluated per cohort membership row so different in-scope episodes for the same person can qualify differently - if a window is configured and either the anchor date or candidate member date is missing, that candidate does not satisfy the dated comparison
Status
This is a working internal engine under active development. APIs may shift.
Docker
The repo includes a lightweight CLI container under docker/docker-compose.yaml that joins the external cava-network and expects an ENGINE SQLAlchemy URL.
Example:
cd docker
docker compose up -d oa-cohorts
docker compose exec oa-cohorts oa-cohorts --help
docker compose exec oa-cohorts oa-cohorts import-config /app/dash_config
The database host in ENGINE should be reachable on cava-network, for example postgresql+psycopg2://user:password@postgres:5432/dbname.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oa_cohorts-0.4.2.tar.gz.
File metadata
- Download URL: oa_cohorts-0.4.2.tar.gz
- Upload date:
- Size: 47.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f88613dbaba3599da1877074c9d06659160944660f56c5c53c9c4ef399e2578
|
|
| MD5 |
0f287325d2f7f41c6a71d961707735a4
|
|
| BLAKE2b-256 |
3bf82ac28ca7b4c51febfd6578faac50663c3d14bbe4ca8d4aa2f76c4e04238e
|
Provenance
The following attestation bundles were made for oa_cohorts-0.4.2.tar.gz:
Publisher:
pypi.yml on AustralianCancerDataNetwork/oa_cohort
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oa_cohorts-0.4.2.tar.gz -
Subject digest:
2f88613dbaba3599da1877074c9d06659160944660f56c5c53c9c4ef399e2578 - Sigstore transparency entry: 1448148196
- Sigstore integration time:
-
Permalink:
AustralianCancerDataNetwork/oa_cohort@a116660980af5ff3bc60d25add73336e4259a3b6 -
Branch / Tag:
refs/tags/0.4.2 - Owner: https://github.com/AustralianCancerDataNetwork
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@a116660980af5ff3bc60d25add73336e4259a3b6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file oa_cohorts-0.4.2-py3-none-any.whl.
File metadata
- Download URL: oa_cohorts-0.4.2-py3-none-any.whl
- Upload date:
- Size: 64.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3688284fa0e5adaab1197fd4c5236cc60ba921052645666db93074afbcae73d5
|
|
| MD5 |
e6a358a9d4fb15e0d81bf2da9c08a77d
|
|
| BLAKE2b-256 |
16adbdcb1d3ab476ffbb8e59a05eeff361faa42965c639cd596cbac606f26e09
|
Provenance
The following attestation bundles were made for oa_cohorts-0.4.2-py3-none-any.whl:
Publisher:
pypi.yml on AustralianCancerDataNetwork/oa_cohort
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oa_cohorts-0.4.2-py3-none-any.whl -
Subject digest:
3688284fa0e5adaab1197fd4c5236cc60ba921052645666db93074afbcae73d5 - Sigstore transparency entry: 1448148257
- Sigstore integration time:
-
Permalink:
AustralianCancerDataNetwork/oa_cohort@a116660980af5ff3bc60d25add73336e4259a3b6 -
Branch / Tag:
refs/tags/0.4.2 - Owner: https://github.com/AustralianCancerDataNetwork
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@a116660980af5ff3bc60d25add73336e4259a3b6 -
Trigger Event:
release
-
Statement type: