@icure/cardinal-sdk 2.9.0 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Kotlin-DateTime-library-kotlinx-datetime.mjs +1 -1
- package/cardinal-sdk-ts.mjs +39694 -39598
- package/cardinal-sdk.mjs +71309 -70898
- package/kotlinx-coroutines-core.mjs +7 -7
- package/model/Contact.d.mts +3 -3
- package/model/Contact.mjs +3 -3
- package/model/HealthElement.d.mts +3 -3
- package/model/HealthElement.mjs +3 -3
- package/model/Patient.d.mts +3 -3
- package/model/Patient.mjs +3 -3
- package/model/embed/Address.d.mts +3 -3
- package/model/embed/Address.mjs +3 -3
- package/model/embed/Annotation.d.mts +127 -4
- package/model/embed/Annotation.mjs +137 -4
- package/model/embed/ReferenceRange.d.mts +2 -2
- package/model/embed/ReferenceRange.mjs +2 -2
- package/model/embed/Service.d.mts +3 -3
- package/model/embed/Service.mjs +3 -3
- package/options/SdkOptions.d.mts +18 -12
- package/package.json +1 -1
|
@@ -235,6 +235,11 @@ initMetadataForClass(BufferedChannelIterator, 'BufferedChannelIterator', VOID, V
|
|
|
235
235
|
initMetadataForCoroutine($sendCOROUTINE$, CoroutineImpl);
|
|
236
236
|
initMetadataForCoroutine($receiveCOROUTINE$, CoroutineImpl);
|
|
237
237
|
initMetadataForCoroutine($receiveCatchingCOROUTINE$, CoroutineImpl);
|
|
238
|
+
function close$default(cause, $super) {
|
|
239
|
+
cause = cause === VOID ? null : cause;
|
|
240
|
+
return $super === VOID ? this.s1d(cause) : $super.s1d.call(this, cause);
|
|
241
|
+
}
|
|
242
|
+
initMetadataForInterface(SendChannel, 'SendChannel', VOID, VOID, VOID, [1]);
|
|
238
243
|
function cancel$default_0(cause, $super) {
|
|
239
244
|
cause = cause === VOID ? null : cause;
|
|
240
245
|
var tmp;
|
|
@@ -247,12 +252,7 @@ function cancel$default_0(cause, $super) {
|
|
|
247
252
|
return tmp;
|
|
248
253
|
}
|
|
249
254
|
initMetadataForInterface(ReceiveChannel, 'ReceiveChannel', VOID, VOID, VOID, [0]);
|
|
250
|
-
|
|
251
|
-
cause = cause === VOID ? null : cause;
|
|
252
|
-
return $super === VOID ? this.s1d(cause) : $super.s1d.call(this, cause);
|
|
253
|
-
}
|
|
254
|
-
initMetadataForInterface(SendChannel, 'SendChannel', VOID, VOID, VOID, [1]);
|
|
255
|
-
initMetadataForClass(BufferedChannel, 'BufferedChannel', VOID, VOID, [ReceiveChannel, SendChannel], [1, 4, 0, 3]);
|
|
255
|
+
initMetadataForClass(BufferedChannel, 'BufferedChannel', VOID, VOID, [SendChannel, ReceiveChannel], [1, 4, 0, 3]);
|
|
256
256
|
initMetadataForClass(WaiterEB, 'WaiterEB');
|
|
257
257
|
initMetadataForClass(ReceiveCatching, 'ReceiveCatching', VOID, VOID, [Waiter]);
|
|
258
258
|
initMetadataForObject(Factory, 'Factory');
|
|
@@ -262,7 +262,7 @@ initMetadataForCompanion(Companion);
|
|
|
262
262
|
initMetadataForClass(ChannelResult, 'ChannelResult');
|
|
263
263
|
initMetadataForClass(ClosedReceiveChannelException, 'ClosedReceiveChannelException', VOID, NoSuchElementException);
|
|
264
264
|
initMetadataForClass(ClosedSendChannelException, 'ClosedSendChannelException', VOID, IllegalStateException);
|
|
265
|
-
initMetadataForClass(ChannelCoroutine, 'ChannelCoroutine', VOID, AbstractCoroutine, [
|
|
265
|
+
initMetadataForClass(ChannelCoroutine, 'ChannelCoroutine', VOID, AbstractCoroutine, [SendChannel, ReceiveChannel], [1, 0]);
|
|
266
266
|
initMetadataForClass(ConflatedBufferedChannel, 'ConflatedBufferedChannel', VOID, BufferedChannel, VOID, [1, 0]);
|
|
267
267
|
initMetadataForInterface(ProducerScope, 'ProducerScope', VOID, VOID, [CoroutineScope, SendChannel], [1]);
|
|
268
268
|
initMetadataForClass(ProducerCoroutine, 'ProducerCoroutine', VOID, ChannelCoroutine, [ProducerScope], [1, 0]);
|
package/model/Contact.d.mts
CHANGED
|
@@ -6,7 +6,7 @@ import { ICureDocument } from './base/ICureDocument.mjs';
|
|
|
6
6
|
import { Identifier } from './base/Identifier.mjs';
|
|
7
7
|
import { StoredDocument } from './base/StoredDocument.mjs';
|
|
8
8
|
import { Address, DecryptedAddress, EncryptedAddress } from './embed/Address.mjs';
|
|
9
|
-
import { Annotation } from './embed/Annotation.mjs';
|
|
9
|
+
import { Annotation, DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
10
10
|
import { ContactParticipant } from './embed/ContactParticipant.mjs';
|
|
11
11
|
import { Delegation } from './embed/Delegation.mjs';
|
|
12
12
|
import { Encryptable } from './embed/Encryptable.mjs';
|
|
@@ -272,7 +272,7 @@ export declare class DecryptedContact {
|
|
|
272
272
|
*
|
|
273
273
|
* Comments and notes recorded by a healthcare party about this contact.
|
|
274
274
|
*/
|
|
275
|
-
notes: Array<
|
|
275
|
+
notes: Array<DecryptedAnnotation>;
|
|
276
276
|
readonly isEncrypted: false;
|
|
277
277
|
constructor(partial: Partial<DecryptedContact>);
|
|
278
278
|
toJSON(): object;
|
|
@@ -453,7 +453,7 @@ export declare class EncryptedContact {
|
|
|
453
453
|
*
|
|
454
454
|
* Comments and notes recorded by a healthcare party about this contact.
|
|
455
455
|
*/
|
|
456
|
-
notes: Array<
|
|
456
|
+
notes: Array<EncryptedAnnotation>;
|
|
457
457
|
readonly isEncrypted: true;
|
|
458
458
|
constructor(partial: Partial<EncryptedContact>);
|
|
459
459
|
toJSON(): object;
|
package/model/Contact.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { randomUuid } from '../utils/Id.mjs';
|
|
|
4
4
|
import { CodeStub } from './base/CodeStub.mjs';
|
|
5
5
|
import { Identifier } from './base/Identifier.mjs';
|
|
6
6
|
import { DecryptedAddress, EncryptedAddress } from './embed/Address.mjs';
|
|
7
|
-
import {
|
|
7
|
+
import { DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
8
8
|
import { ContactParticipant } from './embed/ContactParticipant.mjs';
|
|
9
9
|
import { Delegation } from './embed/Delegation.mjs';
|
|
10
10
|
import { SecurityMetadata } from './embed/SecurityMetadata.mjs';
|
|
@@ -319,7 +319,7 @@ export class DecryptedContact {
|
|
|
319
319
|
encryptionKeys: expectMap(extractEntry(jCpy, 'encryptionKeys', false, path), false, [...path, ".encryptionKeys"], (k0, p0) => expectString(k0, false, p0), (v0, p0) => expectArray(v0, false, p0, (x1, p1) => expectObject(x1, false, ignoreUnknownKeys, p1, Delegation.fromJSON))),
|
|
320
320
|
encryptedSelf: expectString(extractEntry(jCpy, 'encryptedSelf', false, path), true, [...path, ".encryptedSelf"]),
|
|
321
321
|
securityMetadata: expectObject(extractEntry(jCpy, 'securityMetadata', false, path), true, ignoreUnknownKeys, [...path, ".securityMetadata"], SecurityMetadata.fromJSON),
|
|
322
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
322
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedAnnotation.fromJSON)),
|
|
323
323
|
});
|
|
324
324
|
if (!ignoreUnknownKeys) {
|
|
325
325
|
const unused = Object.keys(jCpy);
|
|
@@ -638,7 +638,7 @@ export class EncryptedContact {
|
|
|
638
638
|
encryptionKeys: expectMap(extractEntry(jCpy, 'encryptionKeys', false, path), false, [...path, ".encryptionKeys"], (k0, p0) => expectString(k0, false, p0), (v0, p0) => expectArray(v0, false, p0, (x1, p1) => expectObject(x1, false, ignoreUnknownKeys, p1, Delegation.fromJSON))),
|
|
639
639
|
encryptedSelf: expectString(extractEntry(jCpy, 'encryptedSelf', false, path), true, [...path, ".encryptedSelf"]),
|
|
640
640
|
securityMetadata: expectObject(extractEntry(jCpy, 'securityMetadata', false, path), true, ignoreUnknownKeys, [...path, ".securityMetadata"], SecurityMetadata.fromJSON),
|
|
641
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
641
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, EncryptedAnnotation.fromJSON)),
|
|
642
642
|
});
|
|
643
643
|
if (!ignoreUnknownKeys) {
|
|
644
644
|
const unused = Object.keys(jCpy);
|
|
@@ -4,7 +4,7 @@ import { HasEndOfLife } from './base/HasEndOfLife.mjs';
|
|
|
4
4
|
import { ICureDocument } from './base/ICureDocument.mjs';
|
|
5
5
|
import { Identifier } from './base/Identifier.mjs';
|
|
6
6
|
import { StoredDocument } from './base/StoredDocument.mjs';
|
|
7
|
-
import { Annotation } from './embed/Annotation.mjs';
|
|
7
|
+
import { Annotation, DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
8
8
|
import { CareTeamMember, DecryptedCareTeamMember, EncryptedCareTeamMember } from './embed/CareTeamMember.mjs';
|
|
9
9
|
import { Delegation } from './embed/Delegation.mjs';
|
|
10
10
|
import { Encryptable } from './embed/Encryptable.mjs';
|
|
@@ -210,7 +210,7 @@ export declare class DecryptedHealthElement {
|
|
|
210
210
|
*
|
|
211
211
|
* Localized text annotations for the healthcare element.
|
|
212
212
|
*/
|
|
213
|
-
notes: Array<
|
|
213
|
+
notes: Array<DecryptedAnnotation>;
|
|
214
214
|
/**
|
|
215
215
|
*
|
|
216
216
|
* Whether the healthcare element is relevant or not.
|
|
@@ -394,7 +394,7 @@ export declare class EncryptedHealthElement {
|
|
|
394
394
|
*
|
|
395
395
|
* Localized text annotations for the healthcare element.
|
|
396
396
|
*/
|
|
397
|
-
notes: Array<
|
|
397
|
+
notes: Array<EncryptedAnnotation>;
|
|
398
398
|
/**
|
|
399
399
|
*
|
|
400
400
|
* Whether the healthcare element is relevant or not.
|
package/model/HealthElement.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { expectArray, expectBoolean, expectMap, expectNumber, expectObject, expe
|
|
|
3
3
|
import { randomUuid } from '../utils/Id.mjs';
|
|
4
4
|
import { CodeStub } from './base/CodeStub.mjs';
|
|
5
5
|
import { Identifier } from './base/Identifier.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import { DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
7
7
|
import { DecryptedCareTeamMember, EncryptedCareTeamMember } from './embed/CareTeamMember.mjs';
|
|
8
8
|
import { Delegation } from './embed/Delegation.mjs';
|
|
9
9
|
import { DecryptedEpisode, EncryptedEpisode } from './embed/Episode.mjs';
|
|
@@ -327,7 +327,7 @@ export class DecryptedHealthElement {
|
|
|
327
327
|
closingDate: expectNumber(extractEntry(jCpy, 'closingDate', false, path), true, true, [...path, ".closingDate"]),
|
|
328
328
|
descr: expectString(extractEntry(jCpy, 'descr', false, path), true, [...path, ".descr"]),
|
|
329
329
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
330
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
330
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedAnnotation.fromJSON)),
|
|
331
331
|
relevant: expectBoolean(extractEntry(jCpy, 'relevant', false, path), false, [...path, ".relevant"]),
|
|
332
332
|
idOpeningContact: expectString(extractEntry(jCpy, 'idOpeningContact', false, path), true, [...path, ".idOpeningContact"]),
|
|
333
333
|
idClosingContact: expectString(extractEntry(jCpy, 'idClosingContact', false, path), true, [...path, ".idClosingContact"]),
|
|
@@ -668,7 +668,7 @@ export class EncryptedHealthElement {
|
|
|
668
668
|
closingDate: expectNumber(extractEntry(jCpy, 'closingDate', false, path), true, true, [...path, ".closingDate"]),
|
|
669
669
|
descr: expectString(extractEntry(jCpy, 'descr', false, path), true, [...path, ".descr"]),
|
|
670
670
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
671
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
671
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, EncryptedAnnotation.fromJSON)),
|
|
672
672
|
relevant: expectBoolean(extractEntry(jCpy, 'relevant', false, path), false, [...path, ".relevant"]),
|
|
673
673
|
idOpeningContact: expectString(extractEntry(jCpy, 'idOpeningContact', false, path), true, [...path, ".idOpeningContact"]),
|
|
674
674
|
idClosingContact: expectString(extractEntry(jCpy, 'idClosingContact', false, path), true, [...path, ".idClosingContact"]),
|
package/model/Patient.d.mts
CHANGED
|
@@ -8,7 +8,7 @@ import { Identifier } from './base/Identifier.mjs';
|
|
|
8
8
|
import { Person } from './base/Person.mjs';
|
|
9
9
|
import { StoredDocument } from './base/StoredDocument.mjs';
|
|
10
10
|
import { DecryptedAddress, EncryptedAddress } from './embed/Address.mjs';
|
|
11
|
-
import { Annotation } from './embed/Annotation.mjs';
|
|
11
|
+
import { Annotation, DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
12
12
|
import { Delegation } from './embed/Delegation.mjs';
|
|
13
13
|
import { Encryptable } from './embed/Encryptable.mjs';
|
|
14
14
|
import { DecryptedFinancialInstitutionInformation, EncryptedFinancialInstitutionInformation, FinancialInstitutionInformation } from './embed/FinancialInstitutionInformation.mjs';
|
|
@@ -422,7 +422,7 @@ export declare class DecryptedPatient {
|
|
|
422
422
|
*
|
|
423
423
|
* Localized text notes (can be confidential).
|
|
424
424
|
*/
|
|
425
|
-
notes: Array<
|
|
425
|
+
notes: Array<DecryptedAnnotation>;
|
|
426
426
|
/**
|
|
427
427
|
*
|
|
428
428
|
* A text note (can be confidential, encrypted by default).
|
|
@@ -790,7 +790,7 @@ export declare class EncryptedPatient {
|
|
|
790
790
|
*
|
|
791
791
|
* Localized text notes (can be confidential).
|
|
792
792
|
*/
|
|
793
|
-
notes: Array<
|
|
793
|
+
notes: Array<EncryptedAnnotation>;
|
|
794
794
|
/**
|
|
795
795
|
*
|
|
796
796
|
* A text note (can be confidential, encrypted by default).
|
package/model/Patient.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { DecryptedPropertyStub, EncryptedPropertyStub } from './PropertyStub.mjs
|
|
|
5
5
|
import { CodeStub } from './base/CodeStub.mjs';
|
|
6
6
|
import { Identifier } from './base/Identifier.mjs';
|
|
7
7
|
import { DecryptedAddress, EncryptedAddress } from './embed/Address.mjs';
|
|
8
|
-
import {
|
|
8
|
+
import { DecryptedAnnotation, EncryptedAnnotation } from './embed/Annotation.mjs';
|
|
9
9
|
import { Delegation } from './embed/Delegation.mjs';
|
|
10
10
|
import { DecryptedFinancialInstitutionInformation, EncryptedFinancialInstitutionInformation } from './embed/FinancialInstitutionInformation.mjs';
|
|
11
11
|
import { Gender } from './embed/Gender.mjs';
|
|
@@ -645,7 +645,7 @@ export class DecryptedPatient {
|
|
|
645
645
|
deceased: expectBoolean(extractEntry(jCpy, 'deceased', false, path), true, [...path, ".deceased"]),
|
|
646
646
|
education: expectString(extractEntry(jCpy, 'education', false, path), true, [...path, ".education"]),
|
|
647
647
|
profession: expectString(extractEntry(jCpy, 'profession', false, path), true, [...path, ".profession"]),
|
|
648
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
648
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedAnnotation.fromJSON)),
|
|
649
649
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
650
650
|
administrativeNote: expectString(extractEntry(jCpy, 'administrativeNote', false, path), true, [...path, ".administrativeNote"]),
|
|
651
651
|
nationality: expectString(extractEntry(jCpy, 'nationality', false, path), true, [...path, ".nationality"]),
|
|
@@ -1311,7 +1311,7 @@ export class EncryptedPatient {
|
|
|
1311
1311
|
deceased: expectBoolean(extractEntry(jCpy, 'deceased', false, path), true, [...path, ".deceased"]),
|
|
1312
1312
|
education: expectString(extractEntry(jCpy, 'education', false, path), true, [...path, ".education"]),
|
|
1313
1313
|
profession: expectString(extractEntry(jCpy, 'profession', false, path), true, [...path, ".profession"]),
|
|
1314
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
1314
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, EncryptedAnnotation.fromJSON)),
|
|
1315
1315
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
1316
1316
|
administrativeNote: expectString(extractEntry(jCpy, 'administrativeNote', false, path), true, [...path, ".administrativeNote"]),
|
|
1317
1317
|
nationality: expectString(extractEntry(jCpy, 'nationality', false, path), true, [...path, ".nationality"]),
|
|
@@ -5,7 +5,7 @@ import { HasTags } from '../base/HasTags.mjs';
|
|
|
5
5
|
import { Identifier } from '../base/Identifier.mjs';
|
|
6
6
|
import { Base64String } from '../specializations/Base64String.mjs';
|
|
7
7
|
import { AddressType } from './AddressType.mjs';
|
|
8
|
-
import { Annotation } from './Annotation.mjs';
|
|
8
|
+
import { Annotation, DecryptedAnnotation, EncryptedAnnotation } from './Annotation.mjs';
|
|
9
9
|
import { Encryptable } from './Encryptable.mjs';
|
|
10
10
|
import { DecryptedTelecom, EncryptedTelecom, Telecom } from './Telecom.mjs';
|
|
11
11
|
export interface Address extends Encryptable, HasTags, HasCodes, HasIdentifier {
|
|
@@ -38,7 +38,7 @@ export declare class DecryptedAddress {
|
|
|
38
38
|
state: string | undefined;
|
|
39
39
|
country: string | undefined;
|
|
40
40
|
note: string | undefined;
|
|
41
|
-
notes: Array<
|
|
41
|
+
notes: Array<DecryptedAnnotation>;
|
|
42
42
|
telecoms: Array<DecryptedTelecom>;
|
|
43
43
|
encryptedSelf: Base64String | undefined;
|
|
44
44
|
readonly isEncrypted: false;
|
|
@@ -60,7 +60,7 @@ export declare class EncryptedAddress {
|
|
|
60
60
|
state: string | undefined;
|
|
61
61
|
country: string | undefined;
|
|
62
62
|
note: string | undefined;
|
|
63
|
-
notes: Array<
|
|
63
|
+
notes: Array<EncryptedAnnotation>;
|
|
64
64
|
telecoms: Array<EncryptedTelecom>;
|
|
65
65
|
encryptedSelf: Base64String | undefined;
|
|
66
66
|
readonly isEncrypted: true;
|
package/model/embed/Address.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { expectArray, expectObject, expectString, expectStringEnum, extractEntry
|
|
|
3
3
|
import { CodeStub } from '../base/CodeStub.mjs';
|
|
4
4
|
import { Identifier } from '../base/Identifier.mjs';
|
|
5
5
|
import { AddressType } from './AddressType.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import { DecryptedAnnotation, EncryptedAnnotation } from './Annotation.mjs';
|
|
7
7
|
import { DecryptedTelecom, EncryptedTelecom } from './Telecom.mjs';
|
|
8
8
|
export class DecryptedAddress {
|
|
9
9
|
constructor(partial) {
|
|
@@ -111,7 +111,7 @@ export class DecryptedAddress {
|
|
|
111
111
|
state: expectString(extractEntry(jCpy, 'state', false, path), true, [...path, ".state"]),
|
|
112
112
|
country: expectString(extractEntry(jCpy, 'country', false, path), true, [...path, ".country"]),
|
|
113
113
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
114
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
114
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedAnnotation.fromJSON)),
|
|
115
115
|
telecoms: expectArray(extractEntry(jCpy, 'telecoms', false, path), false, [...path, ".telecoms"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedTelecom.fromJSON)),
|
|
116
116
|
encryptedSelf: expectString(extractEntry(jCpy, 'encryptedSelf', false, path), true, [...path, ".encryptedSelf"]),
|
|
117
117
|
});
|
|
@@ -229,7 +229,7 @@ export class EncryptedAddress {
|
|
|
229
229
|
state: expectString(extractEntry(jCpy, 'state', false, path), true, [...path, ".state"]),
|
|
230
230
|
country: expectString(extractEntry(jCpy, 'country', false, path), true, [...path, ".country"]),
|
|
231
231
|
note: expectString(extractEntry(jCpy, 'note', false, path), true, [...path, ".note"]),
|
|
232
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
232
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, EncryptedAnnotation.fromJSON)),
|
|
233
233
|
telecoms: expectArray(extractEntry(jCpy, 'telecoms', false, path), false, [...path, ".telecoms"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, EncryptedTelecom.fromJSON)),
|
|
234
234
|
encryptedSelf: expectString(extractEntry(jCpy, 'encryptedSelf', false, path), true, [...path, ".encryptedSelf"]),
|
|
235
235
|
});
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CodeStub } from '../base/CodeStub.mjs';
|
|
2
2
|
import { Identifiable } from '../base/Identifiable.mjs';
|
|
3
|
+
import { Base64String } from '../specializations/Base64String.mjs';
|
|
4
|
+
import { Encryptable } from './Encryptable.mjs';
|
|
3
5
|
/**
|
|
4
6
|
*
|
|
5
7
|
* Text node with attribution that can be attached to a medical record. Used by healthcare parties
|
|
@@ -7,7 +9,127 @@ import { Identifiable } from '../base/Identifiable.mjs';
|
|
|
7
9
|
* for example to flag a faulty thermometer after taking a temperature.
|
|
8
10
|
* /
|
|
9
11
|
*/
|
|
10
|
-
export
|
|
12
|
+
export interface Annotation extends Identifiable<string>, Encryptable {
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* The identifier of the author of this annotation.
|
|
16
|
+
*/
|
|
17
|
+
author: string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* The timestamp (unix epoch in ms) of creation of this note, filled automatically if missing.
|
|
21
|
+
*/
|
|
22
|
+
created: number | undefined;
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* The timestamp (unix epoch in ms) of the latest modification of this note, filled automatically
|
|
26
|
+
* if missing.
|
|
27
|
+
*/
|
|
28
|
+
modified: number | undefined;
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* Text contained in the note, written as markdown. Deprecated in favor of [markdown].
|
|
32
|
+
*/
|
|
33
|
+
text: string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* Localized text contained in the note, written as markdown. Keys should respect ISO 639-1.
|
|
37
|
+
*/
|
|
38
|
+
markdown: {
|
|
39
|
+
[key: string]: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
* Defines to which part of the corresponding information the note is related to.
|
|
44
|
+
*/
|
|
45
|
+
location: string | undefined;
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* Whether this annotation is confidential.
|
|
49
|
+
*/
|
|
50
|
+
confidential: boolean | undefined;
|
|
51
|
+
/**
|
|
52
|
+
*
|
|
53
|
+
* Tags associated with this annotation.
|
|
54
|
+
*/
|
|
55
|
+
tags: Array<CodeStub>;
|
|
56
|
+
readonly isEncrypted: boolean;
|
|
57
|
+
toJSON(): object;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
*
|
|
61
|
+
* Text node with attribution that can be attached to a medical record. Used by healthcare parties
|
|
62
|
+
* to add side notes,
|
|
63
|
+
* for example to flag a faulty thermometer after taking a temperature.
|
|
64
|
+
* /
|
|
65
|
+
*/
|
|
66
|
+
export declare class DecryptedAnnotation {
|
|
67
|
+
/**
|
|
68
|
+
*
|
|
69
|
+
* The Id of the Annotation. We encourage using either a v4 UUID or a HL7 Id.
|
|
70
|
+
*/
|
|
71
|
+
id: string;
|
|
72
|
+
/**
|
|
73
|
+
*
|
|
74
|
+
* The identifier of the author of this annotation.
|
|
75
|
+
*/
|
|
76
|
+
author: string | undefined;
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* The timestamp (unix epoch in ms) of creation of this note, filled automatically if missing.
|
|
80
|
+
*/
|
|
81
|
+
created: number | undefined;
|
|
82
|
+
/**
|
|
83
|
+
*
|
|
84
|
+
* The timestamp (unix epoch in ms) of the latest modification of this note, filled automatically
|
|
85
|
+
* if missing.
|
|
86
|
+
*/
|
|
87
|
+
modified: number | undefined;
|
|
88
|
+
/**
|
|
89
|
+
*
|
|
90
|
+
* Text contained in the note, written as markdown. Deprecated in favor of [markdown].
|
|
91
|
+
*/
|
|
92
|
+
text: string | undefined;
|
|
93
|
+
/**
|
|
94
|
+
*
|
|
95
|
+
* Localized text contained in the note, written as markdown. Keys should respect ISO 639-1.
|
|
96
|
+
*/
|
|
97
|
+
markdown: {
|
|
98
|
+
[key: string]: string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
*
|
|
102
|
+
* Defines to which part of the corresponding information the note is related to.
|
|
103
|
+
*/
|
|
104
|
+
location: string | undefined;
|
|
105
|
+
/**
|
|
106
|
+
*
|
|
107
|
+
* Whether this annotation is confidential.
|
|
108
|
+
*/
|
|
109
|
+
confidential: boolean | undefined;
|
|
110
|
+
/**
|
|
111
|
+
*
|
|
112
|
+
* Tags associated with this annotation.
|
|
113
|
+
*/
|
|
114
|
+
tags: Array<CodeStub>;
|
|
115
|
+
/**
|
|
116
|
+
*
|
|
117
|
+
* The encrypted content of this annotation.
|
|
118
|
+
*/
|
|
119
|
+
encryptedSelf: Base64String | undefined;
|
|
120
|
+
readonly isEncrypted: false;
|
|
121
|
+
constructor(partial: Partial<DecryptedAnnotation>);
|
|
122
|
+
toJSON(): object;
|
|
123
|
+
static fromJSON(json: any, ignoreUnknownKeys?: boolean, path?: Array<string>): DecryptedAnnotation;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
*
|
|
127
|
+
* Text node with attribution that can be attached to a medical record. Used by healthcare parties
|
|
128
|
+
* to add side notes,
|
|
129
|
+
* for example to flag a faulty thermometer after taking a temperature.
|
|
130
|
+
* /
|
|
131
|
+
*/
|
|
132
|
+
export declare class EncryptedAnnotation {
|
|
11
133
|
/**
|
|
12
134
|
*
|
|
13
135
|
* The Id of the Annotation. We encourage using either a v4 UUID or a HL7 Id.
|
|
@@ -60,8 +182,9 @@ export declare class Annotation implements Identifiable<string> {
|
|
|
60
182
|
*
|
|
61
183
|
* The encrypted content of this annotation.
|
|
62
184
|
*/
|
|
63
|
-
encryptedSelf:
|
|
64
|
-
|
|
185
|
+
encryptedSelf: Base64String | undefined;
|
|
186
|
+
readonly isEncrypted: true;
|
|
187
|
+
constructor(partial: Partial<EncryptedAnnotation>);
|
|
65
188
|
toJSON(): object;
|
|
66
|
-
static fromJSON(json: any, ignoreUnknownKeys?: boolean, path?: Array<string>):
|
|
189
|
+
static fromJSON(json: any, ignoreUnknownKeys?: boolean, path?: Array<string>): EncryptedAnnotation;
|
|
67
190
|
}
|
|
@@ -9,7 +9,7 @@ import { CodeStub } from '../base/CodeStub.mjs';
|
|
|
9
9
|
* for example to flag a faulty thermometer after taking a temperature.
|
|
10
10
|
* /
|
|
11
11
|
*/
|
|
12
|
-
export class
|
|
12
|
+
export class DecryptedAnnotation {
|
|
13
13
|
constructor(partial) {
|
|
14
14
|
var _a;
|
|
15
15
|
/**
|
|
@@ -58,6 +58,9 @@ export class Annotation {
|
|
|
58
58
|
* The encrypted content of this annotation.
|
|
59
59
|
*/
|
|
60
60
|
this.encryptedSelf = undefined;
|
|
61
|
+
this.isEncrypted = false;
|
|
62
|
+
if (partial.isEncrypted !== undefined && partial.isEncrypted !== false)
|
|
63
|
+
throw new Error('partial.isEncrypted must be undefined or false');
|
|
61
64
|
this.id = (_a = partial.id) !== null && _a !== void 0 ? _a : randomUuid();
|
|
62
65
|
if ('author' in partial)
|
|
63
66
|
this.author = partial.author;
|
|
@@ -97,13 +100,16 @@ export class Annotation {
|
|
|
97
100
|
res['tags'] = this.tags.map((x0) => x0.toJSON());
|
|
98
101
|
if (this.encryptedSelf != undefined)
|
|
99
102
|
res['encryptedSelf'] = this.encryptedSelf;
|
|
103
|
+
res['isEncrypted'] = false;
|
|
100
104
|
return res;
|
|
101
105
|
}
|
|
102
|
-
static fromJSON(json, ignoreUnknownKeys = false, path = ['
|
|
106
|
+
static fromJSON(json, ignoreUnknownKeys = false, path = ['DecryptedAnnotation']) {
|
|
103
107
|
if (typeof json != 'object')
|
|
104
108
|
throw new Error(`Expected json object at path ${path.join("")}`);
|
|
105
109
|
const jCpy = Object.assign({}, json);
|
|
106
|
-
|
|
110
|
+
if (extractEntry(jCpy, "isEncrypted", true, path) !== false)
|
|
111
|
+
throw new Error(`Unexpected value for ${path.join("")} isEncrypted marker, should be false. The provided json doesn't represent a DecryptedAnnotation`);
|
|
112
|
+
const res = new DecryptedAnnotation({
|
|
107
113
|
id: expectString(extractEntry(jCpy, 'id', true, path), false, [...path, ".id"]),
|
|
108
114
|
author: expectString(extractEntry(jCpy, 'author', false, path), true, [...path, ".author"]),
|
|
109
115
|
created: expectNumber(extractEntry(jCpy, 'created', false, path), true, true, [...path, ".created"]),
|
|
@@ -118,7 +124,134 @@ export class Annotation {
|
|
|
118
124
|
if (!ignoreUnknownKeys) {
|
|
119
125
|
const unused = Object.keys(jCpy);
|
|
120
126
|
if (unused.length > 0)
|
|
121
|
-
throw new Error(`Unexpected key(s) for json object
|
|
127
|
+
throw new Error(`Unexpected key(s) for json object DecryptedAnnotation at path ${path.join("")}: ${unused}`);
|
|
128
|
+
}
|
|
129
|
+
return res;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
*
|
|
134
|
+
* Text node with attribution that can be attached to a medical record. Used by healthcare parties
|
|
135
|
+
* to add side notes,
|
|
136
|
+
* for example to flag a faulty thermometer after taking a temperature.
|
|
137
|
+
* /
|
|
138
|
+
*/
|
|
139
|
+
export class EncryptedAnnotation {
|
|
140
|
+
constructor(partial) {
|
|
141
|
+
var _a;
|
|
142
|
+
/**
|
|
143
|
+
*
|
|
144
|
+
* The identifier of the author of this annotation.
|
|
145
|
+
*/
|
|
146
|
+
this.author = undefined;
|
|
147
|
+
/**
|
|
148
|
+
*
|
|
149
|
+
* The timestamp (unix epoch in ms) of creation of this note, filled automatically if missing.
|
|
150
|
+
*/
|
|
151
|
+
this.created = undefined;
|
|
152
|
+
/**
|
|
153
|
+
*
|
|
154
|
+
* The timestamp (unix epoch in ms) of the latest modification of this note, filled automatically
|
|
155
|
+
* if missing.
|
|
156
|
+
*/
|
|
157
|
+
this.modified = undefined;
|
|
158
|
+
/**
|
|
159
|
+
*
|
|
160
|
+
* Text contained in the note, written as markdown. Deprecated in favor of [markdown].
|
|
161
|
+
*/
|
|
162
|
+
this.text = undefined;
|
|
163
|
+
/**
|
|
164
|
+
*
|
|
165
|
+
* Localized text contained in the note, written as markdown. Keys should respect ISO 639-1.
|
|
166
|
+
*/
|
|
167
|
+
this.markdown = {};
|
|
168
|
+
/**
|
|
169
|
+
*
|
|
170
|
+
* Defines to which part of the corresponding information the note is related to.
|
|
171
|
+
*/
|
|
172
|
+
this.location = undefined;
|
|
173
|
+
/**
|
|
174
|
+
*
|
|
175
|
+
* Whether this annotation is confidential.
|
|
176
|
+
*/
|
|
177
|
+
this.confidential = undefined;
|
|
178
|
+
/**
|
|
179
|
+
*
|
|
180
|
+
* Tags associated with this annotation.
|
|
181
|
+
*/
|
|
182
|
+
this.tags = [];
|
|
183
|
+
/**
|
|
184
|
+
*
|
|
185
|
+
* The encrypted content of this annotation.
|
|
186
|
+
*/
|
|
187
|
+
this.encryptedSelf = undefined;
|
|
188
|
+
this.isEncrypted = true;
|
|
189
|
+
if (partial.isEncrypted !== undefined && partial.isEncrypted !== true)
|
|
190
|
+
throw new Error('partial.isEncrypted must be undefined or true');
|
|
191
|
+
this.id = (_a = partial.id) !== null && _a !== void 0 ? _a : randomUuid();
|
|
192
|
+
if ('author' in partial)
|
|
193
|
+
this.author = partial.author;
|
|
194
|
+
if ('created' in partial)
|
|
195
|
+
this.created = partial.created;
|
|
196
|
+
if ('modified' in partial)
|
|
197
|
+
this.modified = partial.modified;
|
|
198
|
+
if ('text' in partial)
|
|
199
|
+
this.text = partial.text;
|
|
200
|
+
if ('markdown' in partial && partial.markdown !== undefined)
|
|
201
|
+
this.markdown = partial.markdown;
|
|
202
|
+
if ('location' in partial)
|
|
203
|
+
this.location = partial.location;
|
|
204
|
+
if ('confidential' in partial)
|
|
205
|
+
this.confidential = partial.confidential;
|
|
206
|
+
if ('tags' in partial && partial.tags !== undefined)
|
|
207
|
+
this.tags = partial.tags;
|
|
208
|
+
if ('encryptedSelf' in partial)
|
|
209
|
+
this.encryptedSelf = partial.encryptedSelf;
|
|
210
|
+
}
|
|
211
|
+
toJSON() {
|
|
212
|
+
const res = {};
|
|
213
|
+
res['id'] = this.id;
|
|
214
|
+
if (this.author != undefined)
|
|
215
|
+
res['author'] = this.author;
|
|
216
|
+
if (this.created != undefined)
|
|
217
|
+
res['created'] = this.created;
|
|
218
|
+
if (this.modified != undefined)
|
|
219
|
+
res['modified'] = this.modified;
|
|
220
|
+
if (this.text != undefined)
|
|
221
|
+
res['text'] = this.text;
|
|
222
|
+
res['markdown'] = Object.fromEntries(Object.entries(this.markdown).map(([k0, v0]) => [k0, v0]));
|
|
223
|
+
if (this.location != undefined)
|
|
224
|
+
res['location'] = this.location;
|
|
225
|
+
if (this.confidential != undefined)
|
|
226
|
+
res['confidential'] = this.confidential;
|
|
227
|
+
res['tags'] = this.tags.map((x0) => x0.toJSON());
|
|
228
|
+
if (this.encryptedSelf != undefined)
|
|
229
|
+
res['encryptedSelf'] = this.encryptedSelf;
|
|
230
|
+
res['isEncrypted'] = true;
|
|
231
|
+
return res;
|
|
232
|
+
}
|
|
233
|
+
static fromJSON(json, ignoreUnknownKeys = false, path = ['EncryptedAnnotation']) {
|
|
234
|
+
if (typeof json != 'object')
|
|
235
|
+
throw new Error(`Expected json object at path ${path.join("")}`);
|
|
236
|
+
const jCpy = Object.assign({}, json);
|
|
237
|
+
if (extractEntry(jCpy, "isEncrypted", true, path) !== true)
|
|
238
|
+
throw new Error(`Unexpected value for ${path.join("")} isEncrypted marker, should be true. The provided json doesn't represent a EncryptedAnnotation`);
|
|
239
|
+
const res = new EncryptedAnnotation({
|
|
240
|
+
id: expectString(extractEntry(jCpy, 'id', true, path), false, [...path, ".id"]),
|
|
241
|
+
author: expectString(extractEntry(jCpy, 'author', false, path), true, [...path, ".author"]),
|
|
242
|
+
created: expectNumber(extractEntry(jCpy, 'created', false, path), true, true, [...path, ".created"]),
|
|
243
|
+
modified: expectNumber(extractEntry(jCpy, 'modified', false, path), true, true, [...path, ".modified"]),
|
|
244
|
+
text: expectString(extractEntry(jCpy, 'text', false, path), true, [...path, ".text"]),
|
|
245
|
+
markdown: expectMap(extractEntry(jCpy, 'markdown', false, path), false, [...path, ".markdown"], (k0, p0) => expectString(k0, false, p0), (v0, p0) => expectString(v0, false, p0)),
|
|
246
|
+
location: expectString(extractEntry(jCpy, 'location', false, path), true, [...path, ".location"]),
|
|
247
|
+
confidential: expectBoolean(extractEntry(jCpy, 'confidential', false, path), true, [...path, ".confidential"]),
|
|
248
|
+
tags: expectArray(extractEntry(jCpy, 'tags', false, path), false, [...path, ".tags"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, CodeStub.fromJSON)),
|
|
249
|
+
encryptedSelf: expectString(extractEntry(jCpy, 'encryptedSelf', false, path), true, [...path, ".encryptedSelf"]),
|
|
250
|
+
});
|
|
251
|
+
if (!ignoreUnknownKeys) {
|
|
252
|
+
const unused = Object.keys(jCpy);
|
|
253
|
+
if (unused.length > 0)
|
|
254
|
+
throw new Error(`Unexpected key(s) for json object EncryptedAnnotation at path ${path.join("")}: ${unused}`);
|
|
122
255
|
}
|
|
123
256
|
return res;
|
|
124
257
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CodeStub } from '../base/CodeStub.mjs';
|
|
2
|
-
import {
|
|
2
|
+
import { DecryptedAnnotation } from './Annotation.mjs';
|
|
3
3
|
import { Range } from './Range.mjs';
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
@@ -37,7 +37,7 @@ export declare class ReferenceRange {
|
|
|
37
37
|
*
|
|
38
38
|
* Annotations providing additional context.
|
|
39
39
|
*/
|
|
40
|
-
notes: Array<
|
|
40
|
+
notes: Array<DecryptedAnnotation>;
|
|
41
41
|
/**
|
|
42
42
|
*
|
|
43
43
|
* The age range to which this reference range applies.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// auto-generated file
|
|
2
2
|
import { expectArray, expectNumber, expectObject, expectString, extractEntry } from '../../internal/JsonDecodeUtils.mjs';
|
|
3
3
|
import { CodeStub } from '../base/CodeStub.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { DecryptedAnnotation } from './Annotation.mjs';
|
|
5
5
|
import { Range } from './Range.mjs';
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
@@ -86,7 +86,7 @@ export class ReferenceRange {
|
|
|
86
86
|
stringValue: expectString(extractEntry(jCpy, 'stringValue', false, path), true, [...path, ".stringValue"]),
|
|
87
87
|
tags: expectArray(extractEntry(jCpy, 'tags', false, path), false, [...path, ".tags"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, CodeStub.fromJSON)),
|
|
88
88
|
codes: expectArray(extractEntry(jCpy, 'codes', false, path), false, [...path, ".codes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, CodeStub.fromJSON)),
|
|
89
|
-
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0,
|
|
89
|
+
notes: expectArray(extractEntry(jCpy, 'notes', false, path), false, [...path, ".notes"], (x0, p0) => expectObject(x0, false, ignoreUnknownKeys, p0, DecryptedAnnotation.fromJSON)),
|
|
90
90
|
age: expectObject(extractEntry(jCpy, 'age', false, path), true, ignoreUnknownKeys, [...path, ".age"], Range.fromJSON),
|
|
91
91
|
});
|
|
92
92
|
if (!ignoreUnknownKeys) {
|
|
@@ -5,7 +5,7 @@ import { ICureDocument } from '../base/ICureDocument.mjs';
|
|
|
5
5
|
import { Identifier } from '../base/Identifier.mjs';
|
|
6
6
|
import { LinkQualification } from '../base/LinkQualification.mjs';
|
|
7
7
|
import { Base64String } from '../specializations/Base64String.mjs';
|
|
8
|
-
import { Annotation } from './Annotation.mjs';
|
|
8
|
+
import { Annotation, DecryptedAnnotation, EncryptedAnnotation } from './Annotation.mjs';
|
|
9
9
|
import { Content, DecryptedContent, EncryptedContent } from './Content.mjs';
|
|
10
10
|
import { Delegation } from './Delegation.mjs';
|
|
11
11
|
import { Encryptable } from './Encryptable.mjs';
|
|
@@ -289,7 +289,7 @@ export declare class DecryptedService {
|
|
|
289
289
|
*
|
|
290
290
|
* Comments - Notes recorded by a HCP about this service
|
|
291
291
|
*/
|
|
292
|
-
notes: Array<
|
|
292
|
+
notes: Array<DecryptedAnnotation>;
|
|
293
293
|
/**
|
|
294
294
|
*
|
|
295
295
|
* Links towards related services (possibly in other contacts)
|
|
@@ -462,7 +462,7 @@ export declare class EncryptedService {
|
|
|
462
462
|
*
|
|
463
463
|
* Comments - Notes recorded by a HCP about this service
|
|
464
464
|
*/
|
|
465
|
-
notes: Array<
|
|
465
|
+
notes: Array<EncryptedAnnotation>;
|
|
466
466
|
/**
|
|
467
467
|
*
|
|
468
468
|
* Links towards related services (possibly in other contacts)
|