Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions .fern/metadata.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"cliVersion": "5.49.0",
"cliVersion": "5.49.1",
"generatorName": "fernapi/fern-java-sdk",
"generatorVersion": "4.9.2",
"generatorConfig": {
Expand All @@ -10,10 +10,10 @@
"enable-wire-tests": true,
"publish-to": "central"
},
"originGitCommit": "5084e3096e5bd89bf2e86ea44d96e3407f6f5c6b",
"originGitCommit": "788cec0a9a7651caf2b106634631d487dfa16704",
"originGitCommitIsDirty": true,
"invokedBy": "ci",
"requestedVersion": "AUTO",
"ciProvider": "unknown",
"sdkVersion": "17.3.0"
"sdkVersion": "17.4.0"
}
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ java {

group = 'com.phenoml.maven'

version = '17.3.0'
version = '17.4.0'

jar {
dependsOn(":generatePomFileForMavenPublication")
Expand Down Expand Up @@ -79,7 +79,7 @@ publishing {
maven(MavenPublication) {
groupId = 'com.phenoml.maven'
artifactId = 'phenoml-java-sdk'
version = '17.3.0'
version = '17.4.0'
from components.java
pom {
name = 'phenoml'
Expand Down
10 changes: 10 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## [17.4.0] - 2026-06-15
### Added
- **`ConditionOccurrenceRow.getVisitOccurrenceId()`**, **`DrugExposureRow.getVisitOccurrenceId()`**, **`MeasurementRow.getVisitOccurrenceId()`**, **`ObservationRow.getVisitOccurrenceId()`**, and **`ProcedureOccurrenceRow.getVisitOccurrenceId()`** — new optional accessor linking each clinical OMOP row back to its `visit_occurrence` row.
- **`MeasurementRow.getOperatorConceptId()`** — new optional accessor carrying the OMOP "Meas Value Operator" standard concept (`<`, `<=`, `>`, `>=`) parsed from a FHIR `valueQuantity.comparator` or numeric-string value; `0` when no operator is present.

### Changed
- **`MappingEntry.getTargetCode()`** — value semantics updated: now the standard concept's own code for `ALREADY_STANDARD`, `MAPPED`, and `UNCHECKED` rows; empty for `UNMAPPED` rows.
- **`Summary`** — count-field docs clarify each total is counted once per resolved concept (not per coding), unlike `mappings`, which has one entry per coding.
- **`PhenomlClient.fhir2Omop().create(...)` Javadoc** — clarifies that a clinical `concept_id` of `0` covers both `UNMAPPED` and `UNCHECKED`, and that `operator_concept_id` is the one non-zero non-resolved concept on measurement rows.

## [17.3.0] - 2026-06-15
### Added
- **`PhenomlClient.fhir2Omop().create()`** — new method (sync and async) posting a FHIR R4 resource or Bundle to `POST /fhir2omop/create` and returning typed OMOP CDM v5.4 rows in both `resolved` and `structural` modes.
Expand Down
6 changes: 4 additions & 2 deletions code-examples.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"metadata": {
"language": "java",
"packageName": "com.phenoml.maven:phenoml-java-sdk",
"sdkVersion": "17.3.0",
"specCommit": "5084e3096e5bd89bf2e86ea44d96e3407f6f5c6b",
"sdkVersion": "17.4.0",
"specCommit": "788cec0a9a7651caf2b106634631d487dfa16704",
"generatorName": "fernapi/fern-java-sdk"
},
"renderRules": {
Expand Down Expand Up @@ -2298,6 +2298,7 @@
"source_code": "44054006",
"source_name": "Type 2 diabetes mellitus",
"target_vocabulary": "SNOMED",
"target_code": "44054006",
"target_name": "Type 2 diabetes mellitus",
"mapping_status": "ALREADY_STANDARD"
},
Expand All @@ -2310,6 +2311,7 @@
"source_code": "860975",
"source_name": "metformin hydrochloride 500 MG",
"target_vocabulary": "RXNORM",
"target_code": "860975",
"target_name": "metformin hydrochloride 500 MG",
"mapping_status": "ALREADY_STANDARD"
}
Expand Down
13 changes: 8 additions & 5 deletions reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -3043,12 +3043,15 @@ to the row it produced), `dropped` (resources that could not be shaped
into a row), `vocab_version` (the OMOP vocabulary release codes were
resolved against), and a small `summary` of the resolution outcomes.

A `concept_id` of `0` means "no matching standard concept" (OMOP
semantics) and is reported, not omitted — a coding with no match is
`UNMAPPED`. Only the primary clinical coding is resolved;
A `concept_id` of `0` is reported, not omitted (OMOP "no matching
concept" semantics): it covers both a coding with no standard match
(`UNMAPPED`) and an unverified suggestion for a text-only resource
(`UNCHECKED`). Only the primary clinical coding is resolved, so
`gender`/`race`/`ethnicity`/`visit`/`value`/`unit` `concept_id`s are
always `0`. Each `*_source_value` carries the verbatim FHIR coding
(`system#code`), and `*_type_concept_id` is set to `32817` (EHR).
always `0`; the one populated non-resolved concept is measurement
`operator_concept_id`, set from a value comparator (`<`, `<=`, `>`, `>=`)
rather than the resolver. Each `*_source_value` carries the verbatim FHIR
coding (`system#code`), and `*_type_concept_id` is set to `32817` (EHR).

Medication codes are resolved whether they appear inline
(`medicationCodeableConcept`) or via a `medicationReference` to a contained,
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/phenoml/api/core/ClientOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ private ClientOptions(
this.headers.putAll(headers);
this.headers.putAll(new HashMap<String, String>() {
{
put("User-Agent", "com.phenoml.maven:phenoml-java-sdk/17.3.0");
put("User-Agent", "com.phenoml.maven:phenoml-java-sdk/17.4.0");
put("X-Fern-Language", "JAVA");
put("X-Fern-SDK-Name", "com.phenoml.fern:api-sdk");
put("X-Fern-SDK-Version", "17.3.0");
put("X-Fern-SDK-Version", "17.4.0");
}
});
this.headerSuppliers = headerSuppliers;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,15 @@ public AsyncRawFhir2OmopClient withRawResponse() {
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand All @@ -65,12 +68,15 @@ public CompletableFuture<CreateOmopResponse> create(CreateOmopRequest request) {
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,15 @@ public AsyncRawFhir2OmopClient(ClientOptions clientOptions) {
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand All @@ -76,12 +79,15 @@ public CompletableFuture<PhenomlClientHttpResponse<CreateOmopResponse>> create(C
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,15 @@ public RawFhir2OmopClient withRawResponse() {
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand All @@ -64,12 +67,15 @@ public CreateOmopResponse create(CreateOmopRequest request) {
* to the row it produced), <code>dropped</code> (resources that could not be shaped
* into a row), <code>vocab_version</code> (the OMOP vocabulary release codes were
* resolved against), and a small <code>summary</code> of the resolution outcomes.</p>
* <p>A <code>concept_id</code> of <code>0</code> means &quot;no matching standard concept&quot; (OMOP
* semantics) and is reported, not omitted — a coding with no match is
* <code>UNMAPPED</code>. Only the primary clinical coding is resolved;
* <p>A <code>concept_id</code> of <code>0</code> is reported, not omitted (OMOP &quot;no matching
* concept&quot; semantics): it covers both a coding with no standard match
* (<code>UNMAPPED</code>) and an unverified suggestion for a text-only resource
* (<code>UNCHECKED</code>). Only the primary clinical coding is resolved, so
* <code>gender</code>/<code>race</code>/<code>ethnicity</code>/<code>visit</code>/<code>value</code>/<code>unit</code> <code>concept_id</code>s are
* always <code>0</code>. Each <code>*_source_value</code> carries the verbatim FHIR coding
* (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* always <code>0</code>; the one populated non-resolved concept is measurement
* <code>operator_concept_id</code>, set from a value comparator (<code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>)
* rather than the resolver. Each <code>*_source_value</code> carries the verbatim FHIR
* coding (<code>system#code</code>), and <code>*_type_concept_id</code> is set to <code>32817</code> (EHR).</p>
* <p>Medication codes are resolved whether they appear inline
* (<code>medicationCodeableConcept</code>) or via a <code>medicationReference</code> to a contained,
* relative (<code>Type/id</code>), or bundle-entry (<code>urn:uuid</code>) <code>Medication</code> resource.
Expand Down
Loading