-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.graphql
4374 lines (3209 loc) · 354 KB
/
schema.graphql
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
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# SPDX-FileCopyrightText: Magenta ApS <https://magenta.dk>
# SPDX-License-Identifier: MPL-2.0
#
# OS2mo GraphQL API schema definition (v19).
# https://os2mo.eksempel.dk/graphql/v19/schema.graphql
"Address information for either an employee or organisational unit\n"
type Address {
"The address category or type.\n\nIn OS2mo addresses can be of a variety of different types:\n* Phone numbers\n* Addresses\n* Registration numbers\n* Card codes\n\nThis field is what encodes the type of an address.\n\nExamples of user-keys:\n* `\"EmailUnit\"`\n* `\"p-nummer\"`\n* `\"PhoneEmployee\"`\n"
address_type(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class!
"Determines who can see the address and how it is exported.\n\nIn OS2mo addresses can be of a variety of privacy classes.\nFor instance OS2mo may contain a list of phone numbers for an employee;\n* A private mobile phone number\n* An internal work mobile phone number\n* A shared external phone number\n\nThis field is what encodes the privacy class of an address.\nThereby stating who should be allowed to see what addresses.\n\nExamples of user-keys:\n* `null`: Undetermined / non-classified.\n* `\"Secret\"`: Should be treated carefully and perhaps not be exported.\n* `\"Internal\"` Should be treated carefully but perhaps exposed to an internal intranet.\n* `\"External\"`: Can probably be exposed to the internet\n"
visibility(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class
"Connected employee.\n\nNote:\nThis field is mutually exclusive with the `org_unit` field.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
employee(
filter: UuidsBoundEmployeeFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Employee!] @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"Connected person.\n\nNote:\nThis field is mutually exclusive with the `org_unit` field.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
person(
filter: UuidsBoundEmployeeFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Employee!]
"Connected organisation unit.\n\nNote:\nThis field is mutually exclusive with the `employee` field.\n"
org_unit(
filter: UuidsBoundOrganisationUnitFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [OrganisationUnit!]
"Connected engagement.\n\nNote:\nThis field is **not** mutually exclusive with neither the `employee` nor the `org_unit` field.\n"
engagement(
filter: UuidsBoundEngagementFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Engagement!]
"Human readable name of the address.\n\nName is *usually* equal to `value`, but may differ if `value` is not human readable.\nThis may for instance be the case for `DAR` addresses, where the value is the DAR UUID, while the name is a human readable address.\n\nThis is the value that should be shown to users in UIs.\n\nExamples:\n* `\"Vifdam 20, 1. th, 6000 Kolding\"`\n* `\"25052943\"`\n* `\"info@magenta.dk\"`\n* `\"Building 11\"`\n\nNote:\nRequesting this field may incur a performance penalty as the returned value may be dynamically resolved from the `value`-field.\n"
name: String
resolve: ResolvedAddress!
"Hypertext Reference of the address.\n\nThe `href` field makes a hyperlink from the address value, such that the link can be included in user interfaces.\n\nExamples:\n* `null`: For non-hyperlinkable addresses.\n* `\"tel:88888888\"`: For phone numbers.\n* `\"mailto:info@magenta.dk\"`: For email addresses.\n* `\"https://www.openstreetmap.org/?mlon=11&mlat=56\"`: For postal addresses, locations, etc\n\nNote:\nRequesting this field may incur a performance penalty as the returned value may be dynamically resolved from the `value`-field.\n\n"
href: String
"""UUID of the entity"""
uuid: UUID!
"Short unique key.\n\nUsually set to the `value` provided on object creation.\nMay also be set to the key used in external systems.\n\nExamples:\n* `\"25052943\"`\n* `\"info@magenta.dk\"`\n* `\"Building 11\"`\n"
user_key: String!
"The object type.\n\nAlways contains the string `address`.\n"
type: String! @deprecated(reason: "Unintentionally exposed implementation detail.\nProvides no value whatsoever.\n")
"""UUID of the address type class."""
address_type_uuid: UUID! @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `address_type {uuid}` instead.\n")
"""UUID of the employee related to the address."""
employee_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `employee {uuid}` instead.\n")
"""UUID of the organisation unit related to the address."""
org_unit_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `org_unit {uuid}` instead.\n")
"""Optional UUID of an associated engagement."""
engagement_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `engagement {uuid}` instead.\n")
"""UUID of the visibility class of the address."""
visibility_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `visibility {uuid}` instead.\n")
"Machine processable value of the address.\n\nThe value of the address, which may or may not be fit for human consumption.\nIf an address for human consumption is required, consider using `name` or `href` instead.\n\nExamples:\n* `\"3cb0a0c6-37d0-0e4a-e044-0003ba298018\"`\n* `\"25052943\"`\n* `\"info@magenta.dk\"`\n* `\"Building 11\"`\n"
value: String!
"Optional second machine processable value of the address.\n\nThis value is `null` for most address types, but may be utilized by some address-types for extra information.\n\nExamples:\n* `null`\n* `\"Office 12\"`\n* `\"+45\"`\n"
value2: String
"""Validity of the address object."""
validity: Validity!
}
input AddressCreateInput {
"""UUID to be created. Will be autogenerated if not specified."""
uuid: UUID = null
"""UUID for the related org unit."""
org_unit: UUID = null
"""UUID for the related person."""
person: UUID = null
"""UUID for the related person."""
employee: UUID = null @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"""UUID for the related engagement."""
engagement: UUID = null
"""Visibility for the address."""
visibility: UUID = null
"""Validity range for the org-unit."""
validity: RAValidityInput!
"""Extra info or uuid."""
user_key: String = null
"""The actual address value."""
value: String!
"""Type of the address."""
address_type: UUID!
}
"""Address filter."""
input AddressFilter {
"UUID filter limiting which entries are returned.\n\n| `uuids` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
uuids: [UUID!] = null
"User-key filter limiting which entries are returned.\n\n| `user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
user_keys: [String!] = null
"""Limit the elements returned by their starting validity."""
from_date: DateTime
"""Limit the elements returned by their ending validity."""
to_date: DateTime
"Employee filter limiting which entries are returned.\n"
employee: EmployeeFilter = null
"Employee UUID filter limiting which entries are returned.\n\n| `employees` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
employees: [UUID!] = null @deprecated(reason: "Replaced by the 'employee' filter")
"Organisation Unit filter limiting which entries are returned.\n"
org_unit: OrganisationUnitFilter = null
"Organisational Unit UUID filter limiting which entries are returned.\n\n| `org_units` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
org_units: [UUID!] = null @deprecated(reason: "Replaced by the 'org_unit' filter")
"Address type filter limiting which entries are returned.\n"
address_type: ClassFilter = null
"Address type UUID filter limiting which entries are returned.\n\n| `address_types` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
address_types: [UUID!] = null @deprecated(reason: "Replaced by the 'address_type' filter")
"Address type user-key filter limiting which entries are returned.\n\n| `address_type_user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
address_type_user_keys: [String!] = null @deprecated(reason: "Replaced by the 'address_type' filter")
"Engagement filter limiting which entries are returned.\n"
engagement: EngagementFilter = null
"Engagement UUID filter limiting which entries are returned.\n\n| `engagements` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
engagements: [UUID!] = null @deprecated(reason: "Replaced by the 'engagement' filter")
}
"Top-level container for (bi)-temporal and actual state data access.\n\nContains a UUID uniquely denoting the bitemporal object.\n\nContains three different object temporality axis:\n\n| entrypoint | temporal axis | validity time | assertion time |\n|-----------------|---------------|---------------|----------------|\n| `current` | actual state | current | current |\n| `objects` | temporal | varying | current |\n| `registrations` | bitemporal | varying | varying |\n\nThe argument for having three different entrypoints into the data is limiting complexity according to use-case.\n\nThat is, if a certain integration or UI only needs, say, actual state data, the complexities of the bitemporal data modelling is unwanted complexity, and as such, better left out.\n"
type AddressResponse {
"""UUID of the bitemporal object"""
uuid: UUID!
"Bitemporal state entrypoint.\n\nReturns the state of the object at varying validities and varying assertion times.\n\nA list of bitemporal container objects are returned, each containing many different validity intervals.\n\nNote:\nThis the entrypoint should only be used for bitemporal integrations and UIs, such as for auditing purposes.\nFor temporal integration, please consider using `objects` instead.\nFor actual-state integrations, please consider using `current` instead.\n\n**Warning**:\nThis entrypoint should **not** be used to implement event-driven integrations.\nSuch integration should rather utilize the AMQP-based event-system.\n"
registrations(
filter: ModelsUuidsBoundRegistrationFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Registration!]!
"Actual / current state entrypoint.\n\nReturns the state of the object at current validity and current assertion time.\n\nA single object is returned as only one validity can be active at a given assertion time.\n\nNote:\nThis the entrypoint is appropriate to use for actual-state integrations and UIs.\n"
current: Address
"Temporal state entrypoint.\n\nReturns the state of the object at varying validities and current assertion time.\n\nA list of objects are returned as only many different validity intervals can be active at a given assertion time.\n\nNote:\nThis the entrypoint should be used for temporal integrations and UIs.\nFor actual-state integrations, please consider using `current` instead.\n"
objects: [Address!]!
}
"""Result page in cursor-based pagination."""
type AddressResponsePaged {
"List of results.\n\nThe number of elements is defined by the `limit` argument.\n"
objects: [AddressResponse!]!
"Container for page information.\n\nContains the cursors necessary to fetch other pages.\nContains information on when to stop iteration.\n"
page_info: PageInfo!
}
input AddressTerminateInput {
"""Start date of the validity."""
from: DateTime = null
"""When the validity should end - required when terminating"""
to: DateTime!
"""UUID for the address we want to terminate."""
uuid: UUID!
}
input AddressUpdateInput {
"""UUID of the address we want to update."""
uuid: UUID!
"""UUID for the related org unit."""
org_unit: UUID = null
"""UUID for the related person."""
person: UUID = null
"""UUID for the related person."""
employee: UUID = null @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"""UUID for the related engagement."""
engagement: UUID = null
"""Visibility for the address."""
visibility: UUID = null
"""Validity range for the org-unit."""
validity: RAValidityInput!
"""Extra info or uuid."""
user_key: String = null
"""The actual address value."""
value: String = null
"""Type of the address."""
address_type: UUID = null
}
"""Connects organisation units and employees"""
type Association {
"The type of connection that the employee has to the organisation unit.\n\nExamples:\n* `\"Chairman\"`\n* `\"Leader\"`\n* `\"Employee\"`\n"
association_type(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class
"List of arbitrary classes.\n\nThe purpose of this field is ill-defined.\nIt is currently mainly used for (trade) union specification.\n"
dynamic_class(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class @deprecated(reason: "Will be removed in a future version of GraphQL.\nCurrently no replacement is in place, but specialized fields will probably arive in the future.\n")
"Marks which association is primary.\n\nWhen exporting data from OS2mo to external systems, that only support a single engagement or associations, this field can be used to export the primary one.\nWhat primarity means is vaguely defined, but usually derived from workload or time-allocation.\n\nExamples of user-keys:\n* `\"primary\"`\n* `\"non-primary\"`\n* `\"explicitly-primary\"`\n\nIt is a convention that at most one association for each employee is set as either `primary` or `explicitly-primary`.\nThis convention is in place as if more associations are primary, the entire purpose of the field breaks down.\nIn the future this convention may become an invariant.\n\nNote:\nThe calculate-primary integration can be used to automatically calculate and update primarity fields.\n"
primary(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class
"Associated employee.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
employee(
filter: UuidsBoundEmployeeFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Employee!]! @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"Associated person.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
person(
filter: UuidsBoundEmployeeFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Employee!]!
"Associated organisation unit.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
org_unit(
filter: UuidsBoundOrganisationUnitFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [OrganisationUnit!]!
"Optional subsitute if `employee` is unavailable.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
substitute(
filter: UuidsBoundEmployeeFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Employee!]!
"The position held by the employee in the organisation unit.\n\nExamples of user-keys:\n* `\"Payroll consultant\"`\n* `\"Office student\"`\n* `\"Jurist\"`\n"
job_function(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class
"The IT-user utilized by the employee when fulfilling the association responsibilities.\n\n**Warning**:\nThis field will probably become an optional entity instead of a list in the future.\n"
it_user(
filter: UuidsBoundITUserFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [ITUser!]!
"The object type.\n\nAlways contains the string `association`.\n"
type: String! @deprecated(reason: "Unintentionally exposed implementation detail.\nProvides no value whatsoever.\n")
"""UUID of the entity"""
uuid: UUID!
"Short unique key.\n\nUsually set to be set to the key used in external systems.\n\nExamples:\n* `\"1462\"`\n* `\"XSIMP\"`\n"
user_key: String!
"""UUID of the dynamically attached class."""
dynamic_class_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `dynamic_class {uuid}` instead.\n")
"""UUID of the organisation unit related to the association."""
org_unit_uuid: UUID! @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `org_unit {uuid}` instead.\n")
"""UUID of the employee related to the association."""
employee_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `employee {uuid}` instead.\n")
"""UUID of the association type."""
association_type_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `association_type {uuid}` instead.\n")
"""UUID of the primary type of the association."""
primary_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `primary {uuid}` instead.\n")
"""UUID of the substitute for the employee in the association."""
substitute_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `subsitute {uuid}` instead.\n")
"""UUID of a job function class, only defined for 'IT associations."""
job_function_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `job_function {uuid}` instead.\n")
"""UUID of an 'ITUser' model, only defined for 'IT associations."""
it_user_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `it_user {uuid}` instead.\n")
"""Validity of the association object."""
validity: Validity!
}
input AssociationCreateInput {
"""UUID to be created. Will be autogenerated if not specified."""
uuid: UUID = null
"""Extra info or uuid."""
user_key: String = null
"""Primary field of the association"""
primary: UUID = null
"""Validity range for the org-unit."""
validity: RAValidityInput!
"""Employee uuid."""
person: UUID = null
"""Employee uuid."""
employee: UUID = null @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"""org-unit uuid."""
org_unit: UUID!
"""Association type uuid."""
association_type: UUID!
}
"""Association filter."""
input AssociationFilter {
"UUID filter limiting which entries are returned.\n\n| `uuids` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
uuids: [UUID!] = null
"User-key filter limiting which entries are returned.\n\n| `user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
user_keys: [String!] = null
"""Limit the elements returned by their starting validity."""
from_date: DateTime
"""Limit the elements returned by their ending validity."""
to_date: DateTime
"Employee filter limiting which entries are returned.\n"
employee: EmployeeFilter = null
"Employee UUID filter limiting which entries are returned.\n\n| `employees` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
employees: [UUID!] = null @deprecated(reason: "Replaced by the 'employee' filter")
"Organisation Unit filter limiting which entries are returned.\n"
org_unit: OrganisationUnitFilter = null
"Organisational Unit UUID filter limiting which entries are returned.\n\n| `org_units` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
org_units: [UUID!] = null @deprecated(reason: "Replaced by the 'org_unit' filter")
"Address type filter limiting which entries are returned.\n"
association_type: ClassFilter = null
"Association type UUID filter limiting which entries are returned.\n\n| `association_types` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
association_types: [UUID!] = null @deprecated(reason: "Replaced by the 'association_type' filter")
"Association type user-key filter limiting which entries are returned.\n\n| `association_type_user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
association_type_user_keys: [String!] = null @deprecated(reason: "Replaced by the 'association_type' filter")
"Query for either IT-Associations or \"normal\" Associations. `None` returns all.\n\nThis field is needed to replicate the functionality in the service API:\n`?it=1`\n"
it_association: Boolean = null
}
"Top-level container for (bi)-temporal and actual state data access.\n\nContains a UUID uniquely denoting the bitemporal object.\n\nContains three different object temporality axis:\n\n| entrypoint | temporal axis | validity time | assertion time |\n|-----------------|---------------|---------------|----------------|\n| `current` | actual state | current | current |\n| `objects` | temporal | varying | current |\n| `registrations` | bitemporal | varying | varying |\n\nThe argument for having three different entrypoints into the data is limiting complexity according to use-case.\n\nThat is, if a certain integration or UI only needs, say, actual state data, the complexities of the bitemporal data modelling is unwanted complexity, and as such, better left out.\n"
type AssociationResponse {
"""UUID of the bitemporal object"""
uuid: UUID!
"Bitemporal state entrypoint.\n\nReturns the state of the object at varying validities and varying assertion times.\n\nA list of bitemporal container objects are returned, each containing many different validity intervals.\n\nNote:\nThis the entrypoint should only be used for bitemporal integrations and UIs, such as for auditing purposes.\nFor temporal integration, please consider using `objects` instead.\nFor actual-state integrations, please consider using `current` instead.\n\n**Warning**:\nThis entrypoint should **not** be used to implement event-driven integrations.\nSuch integration should rather utilize the AMQP-based event-system.\n"
registrations(
filter: ModelsUuidsBoundRegistrationFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Registration!]!
"Actual / current state entrypoint.\n\nReturns the state of the object at current validity and current assertion time.\n\nA single object is returned as only one validity can be active at a given assertion time.\n\nNote:\nThis the entrypoint is appropriate to use for actual-state integrations and UIs.\n"
current: Association
"Temporal state entrypoint.\n\nReturns the state of the object at varying validities and current assertion time.\n\nA list of objects are returned as only many different validity intervals can be active at a given assertion time.\n\nNote:\nThis the entrypoint should be used for temporal integrations and UIs.\nFor actual-state integrations, please consider using `current` instead.\n"
objects: [Association!]!
}
"""Result page in cursor-based pagination."""
type AssociationResponsePaged {
"List of results.\n\nThe number of elements is defined by the `limit` argument.\n"
objects: [AssociationResponse!]!
"Container for page information.\n\nContains the cursors necessary to fetch other pages.\nContains information on when to stop iteration.\n"
page_info: PageInfo!
}
input AssociationTerminateInput {
"""Start date of the validity."""
from: DateTime = null
"""When the validity should end - required when terminating"""
to: DateTime!
"""UUID for the association we want to terminate."""
uuid: UUID!
}
input AssociationUpdateInput {
"""UUID of the association we want to update."""
uuid: UUID!
"""Extra info or uuid."""
user_key: String = null
"""Primary field of the association"""
primary: UUID = null
"""Validity range for the org-unit."""
validity: RAValidityInput!
"""Employee uuid."""
person: UUID = null
"""Employee uuid."""
employee: UUID = null @deprecated(reason: "Use 'person' instead. Will be removed in a future version of OS2mo.")
"""org-unit uuid."""
org_unit: UUID = null
"""Association type uuid."""
association_type: UUID = null
}
"AuditLog entry.\n\nMostly useful for auditing purposes seeing when data-reads were done and by whom.\n"
type AuditLog {
"UUID of the audit entry itself.\n"
id: UUID!
"When the read occured.\n\nExamples:\n* `\"1970-01-01T00:00:00.000000+00:00\"`\n* `\"2019-12-18T12:55:15.348614+00:00\"`\n"
time: DateTime!
"UUID of the actor (integration or user) who changed the data.\n\nNote:\nCurrently mostly returns `\"42c432e8-9c4a-11e6-9f62-873cf34a735f\"`.\nWill eventually contain for the UUID of the integration or user who mutated data, based on the JWT token.\n"
actor: UUID!
"Model of the modified entity.\n"
model: AuditLogModel!
"UUIDs of entities that were read.\n"
uuids: [UUID!]!
}
"""Audit log filter."""
input AuditLogFilter {
"ID filter limiting which entries are returned.\n\n| `ids` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
ids: [UUID!] = null
"UUID filter limiting which entries are returned.\n\n| `uuids` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
uuids: [UUID!] = null
"Filter audit events by their reading actor.\n\nCan be used to select all data read by a particular user or integration.\n\n| `actors` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
actors: [UUID!] = null
"Filter audit events by their model type.\n\nCan be used to select all reads for a data type.\n\nCan be one of:\n* `\"AuditLog\"`\n* `\"Bruger\"`\n* `\"Facet\"`\n* `\"ItSystem\"`\n* `\"Klasse\"`\n* `\"Organisation\"`\n* `\"OrganisationEnhed\"`\n* `\"OrganisationFunktion\"`\n\n| `models` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
models: [AuditLogModel!] = null
"""Limit the elements returned by their starting validity."""
start: DateTime = null
"""Limit the elements returned by their ending validity."""
end: DateTime = null
}
enum AuditLogModel {
AUDIT_LOG
PERSON
FACET
IT_SYSTEM
CLASS
ORGANISATION @deprecated(reason: "The root organisation concept will be removed in a future version of OS2mo.")
ORGANISATION_UNIT
ORGANISATION_FUNCTION
}
"""Result page in cursor-based pagination."""
type AuditLogPaged {
"List of results.\n\nThe number of elements is defined by the `limit` argument.\n"
objects: [AuditLog!]!
"Container for page information.\n\nContains the cursors necessary to fetch other pages.\nContains information on when to stop iteration.\n"
page_info: PageInfo!
}
"Scalar implementing the danish national identification number / civil registration number.\n\nThe number is a unique identifier for a single individual, although individuals may go through several numbers over time.\n\nThe number is expected to have 10 digits, 6 digits defining a date, and a 4 digit serial number.\nThe number does not have to fulfill the modulo 11 checksum.\nIt does however (optionally) have to define a valid date.\nNo dash should be included to separate the date and serial number sections.\n\nFor further details refer to the Central Person Register (CPR) at:\n* https://cpr.dk/\n\nOr \"Bekendtgørelse af lov om Det Centrale Personregister\" (\"CPR-Loven\"):\n* https://www.retsinformation.dk/eli/lta/2017/646\n\nExamples:\n* `\"0106875049\"`\n* `\"0106878994\"`\n* `\"406568970\"`\n"
scalar CPR
"A value in the facet sample space.\n\nClasses can also be thought of as the value component of the facet/class key-value setup.\n"
type Class {
"Parent class.\n\nAlmost always `null` as class hierarchies are rare.\nCurrently mostly used to describe (trade) union hierachies.\n\nThe inverse operation of `children`.\n"
parent(
filter: UuidsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Class
"Class children.\n\nAlmost always an empty list as class hierarchies are rare.\nCurrently mostly used to describe (trade) union hierachies.\n\nThe inverse operation of `parent`.\n"
children(
filter: ParentsBoundClassFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Class!]!
"Facet this class is defined under.\n\nExamples of user-keys:\n* `\"employee_address_type\"`\n* `\"primary_type\"`\n* `\"engagement_job_function\"`\n"
facet(
filter: UuidsBoundFacetFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): Facet!
"Facet of this class's upmost parent.\n\nThe result of following `parent` until `parent` becomes `null`, then calling `facet`.\n\nAlmost always the same as `facet` as class hierarchies are rare.\nCurrently mostly used to describe (trade) union hierachies.\n"
top_level_facet: Facet! @deprecated(reason: "Will be removed in a future version of GraphQL.\nWill either be replaced by client-side recursion, an ancestor field or a recursive schema directive.\nFor now client-side recursion is the preferred replacement.\n")
"Full name of the class, exactly the same as `name`.\n"
full_name: String! @deprecated(reason: "Will be removed in a future version of GraphQL.\nReturns exactly the same as `name`, use that instead.\n")
"The object type.\n\nAlways contains the string `class`.\n"
type: String! @deprecated(reason: "Unintentionally exposed implementation detail.\nProvides no value whatsoever.\n")
"""UUID of the entity"""
uuid: UUID!
"Short unique key.\n\nUsually set to the `name` provided on object creation.\nMay also be set to the key used in external systems or a system-name.\n\nUsually also used as the machine \"value\" for the class.\n\nExamples:\n* `\"primary\"`\n* `\"PhoneEmployee\"`\n* `\"Jurist\"`\n* `\"X-418\"`\n"
user_key: String!
"Human readable name of the class.\n\nThis is the value that should be shown to users in UIs.\n\nExamples:\n* `\"Primary\"`\n* `\"Phone number\"`\n* `\"Jurist\"`\n* `\"Paragraph 11 Hire\"`\n"
name: String!
"Scope of the class.\n\nThe scope of the class describes the kind of values that can be contained when using the class.\nIt has different implications depending on the associated facet.\n\nBelow is a non-exhaustive list of scope values for a non-exhaustive list of facets:\n\nFacet `visibility`; scope controls visibility classes:\n* `\"PUBLIC\"`: The entity can be shared publicly.\n* `\"SECRET\"`: The entity should not be shared publicly.\n\nFacet `primary_type`; scope controls how primary the class is:\n* `\"0\"`: Not primary.\n* `\"3000\"`: Primary.\n* `\"5000\"`: Explicitly primary / override.\n\nA lot of facets; scope controls input-validation:\n* `\"TEXT\"`: The input can be any text string.\n* `\"PHONE\"`: The input must match OS2mo's phone number regex.\n* `\"PNUMBER\"`: The input must match OS2mo's p-number regex.\n* `\"EMAIL\"`: The input must match OS2mo's email regex.\n* `\"DAR\"`: The input must be a DAR UUID.\n"
scope: String
"Published state of the class object.\n\nWhether the class is published or not, aka. if it should be shown.\n\nExamples:\n* `\"Publiceret\"`\n* `\"IkkePubliceret\"`\n* `\"Normal\"`\n\nNote:\nReturn change may change to an enum in the future.\n\nMay eventually be superseeded by validities on classes.\n"
published: String
"Example usage.\n\nAlmost always `null`.\n"
example: String @deprecated(reason: "Will be removed in a future version of GraphQL.\nThis field is almost never used, and serves no real purpose.\nMay be reintroduced in the future if the demand for it increases.\n")
"""UUID of the related facet."""
facet_uuid: UUID! @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `facet {uuid}` instead.\n")
"""UUID of the related organisation."""
org_uuid: UUID! @deprecated(reason: "The root organisation concept will be removed in a future version of OS2mo.\n")
"""UUID of the employee related to the address."""
parent_uuid: UUID @deprecated(reason: "Will be removed in a future version of GraphQL.\nUse `parent {uuid}` instead.\n")
"""Owner of class"""
owner: UUID
"""Validity of the class."""
validity: OpenValidity!
}
input ClassCreateInput {
"""UUID to be created. Will be autogenerated if not specified."""
uuid: UUID = null
"""Mo-class name."""
name: String!
"""Extra info or uuid"""
user_key: String!
"""UUID of the related facet."""
facet_uuid: UUID!
"""Scope of the class."""
scope: String = null
"""Published state of the class object."""
published: String! = "Publiceret"
"""UUID of the parent class."""
parent_uuid: UUID = null
"""Example usage."""
example: String = null
"""Owner of class"""
owner: UUID = null
"""Validity range for the class."""
validity: ValidityInput!
}
"""Class filter."""
input ClassFilter {
"UUID filter limiting which entries are returned.\n\n| `uuids` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
uuids: [UUID!] = null
"User-key filter limiting which entries are returned.\n\n| `user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
user_keys: [String!] = null
"""Limit the elements returned by their starting validity."""
from_date: DateTime
"""Limit the elements returned by their ending validity."""
to_date: DateTime
"Facet filter limiting which entries are returned.\n"
facet: FacetFilter = null
"Facet UUID filter limiting which entries are returned.\n\n| `facets` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
facets: [UUID!] = null @deprecated(reason: "Replaced by the 'facet' filter")
"Facet user-key filter limiting which entries are returned.\n\n| `facet_user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
facet_user_keys: [String!] = null @deprecated(reason: "Replaced by the 'facet' filter")
"Parent filter limiting which entries are returned.\n"
parent: ClassFilter = null
"Parent UUID filter limiting which entries are returned.\n\n| `parents` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
parents: [UUID!] = null @deprecated(reason: "Replaced by the 'parent' filter")
"Parent user-key filter limiting which entries are returned.\n\n| `parent_user_keys` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
parent_user_keys: [String!] = null @deprecated(reason: "Replaced by the 'parent' filter")
}
"Top-level container for (bi)-temporal and actual state data access.\n\nContains a UUID uniquely denoting the bitemporal object.\n\nContains three different object temporality axis:\n\n| entrypoint | temporal axis | validity time | assertion time |\n|-----------------|---------------|---------------|----------------|\n| `current` | actual state | current | current |\n| `objects` | temporal | varying | current |\n| `registrations` | bitemporal | varying | varying |\n\nThe argument for having three different entrypoints into the data is limiting complexity according to use-case.\n\nThat is, if a certain integration or UI only needs, say, actual state data, the complexities of the bitemporal data modelling is unwanted complexity, and as such, better left out.\n"
type ClassResponse {
"""UUID of the bitemporal object"""
uuid: UUID!
"Bitemporal state entrypoint.\n\nReturns the state of the object at varying validities and varying assertion times.\n\nA list of bitemporal container objects are returned, each containing many different validity intervals.\n\nNote:\nThis the entrypoint should only be used for bitemporal integrations and UIs, such as for auditing purposes.\nFor temporal integration, please consider using `objects` instead.\nFor actual-state integrations, please consider using `current` instead.\n\n**Warning**:\nThis entrypoint should **not** be used to implement event-driven integrations.\nSuch integration should rather utilize the AMQP-based event-system.\n"
registrations(
filter: ModelsUuidsBoundRegistrationFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Registration!]!
"Actual / current state entrypoint.\n\nReturns the state of the object at current validity and current assertion time.\n\nA single object is returned as only one validity can be active at a given assertion time.\n\nNote:\nThis the entrypoint is appropriate to use for actual-state integrations and UIs.\n"
current: Class
"Temporal state entrypoint.\n\nReturns the state of the object at varying validities and current assertion time.\n\nA list of objects are returned as only many different validity intervals can be active at a given assertion time.\n\nNote:\nThis the entrypoint should be used for temporal integrations and UIs.\nFor actual-state integrations, please consider using `current` instead.\n"
objects: [Class!]!
}
"""Result page in cursor-based pagination."""
type ClassResponsePaged {
"List of results.\n\nThe number of elements is defined by the `limit` argument.\n"
objects: [ClassResponse!]!
"Container for page information.\n\nContains the cursors necessary to fetch other pages.\nContains information on when to stop iteration.\n"
page_info: PageInfo!
}
input ClassTerminateInput {
"""Start date of the validity."""
from: DateTime = null
"""When the validity should end - required when terminating"""
to: DateTime!
"""UUID for the class we want to terminate."""
uuid: UUID!
}
input ClassUpdateInput {
"""UUID of the class to update."""
uuid: UUID!
"""Mo-class name."""
name: String!
"""Extra info or uuid"""
user_key: String!
"""UUID of the related facet."""
facet_uuid: UUID!
"""Scope of the class."""
scope: String = null
"""Published state of the class object."""
published: String! = "Publiceret"
"""UUID of the parent class."""
parent_uuid: UUID = null
"""Example usage."""
example: String = null
"""Owner of class"""
owner: UUID = null
"""Validity range for the class."""
validity: ValidityInput!
}
"""A configuration setting."""
type Configuration {
"The unique settings identifier.\n\nExamples:\n* `commit_tag`\n* `environment`\n* `confdb_show_roles`\n"
key: String!
"JSONified settings value.\n\nExamples:\n* `\"true\"`\n* `\"\\\"\\\"\"`\n* `\"null\"`\n* `\"[]\"`\n"
jsonified_value: String!
"Stringified settings value.\n\nExamples:\n* `\"True\"`\n* `\"\"`\n* `\"None\"`\n* `\"[]\"`\n"
stringified_value: String!
}
"""Configuration filter."""
input ConfigurationFilter {
"Key filter limiting which entries are returned.\n\n| `identifiers` | Elements returned |\n|--------------|----------------------------------------------|\n| not provided | All |\n| `null` | All |\n| `[]` | None |\n| `\"x\"` | `[\"x\"]` or `[]` (`*`) |\n| `[\"x\", \"y\"]` | `[\"x\", \"y\"]`, `[\"x\"]`, `[\"y\"]` or `[]` (`*`) |\n\n`*`: Elements returned depends on which elements were found.\n"
identifiers: [String!] = null
}
"""Result page in cursor-based pagination."""
type ConfigurationPaged {
"List of results.\n\nThe number of elements is defined by the `limit` argument.\n"
objects: [Configuration!]!
"Container for page information.\n\nContains the cursors necessary to fetch other pages.\nContains information on when to stop iteration.\n"
page_info: PageInfo!
}
"Scalar implementing the cursor of cursor-based pagination.\n\nThe cursor is opaque by design abstracting away the underlying implementation details.\n\nExamples:\n* `\"Njk=\"`\n* `\"NDIw\"`\n* `\"MTMzNw==\"`\n\nNote:\n\nAs the cursor is to be considered opaque its implementation may change in the future.\nI.e. in the future it may be implemented as a simple integer or a complex object.\n\nThe caller should not concern themselves with the actual value contained within, but rather simply pass whatever is returned in the `cursor` argument to continue iteration.\n"
scalar Cursor
type DARAddress implements ResolvedAddress {
value: String!
description: String!
road_code: Int!
road_name: String!
house_number: String!
floor: String
door: String
zip_code: String!
zip_code_name: String!
municipality_code: String!
longitude: Float!
latitude: Float!
href: String!
name: String!
streetmap_href: String
}
"""Date (isoformat)"""
scalar Date
"""Date with time (isoformat)"""
scalar DateTime
type DefaultAddress implements ResolvedAddress {
value: String!
}
"""Employee/identity specific information"""
type Employee {
"Engagements for the employee.\n\nMay be an empty list if the employee is not employeed.\n"
engagements(
filter: EmployeesBoundEngagementFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Engagement!]!
"Managerial roles for the employee.\n\nUsually an empty list as most employees are not managers.\n"
manager_roles(
filter: EmployeesBoundManagerFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Manager!]!
"Addresses for the employee.\n\nCommonly contain addresses such as, their:\n* Work location\n* Office number\n* Work phone number\n* Work email\n* Personal phone number\n* Personal email\n"
addresses(
filter: EmployeesBoundAddressFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Address!]!
"Leaves of absence for the employee.\n\nUsually empty as most employees are not on leaves of absence.\n"
leaves(
filter: EmployeesBoundLeaveFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Leave!]!
"Associations for the employee.\n\nMay be an empty list if the employee is not associated with projects, etc.\n"
associations(
filter: EmployeesBoundAssociationFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Association!]!
"Roles the employee has within the organisation.\n\nMay be an empty list if the employee does not fulfill any roles in the organisation.\n"
roles(
filter: EmployeesBoundRoleFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [Role!]!
"IT accounts for the employee.\n\nMay be an empty list if the employee does not have any IT-access whatsoever.\n"
itusers(
filter: EmployeesBoundITUserFilter
"\nLimit the maximum number of elements to fetch.\n\n| `limit` | \\# elements fetched |\n|--------------|---------------------|\n| not provided | All |\n| `null` | All |\n| `0` | `0` (`*`) |\n| `x` | Between `0` and `x` |\n\n`*`: This behavior is equivalent to SQL's `LIMIT 0` behavior.\n\nNote:\n\nSometimes the caller may receieve a shorter list (or even an empty list) of results compared to the expected per the limit argument.\n\nThis may seem confusing, but it is the expected behavior given the way that limiting is implemented in the bitemporal database layer, combined with how filtering and object change consolidation is handled.\n\nNot to worry; all the expected elements will eventually be returned, as long as the iteration is continued until the `next_cursor` is `null`.\n"
limit: int = null
"Cursor defining the next elements to fetch.\n\n| `cursor` | Next element is |\n|----------------|--------------------|\n| not provided | First |\n| `null` | First |\n| `\"MA==\"` (`*`) | First after Cursor |\n\n`*`: Placeholder for the cursor returned by the previous iteration.\n"
cursor: Cursor = null
): [ITUser!]!
"""UUID of the entity"""
uuid: UUID!
"Short unique key.\n\nUsually set to be set to the key used in external systems.\n\nDefaults to the `uuid` generated on object creation.\n\nExamples:\n* `\"1462\"`\n* `\"XSIMP\"`\n"
user_key: String!
"The object type.\n\nAlways contains the string `employee`.\n"
type: String! @deprecated(reason: "Unintentionally exposed implementation detail.\nProvides no value whatsoever.\n")
"""CPR number of the employee."""
cpr_number: CPR
"""Full name of the employee"""
name: String!
"""Given name of the employee."""
given_name: String!
"""Full nickname of the employee"""
nickname: String!
"""Given name part of nickname of the employee."""
nickname_given_name: String
"Same as engagements(), but with HACKs to enable validities.\n"
engagements_validity: [Engagement!]! @deprecated(reason: "Should only be used to query engagements when validity dates have been specified, \"\n\"ex from_date & to_date.\"\n\"Will be removed when sub-query date handling is implemented.\n")
"Same as addresses(), but with HACKs to enable validities.\n"
addresses_validity: [Address!]! @deprecated(reason: "Should only be used to query addresses when validity dates have been specified, \"\n\"ex from_date & to_date.\"\n\"Will be removed when sub-query date handling is implemented.\n")
"Same as associations(), but with HACKs to enable validities.\n"
associations_validity: [Association!]! @deprecated(reason: "Should only be used to query associations when validity dates have been specified, \"\n\"ex from_date & to_date.\"\n\"Will be removed when sub-query date handling is implemented.\n")
"Same as itusers(), but with HACKs to enable validities.\n"
itusers_validity: [ITUser!]! @deprecated(reason: "Should only be used to query itusers when validity dates have been specified, \"\n\"ex from_date & to_date.\"\n\"Will be removed when sub-query date handling is implemented.\n")
"""CPR number of the employee."""
cpr_no: CPR @deprecated(reason: "Use 'cpr_number' instead. Will be removed in a future version of OS2mo.")
"""Seniority of the employee."""
seniority: Date
"""Given name of the employee."""
givenname: String! @deprecated(reason: "Use 'given_name' instead. Will be removed in a future version of OS2mo.")
"""Surname of the employee."""
surname: String!