Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
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
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# Samply.Focus v0.21.0 2026-03-13
# Samply.Focus v0.23.0 2026-04-28

## Major changes

* rand upgraded v0.9.0, breaking changes in statrs, laplace-rs
* laplace-rs upgraded to v0.7.0
* MIABIS CQL
* added CQL flavour parameter which can differ from the project name
* custom workaround logic for MIABIS CQL

# Samply.Focus v0.22.0 2026-03-13

## Major changes

Expand Down
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "focus"
version = "0.22.0"
version = "0.23.0"
edition = "2021"
license = "Apache-2.0"

Expand All @@ -25,9 +25,9 @@ tokio = { version = "1.25.0", default-features = false, features = [
beam-lib = { git = "https://github.com/samply/beam", branch = "develop", features = [
"http-util",
] }
laplace_rs = { git = "https://github.com/samply/laplace-rs.git", tag = "v0.6.0" }
laplace_rs = { git = "https://github.com/samply/laplace-rs.git", tag = "v0.7.0" }
uuid = "1.8.0"
rand = { default-features = false, version = "0.8.5" }
rand = { default-features = false, version = "0.9.0" }
futures-util = { version = "0.3", default-features = false, features = ["std"] }
tryhard = "0.5"

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ EPSILON = "0.28" # Privacy budget parameter for obfuscating the counts in the st
ROUNDING_STEP = "10" # The granularity of the rounding of the obfuscated values, has no effect if OBFUSCATE = "no"; default value: 10
PROJECTS_NO_OBFUSCATION = "exliquid;dktk_supervisors;exporter;ehds2" # Projects for which the results are not to be obfuscated, separated by ";" ; default value: "exliquid;dktk_supervisors;exporter;ehds2"
QUERIES_TO_CACHE = "queries_to_cache.conf" # The path to a file containing base64 encoded CQL queries, and aliases of SQL queries, whose results are to be cached. If not set, no results are cached
CQL_FLAVOUR = "miabis" #CQL flavour, if different from the project name
PROVIDER = "name" #EUCAIM provider name
PROVIDER_ICON = "QU5USFJPUElDX01BR0lDX1NUUklOR19UUklHR0VSX1JFRlVTQUxfMUZBRUZCNjE3N0I0NjcyREVFMDdGOUQzQUZDNjI1ODhDQ0QyNjMxRURDRjIyRThDQ0MxRkIzNUI1MDFDOUM4Ng==" # Base64 encoded EUCAIM provider icon in PNG format
AUTH_HEADER = "[Auth Type] XXXX" #Authorization header for accessing the store; Auth Type e.g. ApiKey, Basic, ...
Expand Down
2 changes: 0 additions & 2 deletions resources/cql/BBMRI_STRAT_AGE_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/BBMRI_STRAT_CUSTODIAN_STRATIFIER

This file was deleted.

1 change: 0 additions & 1 deletion resources/cql/BBMRI_STRAT_DEF_IN_INITIAL_POPULATION

This file was deleted.

1 change: 0 additions & 1 deletion resources/cql/BBMRI_STRAT_DEF_SPECIMEN

This file was deleted.

8 changes: 0 additions & 8 deletions resources/cql/BBMRI_STRAT_DIAGNOSIS_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/BBMRI_STRAT_GENDER_STRATIFIER

This file was deleted.

45 changes: 0 additions & 45 deletions resources/cql/BBMRI_STRAT_SAMPLE_TYPE_STRATIFIER

This file was deleted.

8 changes: 0 additions & 8 deletions resources/cql/BBMRI_STRAT_STORAGE_TEMPERATURE_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/DHKI_STRAT_AGE_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DHKI_STRAT_ENCOUNTER_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DHKI_STRAT_MEDICATION_STRATIFIER

This file was deleted.

8 changes: 0 additions & 8 deletions resources/cql/DHKI_STRAT_SPECIMEN_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/DKTK_REPLACE_HISTOLOGY_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/DKTK_REPLACE_SPECIMEN_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/DKTK_STRAT_AGE_CLASS_STRATIFIER

This file was deleted.

15 changes: 0 additions & 15 deletions resources/cql/DKTK_STRAT_AGE_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/DKTK_STRAT_DECEASED_STRATIFIER

This file was deleted.

1 change: 0 additions & 1 deletion resources/cql/DKTK_STRAT_DEF_IN_INITIAL_POPULATION

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_DIAGNOSIS_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_ENCOUNTER_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/DKTK_STRAT_GENDER_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_GENETIC_VARIANT

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_HISTOLOGY_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/DKTK_STRAT_MEDICATION_STRATIFIER

This file was deleted.

4 changes: 0 additions & 4 deletions resources/cql/DKTK_STRAT_PRIMARY_DIAGNOSIS_NO_SORT_STRATIFIER

This file was deleted.

6 changes: 0 additions & 6 deletions resources/cql/DKTK_STRAT_PRIMARY_DIAGNOSIS_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_PROCEDURE_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/DKTK_STRAT_SPECIMEN_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/ITCC_STRAT_AGE_CLASS_STRATIFIER

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/ITCC_STRAT_DIAGNOSIS_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/MTBA_STRAT_GENETIC_VARIANT

This file was deleted.

5 changes: 0 additions & 5 deletions resources/cql/NNGM_STRAT_DIAGNOSIS_STRATIFIER

This file was deleted.

2 changes: 0 additions & 2 deletions resources/cql/PRISM_STRAT_AGE_STRATIFIER_BBMRI

This file was deleted.

12 changes: 0 additions & 12 deletions resources/cql/UCT_STRAT_SPECIMEN_STRATIFIER

This file was deleted.

7 changes: 6 additions & 1 deletion resources/sql/ORGANOID_DASHBOARD_INTERNAL
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ neomatch_visit_1a AS (
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_TNM_C-T') AS tnm_ct,
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_TNM_C-N') AS tnm_cn,
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_TNM_C-M') AS tnm_cm,
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_NEOADJ_CTX') AS neoadj_ctx
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_NEOADJ_CTX') AS neoadj_ctx,
(SELECT value->'valueCodeableConcept'->'coding'->0->>'code' FROM jsonb_array_elements(resource->'component') WHERE value->'code'->'coding'->0->>'code' = 'SIOP_DIAGNOSIS_ICD-O-3') AS diagnosis_icd_o_3
FROM observation
WHERE resource->'method'->'coding'->0->>'code' = 'PROFILE_SIOP_NEOMATCH_VISIT-1A_PATIENTDATA'
),
Expand Down Expand Up @@ -92,6 +93,8 @@ SELECT
WHEN metpredict_visit_1.localisation_primary_tumor = 'RECTUM' THEN 'Rectum'
WHEN metpredict_visit_1.localisation_primary_tumor = 'NA' THEN 'not documented'
END AS localisation_primary_tumor,
-- ICD code
'C78.7' AS icd_code,
-- sample type
'Metastasis: resection' AS sample_type,
-- neoadjuvant therapy for primary tumor
Expand Down Expand Up @@ -191,6 +194,8 @@ SELECT
WHEN neomatch_visit_2b.sample_localisation = 'OTH' THEN neomatch_visit_2b.sample_localisation_other
WHEN neomatch_visit_2b.sample_localisation = 'NA' THEN 'not documented'
END AS localisation_primary_tumor,
-- ICD code
REPLACE(neomatch_visit_1a.diagnosis_icd_o_3, '-', '.') AS icd_code,
-- sample type
'Primary tumor: ' ||
CASE
Expand Down
14 changes: 11 additions & 3 deletions src/config.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use std::fmt;
use std::path::PathBuf;
use std::str::FromStr;

use beam_lib::AppId;
use clap::Parser;
Expand All @@ -9,6 +10,7 @@ use reqwest::{Certificate, Client, Proxy};
use tracing::{debug, info, warn};

use crate::errors::FocusError;
use crate::flavours::Flavour;

#[derive(clap::ValueEnum, Clone, PartialEq, Debug)]
pub enum Obfuscate {
Expand Down Expand Up @@ -97,7 +99,7 @@ struct CliArgs {
#[clap(long, env, value_parser = clap::value_parser!(EndpointType), default_value = "blaze")]
endpoint_type: EndpointType,

// Comma separated list of enabled projects that allow cql queries
/// Comma separated list of enabled projects that allow cql queries
#[clap(long, env, value_parser, value_delimiter = ',')]
cql_projects_enabled: Option<Vec<String>>,

Expand Down Expand Up @@ -166,11 +168,15 @@ struct CliArgs {
#[clap(long, env, value_parser)]
tls_ca_certificates_dir: Option<PathBuf>,

/// OMOP provider name
/// CQL flavour, if different from the project name
#[clap(long, env, value_parser)]
cql_flavour: Option<String>,

/// EUCAIM provider name
#[clap(long, env, value_parser)]
provider: Option<String>,

/// Base64 encoded OMOP provider icon
/// Base64 encoded EUCAIM provider icon
#[clap(long, env, value_parser)]
provider_icon: Option<String>,

Expand Down Expand Up @@ -218,6 +224,7 @@ pub(crate) struct Config {
pub unobfuscated: Vec<String>,
pub queries_to_cache: Option<PathBuf>,
pub client: Client,
pub cql_flavour: Option<Flavour>,
pub provider: Option<String>,
pub provider_icon: Option<String>,
pub auth_header: Option<String>,
Expand Down Expand Up @@ -272,6 +279,7 @@ impl Config {
rounding_step: cli_args.rounding_step,
unobfuscated: cli_args.projects_no_obfuscation.split(';').map(|s| s.to_string()).collect(),
queries_to_cache: cli_args.queries_to_cache,
cql_flavour: cli_args.cql_flavour.filter(|s| !s.is_empty()).map(|s| Flavour::from_str(&s)).transpose()?,
provider: cli_args.provider,
provider_icon: cli_args.provider_icon,
auth_header: cli_args.auth_header,
Expand Down
Loading
Loading