Skip to content

Commit 9cc20c6

Browse files
author
Grahame Grieve
committed
fix missing versions in terminology capabilities
1 parent 35bca38 commit 9cc20c6

7 files changed

Lines changed: 81 additions & 2 deletions

File tree

library/fhir/fhir_common.pas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,6 +1520,7 @@ TFhirTerminologyCapabilitiesW = class (TFHIRXVersionResourceWrapper)
15201520

15211521
procedure contact(kind : TContactType; value : String); virtual; abstract;
15221522
procedure systemUri(url : String); virtual; abstract;
1523+
procedure systemVersion(url : String); virtual; abstract;
15231524
procedure addExpansionParameter(code, doco : String); virtual; abstract;
15241525
end;
15251526

library/fhir3/fhir3_common.pas

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,7 @@ TFhirTerminologyCapabilities3 = class (TFhirTerminologyCapabilitiesW)
13011301
function wrapExtension(extension : TFHIRObject) : TFHIRExtensionW; override;
13021302
procedure contact(kind : TContactType; value : String); override;
13031303
procedure systemUri(url : String); override;
1304+
procedure systemVersion(url : String); override;
13041305
procedure addExpansionParameter(code, doco : String); override;
13051306
end;
13061307

@@ -7030,6 +7031,15 @@ procedure TFhirTerminologyCapabilities3.systemUri(url: String);
70307031
(FRes as TFhirParameters).AddParameter('system', TFhirUri.Create(url));
70317032
end;
70327033

7034+
procedure TFhirTerminologyCapabilities3.systemVersion(url: String);
7035+
var
7036+
u, v : String;
7037+
begin
7038+
StringSplit(url, '|', u, v);
7039+
(FRes as TFhirParameters).AddParameter('system', TFhirUri.Create(u));
7040+
(FRes as TFhirParameters).AddParameter('version', TFhirCode.Create(v))
7041+
end;
7042+
70337043
procedure TFhirTerminologyCapabilities3.addExpansionParameter(code, doco : String);
70347044
begin
70357045
(FRes as TFhirParameters).AddParameter('expansion.parameter', TFhirCode.Create(code));

library/fhir4/fhir4_common.pas

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,7 @@ TFhirTerminologyCapabilities4 = class (TFhirTerminologyCapabilitiesW)
12891289
function wrapExtension(extension : TFHIRObject) : TFHIRExtensionW; override;
12901290
procedure contact(kind : TContactType; value : String); override;
12911291
procedure systemUri(url : String); override;
1292+
procedure systemVersion(url : String); override;
12921293
procedure addExpansionParameter(code, doco : String); override;
12931294
end;
12941295

@@ -6852,6 +6853,18 @@ procedure TFhirTerminologyCapabilities4.systemUri(url: String);
68526853
tc.codeSystemList.Append.uri := url;
68536854
end;
68546855

6856+
procedure TFhirTerminologyCapabilities4.systemVersion(url: String);
6857+
var
6858+
cs : TFhirTerminologyCapabilitiesCodeSystem;
6859+
u, v : String;
6860+
begin
6861+
StringSplit(url, '|', u, v);
6862+
cs := tc.codeSystemList.Append;
6863+
cs.uri := u;
6864+
if (v <> '') then
6865+
cs.versionList.Append.code := v;
6866+
end;
6867+
68556868
function TFhirTerminologyCapabilities4.tc: TFhirTerminologyCapabilities;
68566869
begin
68576870
result := (Fres as TFhirTerminologyCapabilities);

library/fhir4b/fhir4b_common.pas

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,7 @@ TFhirTerminologyCapabilities4B = class (TFhirTerminologyCapabilitiesW)
12911291
function wrapExtension(extension : TFHIRObject) : TFHIRExtensionW; override;
12921292
procedure contact(kind : TContactType; value : String); override;
12931293
procedure systemUri(url : String); override;
1294+
procedure systemVersion(url : String); override;
12941295
procedure addExpansionParameter(code, doco : String); override;
12951296
end;
12961297

@@ -6826,6 +6827,18 @@ procedure TFhirTerminologyCapabilities4B.systemUri(url: String);
68266827
tc.codeSystemList.Append.uri := url;
68276828
end;
68286829

6830+
procedure TFhirTerminologyCapabilities4B.systemVersion(url: String);
6831+
var
6832+
cs : TFhirTerminologyCapabilitiesCodeSystem;
6833+
u, v : String;
6834+
begin
6835+
StringSplit(url, '|', u, v);
6836+
cs := tc.codeSystemList.Append;
6837+
cs.uri := u;
6838+
if (v <> '') then
6839+
cs.versionList.Append.code := v;
6840+
end;
6841+
68296842
function TFhirTerminologyCapabilities4B.tc: TFhirTerminologyCapabilities;
68306843
begin
68316844
result := (Fres as TFhirTerminologyCapabilities);

library/fhir5/fhir5_common.pas

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,7 @@ TFhirTerminologyCapabilities5 = class (TFhirTerminologyCapabilitiesW)
12971297
function wrapExtension(extension : TFHIRObject) : TFHIRExtensionW; override;
12981298
procedure contact(kind : TContactType; value : String); override;
12991299
procedure systemUri(url : String); override;
1300+
procedure systemVersion(url : String); override;
13001301
procedure addExpansionParameter(code, doco : String); override;
13011302
end;
13021303

@@ -6846,6 +6847,18 @@ procedure TFhirTerminologyCapabilities5.systemUri(url: String);
68466847
tc.codeSystemList.Append.uri := url;
68476848
end;
68486849

6850+
procedure TFhirTerminologyCapabilities5.systemVersion(url: String);
6851+
var
6852+
cs : TFhirTerminologyCapabilitiesCodeSystem;
6853+
u, v : String;
6854+
begin
6855+
StringSplit(url, '|', u, v);
6856+
cs := tc.codeSystemList.Append;
6857+
cs.uri := u;
6858+
if (v <> '') then
6859+
cs.versionList.Append.code := v;
6860+
end;
6861+
68496862
function TFhirTerminologyCapabilities5.tc: TFhirTerminologyCapabilities;
68506863
begin
68516864
result := (Fres as TFhirTerminologyCapabilities);

server/storage.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,8 +1241,8 @@ function TFHIROperationEngine.ExecuteTerminologyCapabilities(request: TFHIRReque
12411241
oConf.status := psActive;
12421242
oConf.date := TFslDateTime.makeUTC;
12431243

1244-
for s in ServerContext.TerminologyServer.listSystems do
1245-
oConf.systemUri(s);
1244+
for s in ServerContext.TerminologyServer.listSystemVersions do
1245+
oConf.systemVersion(s);
12461246

12471247
oConf.addExpansionParameter('cache-id', 'This server supports caching terminology resources between calls. Clients only need to send value sets and codesystems once; there after they are automatically in scope for calls with the same cache-id. The cache is retained for 30 min from last call');
12481248
oConf.addExpansionParameter('tx-resource', 'Additional valuesets needed for evaluation e.g. value sets referred to from the import statement of the value set being expanded');

server/tx_manager.pas

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ TTerminologyServerStore = class (TFslObject)
257257
function ValueSetCount : integer;
258258
function CodeSystemCount : integer;
259259
function listSystems : TArray<String>;
260+
function listSystemVersions : TArray<String>;
260261

261262
procedure declareCodeSystems(list : TFslList<TFhirResourceV>);
262263
function supportsSystem(s : String; version : String) : boolean;
@@ -1457,6 +1458,34 @@ function TTerminologyServerStore.listSystems: TArray<String>;
14571458
end;
14581459
end;
14591460

1461+
function TTerminologyServerStore.listSystemVersions: TArray<String>;
1462+
var
1463+
ts : TStringList;
1464+
p : TCodeSystemProviderFactory;
1465+
i : integer;
1466+
cs : TFHIRCodeSystemEntry;
1467+
begin
1468+
ts := TStringList.Create;
1469+
try
1470+
ts.Sorted := true;
1471+
ts.Duplicates := TDuplicates.dupIgnore;
1472+
FLock.Lock('listSystems');
1473+
try
1474+
for p in ProviderClasses.Values do
1475+
ts.Add(p.systemUri+'|'+p.version);
1476+
for cs in FCodeSystems.list do
1477+
ts.Add(cs.url+'|'+cs.version);
1478+
finally
1479+
FLock.Unlock;
1480+
end;
1481+
SetLength(result, ts.Count);
1482+
for i := 0 to ts.Count - 1 do
1483+
result[i] := ts[i];
1484+
finally
1485+
ts.free;
1486+
end;
1487+
end;
1488+
14601489
procedure TTerminologyServerStore.listVersions(url: String; list: TStringList);
14611490
var
14621491
cs : TFHIRCodeSystemEntry;

0 commit comments

Comments
 (0)