# Measurements resource

Canonical page: https://docs.ovok.com/flutter-sdk/reference/ovok_sdk/measurements-resource

{/* Generated by scripts/generate_reference.dart; do not edit. */}

## MeasurementsResource [#measurementsresource]

```dart
class MeasurementsResource
```

Builds and saves measurements as FHIR Observations, with an offline queue.

Reached through `ovok.measurements`. Every request throws an
[`OvokException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokexception) subclass when it fails.

### Constructors [#constructors]

#### MeasurementsResource.new [#measurementsresourcenew]

```dart
MeasurementsResource(
  HttpClient http,
  FhirResource fhir,
  UserSession session,
  OvokSecureStore storage,
  String queueKey,
)
```

Built by `Ovok`; use `ovok.measurements` instead.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `http` | `HttpClient` | positional |  |
| `fhir` | `FhirResource` | positional |  |
| `session` | `UserSession` | positional |  |
| `storage` | `OvokSecureStore` | positional |  |
| `queueKey` | `String` | positional |  |

### Properties [#properties]

#### MeasurementsResource.offlineQueue [#measurementsresourceofflinequeue]

```dart
final OfflineMeasurementQueueApi offlineQueue
```

Saves that wait to be retried.

### Methods [#methods]

#### MeasurementsResource.build [#measurementsresourcebuild]

```dart
Future<List<JsonMap>> build(BuildObservationsParams params)
```

Builds a measurement's Observations without saving them.

Throws [`OvokValidationException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokvalidationexception) when the measurement type is missing
or unsupported, or when no patient is named and no one is signed in.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `params` | `BuildObservationsParams` | positional |  |

Returns `Future<List<Map<String, dynamic>>>`.

#### MeasurementsResource.save [#measurementsresourcesave]

```dart
Future<SaveObservationsResult> save(BuildObservationsParams params, [SaveObservationsOptions options = const SaveObservationsOptions()])
```

Builds a measurement's Observations and saves them with [`saveObservations`](#measurementsresourcesaveobservations).

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `params` | `BuildObservationsParams` | positional |  |
| `options` | `SaveObservationsOptions` | optional positional | `const SaveObservationsOptions()` |

Returns `Future<SaveObservationsResult>`.

#### MeasurementsResource.saveObservations [#measurementsresourcesaveobservations]

```dart
Future<SaveObservationsResult> saveObservations(List<JsonMap> observations, [SaveObservationsOptions options = const SaveObservationsOptions()])
```

Saves one reading, main observation first, in a FHIR transaction.

Calls `POST {fhirPath}`; entries are created conditionally, so a retry
cannot duplicate them. While someone is signed in, the reading is queued
first and a retryable failure (connection, 429, 5xx) leaves it queued;
any other failure is thrown. Throws [`OvokConflictException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokconflictexception) when another
account signs in during a save that spans several requests.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `observations` | `List<Map<String, dynamic>>` | positional |  |
| `options` | `SaveObservationsOptions` | optional positional | `const SaveObservationsOptions()` |

Returns `Future<SaveObservationsResult>`.

#### MeasurementsResource.saveObservationGroups [#measurementsresourcesaveobservationgroups]

```dart
Future<JsonMap> saveObservationGroups(List<List<JsonMap>> groups, [SaveObservationsOptions options = const SaveObservationsOptions()])
```

Saves readings in as few requests as fit, with each main before its members.

One reading uses a transaction; several use batches and return one bundle.
Throws [`OvokConflictException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokconflictexception) if the signed-in account changes mid-save.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `groups` | `List<List<Map<String, dynamic>>>` | positional |  |
| `options` | `SaveObservationsOptions` | optional positional | `const SaveObservationsOptions()` |

Returns `Future<Map<String, dynamic>>`.

#### MeasurementsResource.latest [#measurementsresourcelatest]

```dart
Future<JsonMap> latest(JsonMap params)
```

Fetches the newest observation of each code. Calls `GET fhir/Observation/$lastn`.

`params` takes `patientId` or `me: true`, plus `codes` and a `date` lower
bound. Throws [`OvokValidationException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokvalidationexception) when neither names a patient.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `params` | `JsonMap` | positional |  |

Returns `Future<Map<String, dynamic>>`.

#### MeasurementsResource.lastForPatient [#measurementsresourcelastforpatient]

```dart
Future<JsonMap> lastForPatient(String patientId, QueryParams query)
```

Fetches a patient's last observations. Calls `GET patient/{patientId}/observation`.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `patientId` | `String` | positional |  |
| `query` | `QueryParams` | positional |  |

Returns `Future<Map<String, dynamic>>`.

#### MeasurementsResource.codesFor [#measurementsresourcecodesfor]

```dart
String codesFor(Iterable<String> types)
```

The comma-joined codes the types are saved under, as `latest` and FHIR `code` searches take them.

Throws [`OvokValidationException`](/flutter-sdk/reference/ovok_sdk/ovok-exception#ovokvalidationexception) for an unsupported type.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `types` | `Iterable<String>` | positional |  |

Returns `String`.


## offlineMeasurementStorageKey [#offlinemeasurementstoragekey]

```dart
String offlineMeasurementStorageKey(String tenantCode, String baseUrl)
```

The secure-store key of the offline queue for one tenant on one server.

| Parameter | Type | Kind | Default |
| ------ | ------ | ------ | ------ |
| `tenantCode` | `String` | positional |  |
| `baseUrl` | `String` | positional |  |
