forked from wirfuerdigitalisierung/documentation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
specs.yaml
491 lines (461 loc) · 15.4 KB
/
specs.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
openapi: 3.0.0
info:
title: Adapter - Kontaktdaten Erfassungs Apps (Provider) zu Gesundheitsbehörden
description: Gesundheitsbehörden digital (tm)
version: 0.0.1
security:
- ApiKeyAuth: []
servers:
- url: https://api.darfichrein.de
description: Production URL
- url: https://dev-api.darfichrein.de
description: Staging URL
tags:
- name: Search for location
description: Standortsuche
- name: Request contact data
description: Kontaktdaten Anfrage
- name: Provide download url
description: Bereitstellung Download URL
- name: Download tracing data
description: Kontaktdaten Download
paths:
/{search_location_endpoint}/{search}:
get:
tags:
- Search for location
security:
- ApiKeyAuth: [ ]
operationId: findCompanyByStartingValue
summary: Lookup for company or locations matching search param.
description: Dieser Endpunkt wird vom Provider implementiert. Den finalen Pfad kann der Provider bestimmen.
parameters:
- in: path
description: URL encoded String
name: search
schema:
type: string
minimum: 4
required: true
- in: path
description: Endpoint wie vom Provider konfiguriert
name: search_location_endpoint
schema:
type: string
required: true
responses:
'500':
description: Error at Provider
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LocationInformation'
description: Companies matching the keyword. In case there are no results an empty array is returned.
'401':
description: Unauthorized - API Key not set or invalid
/{request_contact_data_endpoint}:
post:
description: Dieser Endpunkt wird vom Provider implementiert. Den finalen Pfad kann der Provider bestimmen.
tags:
- Request contact data
security:
- ApiKeyAuth: [ ]
operationId: createNewTicketForTracingCase
summary: Creates a new TracingTicket
parameters:
- in: path
name: request_contact_data_endpoint
description: Endpoint wie vom Provider konfiguriert
schema:
type: string
required: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TracingTicketRequest'
responses:
'400':
description: Fehler in der Anfrage vom Portal
'500':
description: Fehler im Provider
'202':
description: Request accepted
'401':
description: Unauthorized - API Key not set or invalid
/tracing-cases/{caseId}/tickets/{ticketId}/download:
put:
description: Dieser Endpunkt wird vom Portal implementiert. Die caseId und ticketId findet man in der Kontaktdaten Anfrage.
tags:
- Provide download url
security:
- ApiKeyAuth: [ ]
operationId: uploadTracingData
summary: Provides Download URL
parameters:
- in: path
name: caseId
schema:
type: string
required: true
- in: path
name: ticketId
schema:
type: string
required: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DownloadURL'
responses:
'201':
description: 'Upload was successful'
'401':
description: Unauthorized - API Key not set or invalid
/{download_url}:
get:
description: Dieser Endpunkt wird vom Provider implementiert. Der finalen Pfad (download_url) bestimmt der Provider beim Upload der download_url .
tags:
- Download tracing data
parameters:
- in: path
name: download_url
description: Wird vom Provider bereitgestellt in "Provide Download URL"
schema:
type: string
required: true
security:
- ApiKeyAuth: [ ]
operationId: uploadTracingData
summary: Downlods contact data
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LocationVisitUpload'
responses:
'401':
description: Unauthorized - API Key not set or invalid
'404':
description: resource not found
'200':
description: 'Download successful'
'500':
description: Fehler beim Provider
components:
schemas:
LocationInformation:
type: object
required:
- "id"
- "name"
- "contact"
properties:
id:
type: string
description: 'Interne ID (beim Provider)'
example: '5eddd61036d39a0ff8b11fdb'
name:
type: string
description: 'Name des Standorts'
example: 'Restaurant Alberts'
publicKey:
type: string
description: 'Öffentlicher Schlüssel, ggf. für Nachrichtenaustausch'
contact:
$ref: '#/components/schemas/LocationContact'
description: 'Kontaktperson des Standorts'
contexts:
type: array
items:
$ref: '#/components/schemas/LocationContext'
LocationContact:
type: object
required:
- "address"
properties:
officialName:
type: string
description: 'Offizieller Unternehmensname'
example: 'Darfichrein GmbH'
representative:
type: string
description: 'Ansprechpartner für dieses Unternehmen'
example: 'Stefan Michalk'
address:
$ref: '#/components/schemas/LocationAddress'
description: 'Anschrift des Standorts'
ownerEmail:
type: string
description: 'E-Mail des Inhabers'
example: 'stefan@darfichrein.de'
email:
type: string
description: 'ggf. E-Mail einer weiteren Kontaktperson'
example: 'covid@darfichrein.de'
phone:
type: string
description: 'Telefonnummer eines Ansprechpartners'
example: 'die bleibt privat :-)'
LocationContext:
type: object
description: 'Ein Standort hat ggf. weitere Informationen wie Tische/Räume, etc.'
properties:
id:
type: string
description: 'Interne ID des Kontext'
example: '5f4bfff742c1bf5f72918851'
name:
type: string
description: 'Bezeichnung'
example: 'Raum 0815'
LocationAddress:
required:
- street
- city
- zip
properties:
street:
type: string
description: 'street + number'
example: 'Türkenstr. 7'
city:
type: string
description: 'Stadt'
example: 'München'
zip:
type: string
description: 'Postleitzahl'
example: '80333'
LocationVisitUpload:
description: 'Angeforderte Kontaktdaten inkl. Informationen der Destination'
required:
- "visits"
type:
object
properties:
visits:
description: 'Liste der Kontaktdaten des angeforderten Zeitraums'
type: array
items:
$ref: '#/components/schemas/LocationVisit'
tracingSource:
description: 'Referenz zur Destination'
$ref: '#/components/schemas/Location'
DownloadURL:
description: 'URL unter der das Portal die Kontaktdaten runterladen kann.'
type:
object
required:
- "download_url"
properties:
download_url:
type: string
Location:
type: object
description: 'Dieses Objekt wird separat abgelegt, um die Referenz zu den Kontaktdaten zu halten'
properties:
name:
type: string
description: 'Name der Destination'
example: 'Restaurant Alberts'
officialName:
type: string
description: 'Offizieller Unternehmensname'
example: 'Darfichrein GmbH'
provider:
type: string
description: 'Name des Kontaktdatenproviders'
example: 'darfichrein'
address:
$ref: '#/components/schemas/LocationAddress'
LocationVisit:
required:
- "data"
- "timestampEntrance"
- "timestampExit"
type:
object
properties:
data:
type: string
description: 'Verschlüsselte Kontaktdaten *mehr dazu im Implementierungsleitfaden'
example: 'YOUCANNOTREADTHISBASE64ENCODEDENCRYPEDDATA'
context:
type: string
description: 'Kontext des Besuchers, z. B. bestimmter Tisch/Raum'
example: 'Raum 0815'
timestampEntrance:
type: string
format: date-time
description: 'Zeitpunkt des Eintritts im ISO-Format'
example: '2021-02-21T20:00:00.000Z'
timestampExit:
type: string
format: date-time
description: 'Zeitpunkt des Austritts im ISO-Format *mehr dazu im Implementierungsleitfaden'
example: '2021-02-21T22:00:00.000Z'
TracingTicketRequest:
description: 'All information needed to create a new TracingTicket'
allOf:
- $ref: '#/components/schemas/TracingTicket'
TracingTicketResponse:
description: 'TracingTicket with ID and Status'
allOf:
- $ref: '#/components/schemas/TracingTicket'
properties:
id:
type: string
description: 'ID innerhalb "Gesundheitsbehörde digital"'
example: '60327fe6b07ab12701e9f8e4'
provider:
type: string
description: 'Name des Providers'
example: 'darfichrein'
status:
$ref: "#/components/schemas/TracingStatus"
TracingTicket:
type: object
required:
- ticketId
- caseId
- code
- provider
- companyId
- issuer
- from
- to
properties:
ticketId:
type: string
description: 'Ticket-ID innerhalb "Gesundheitsbehörde digital"'
example: '602bb183931cfb3b604398f9'
caseId:
type: string
description: 'Fall-ID innerhalb "Gesundheitsbehörde digital"'
example: '602bb183931cfb3b604398f9'
code:
type: string
description: 'Identifizierendes Merkmal/Referenz bei Rückfragen (via Telefon/E-Mail)'
example: 'a57b-e17b-9460'
companyId:
type: string
description: "ID der Destination innerhalb des Providers"
example: '5f4bfff742c1bf5f72918851'
issuer:
description: 'Ausstellende Gesundheitsbehörde'
$ref: '#/components/schemas/TracingIssuer'
from:
type: string
format: date-time
description: 'Zeitpunkt, ab wann Daten angefordert werden (UTC)'
example: '2021-02-21T20:00:00.000Z'
to:
type: string
format: date-time
description: 'Zeitpunkt, bis wann Daten angefordert werden (UTC)'
example: '2021-02-21T22:00:00.000Z'
TracingIssuer:
type: object
properties:
name:
type: string
description: 'Anfragende Gesundheitsbehörde'
example: 'Gesundheitsbehörde Darfichrein GmbH'
certificate:
type: string
description: 'Zertifikat der Gesundheitsbehörde *mehr im Implementierungsleitfaden'
example: '-----BEGIN CERTIFICATE-----
MIIFPjCCAyagAwIBAgIUOlPemeKSf9Jbl5LCTEuK/5ovoywwDQYJKoZIhvcNAQEL
BQAwgc8xCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE3D
vG5jaGVuMRkwFwYDVQQKDBBEYXJmaWNocmVpbiBHbWJIMR4wHAYDVQQLDBVaZXJ0
aWZpemllcnVuZ3NzdGVsbGUxFDASBgNVBAMMC2RhcmZpY2hyZWluMQ4wDAYDVQQR
DAU4MDMzMzEZMBcGA1UECQwQVMO8cmtlbnN0cmHDn2UgNzEgMB4GCSqGSIb3DQEJ
ARYRaGlAZGFyZmljaHJlaW4uZGUwHhcNMjEwMTMxMTExNzMzWhcNMzEwMTI5MTEx
NzMzWjCBqzEqMCgGA1UEAwwhYmFkIGFpYmxpbmcuaGVhbHRoLmRhcmZpY2hyZWlu
LmRlMQswCQYDVQQGEwJERTEUMBIGA1UEBwwLQmFkIEFpYmxpbmcxGjAYBgNVBAoM
EVN0YWR0IERhcmZpY2hyZWluMRwwGgYDVQQLDBNHZXN1bmRoZWl0c2JlaMO2cmRl
MSAwHgYJKoZIhvcNAQkBFhFoaUBkYXJmaWNocmVpbi5kZTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAK8YktDPMy91tmDyKCsC/qJbrpRTlQ1TFSeiux6p
HiPRNXYRzEHj6aWfpcNZkHNWy7yJT8CxD0Gp81KmzFz/cXtwibTTzkIONZXbfxwV
DuRNd1TAoBfDuTNh2WpuR6HFlKQyoJAvy7m2XgtcVDPOULKA7L7/5IdUUrNVyZzb
H0xtFLAvW5Ipy11JX7b+0M5BtGbo8ahewBl65VZzIXATxdGWo5TPqsC6p67CpZZu
FV9uBhHrFCIyLHSWYMpzyzqRIJyuD09Bjh7Y6OFTX/fCeZjO9RqUgcYJDQNSiO4b
xOQ/lru1NUK9/R8D9S6yTWJ3gIbX8aq3rfdn8MTKbXuU2+sCAwEAAaM0MDIwMAYD
VR0RBCkwJ4IOZGFyZmljaHJlaW4uZGWCFWhlYWx0aC5kYXJmaWNocmVpbi5kZTAN
BgkqhkiG9w0BAQsFAAOCAgEAdoVNFokIX9uG3vhDXoOzzFXqjnSz89+ld/bToxo/
uQXF2791oROyNGBltiTgIDbkCX1TbEffuuGYZ0sbWUoh+LkmCICA1bDFDuzWH4Qd
MbZCr+V5gb0vHzR3w94gRytv1rfZzEN5w3CcCk73YBrzZjcFx5KfFO81TCLmHJIx
NB936JiijC5I8f0ksNSZOe+IAy0b+2lg94BFPuznnrHXwHIcna8zbmSJ+DqE6IeC
a5eeG0UjIf5BBPkT2dYiZKb80G9h2BcyBMbjbOTvsyOsdpw/2rgn08RfQY3Yr53s
128P1PI8VvQdZNmYDSwFd+4egFLzIOzMFHv1IWMRAwEV+PzwzdvJTrZubjSFtohm
h+WWPAdBzFS3kYUSaUcWoaOaspxvLEEc5aoFiCEMuWcBepXQBHPWl734zXd9MJlD
Z/hqO8PX/176+Z5Hi3mbyuafmTUPFgk4nE0LJbnpipfbCagpEJpMIJXVV6gAJP9l
NKgMhPcrM6P5ZP3HgUXnCxrzgaht+L9pgIyrkx/WbK4prlrpGQ5sxU9GbS7XyPNI
TMiORKYqTHRtTXevXQDippbMqWY38d96cFwcpIih50VT+1k235MDn4soWvdLu2a3
bya01G9Zgp+ywKqSF+jhIC3JEKzg3trK6ldLzuF6ya1RQN0k/1HGpAeIi6y6N7LM
Bu4=
-----END CERTIFICATE-----
'
fingerprint:
type: string
description: 'Fingerabdruck des Zertifikats *mehr im Implementierungsleitfaden'
example: 'dc3f230b761752b6f07c98f70251b9ca1b27b24528966f61497dff69ec5715aa'
publicKey:
type: string
description: 'Öffentlicher Schlüssel der Gesundheitsbehörde *mehr im Implementierungsleitfaden'
example: 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NB'
TracingStatus:
description: 'Aktueller Status des Tickets'
type: string
enum:
- DRAFT
- REQUESTED
- REQUEST_SEEN
- CANCELLED
- READY
- DOWNLOADED
- TRANSFERED
- CLOSED
readOnly: true
ContactData:
description: Persönliche Informationen des Gasts. Dieses Objekt muss mit dem öffentlichen Schlüssel der anfragenden Behörde verschlüsselt werden.
properties:
f:
type: string
description: 'Vorname'
example: 'Stefan'
g:
type: string
description: 'Familienname'
example: 'Michalk'
p:
type: string
description: 'Telefonnummer'
example: '01234 67901526'
e:
type: string
description: 'E-Mail'
example: 'stefan@darfichrein.de'
a:
type: string
description: 'Vollständige Anschrift. Straße & Hausnummer#Postleitzahl#Ort.'
example: 'Türkenstraße 7#80333#München'
c:
type: string
description: 'ggf. Kontext des Aufenthalts'
example: 'Raum 0815'
m:
type: string
description: 'Kommentar, falls notwendig'
example: 'Check-out wurde berechnet'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: 'x-wfd-api-key'
description: 'Api-Key needed to authenticate the communication to Providers'