@euconform/core 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-check-types.log +4 -0
  3. package/.turbo/turbo-test.log +364 -0
  4. package/CHANGELOG.md +7 -0
  5. package/README.md +109 -0
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +3282 -0
  9. package/coverage/coverage-final.json +20 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +161 -0
  12. package/coverage/prettify.css +1 -0
  13. package/coverage/prettify.js +2 -0
  14. package/coverage/sort-arrow-sprite.png +0 -0
  15. package/coverage/sorter.js +210 -0
  16. package/coverage/src/fairness-metrics.ts.html +1579 -0
  17. package/coverage/src/index.html +161 -0
  18. package/coverage/src/index.ts.html +535 -0
  19. package/coverage/src/inference/browser-inference.ts.html +859 -0
  20. package/coverage/src/inference/capability-detection.ts.html +2227 -0
  21. package/coverage/src/inference/index.html +176 -0
  22. package/coverage/src/inference/index.ts.html +553 -0
  23. package/coverage/src/inference/inference-factory.ts.html +751 -0
  24. package/coverage/src/inference/ollama-client.ts.html +1627 -0
  25. package/coverage/src/legal-checks/annex-iv-report.ts.html +556 -0
  26. package/coverage/src/legal-checks/bias-metrics.ts.html +1855 -0
  27. package/coverage/src/legal-checks/data-governance.ts.html +529 -0
  28. package/coverage/src/legal-checks/human-oversight-logging.ts.html +490 -0
  29. package/coverage/src/legal-checks/index.html +206 -0
  30. package/coverage/src/legal-checks/index.ts.html +250 -0
  31. package/coverage/src/legal-checks/risk-classifier.ts.html +940 -0
  32. package/coverage/src/legal-checks/robustness-transparency.ts.html +571 -0
  33. package/coverage/src/metrics/crows-pairs-bias.ts.html +820 -0
  34. package/coverage/src/metrics/index.html +146 -0
  35. package/coverage/src/metrics/index.ts.html +151 -0
  36. package/coverage/src/metrics/stereotype-bias.ts.html +886 -0
  37. package/coverage/src/risk-engine.ts.html +1660 -0
  38. package/coverage/src/types.ts.html +547 -0
  39. package/dist/legal-checks/disclaimer.d.ts +2 -0
  40. package/dist/legal-checks/disclaimer.d.ts.map +1 -0
  41. package/dist/legal-checks/disclaimer.js +1 -0
  42. package/package.json +20 -1
@@ -0,0 +1,490 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/legal-checks/human-oversight-logging.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/legal-checks</a> human-oversight-logging.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/103</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>1/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/103</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-neutral">&nbsp;</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-no">&nbsp;</span>
231
+ <span class="cline-any cline-no">&nbsp;</span>
232
+ <span class="cline-any cline-no">&nbsp;</span>
233
+ <span class="cline-any cline-no">&nbsp;</span>
234
+ <span class="cline-any cline-no">&nbsp;</span>
235
+ <span class="cline-any cline-no">&nbsp;</span>
236
+ <span class="cline-any cline-no">&nbsp;</span>
237
+ <span class="cline-any cline-no">&nbsp;</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-no">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-no">&nbsp;</span>
242
+ <span class="cline-any cline-no">&nbsp;</span>
243
+ <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-no">&nbsp;</span>
245
+ <span class="cline-any cline-no">&nbsp;</span>
246
+ <span class="cline-any cline-no">&nbsp;</span>
247
+ <span class="cline-any cline-no">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
249
+ <span class="cline-any cline-no">&nbsp;</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-no">&nbsp;</span>
253
+ <span class="cline-any cline-no">&nbsp;</span>
254
+ <span class="cline-any cline-no">&nbsp;</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
256
+ <span class="cline-any cline-no">&nbsp;</span>
257
+ <span class="cline-any cline-no">&nbsp;</span>
258
+ <span class="cline-any cline-no">&nbsp;</span>
259
+ <span class="cline-any cline-no">&nbsp;</span>
260
+ <span class="cline-any cline-no">&nbsp;</span>
261
+ <span class="cline-any cline-no">&nbsp;</span>
262
+ <span class="cline-any cline-no">&nbsp;</span>
263
+ <span class="cline-any cline-no">&nbsp;</span>
264
+ <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-no">&nbsp;</span>
266
+ <span class="cline-any cline-no">&nbsp;</span>
267
+ <span class="cline-any cline-no">&nbsp;</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-no">&nbsp;</span>
272
+ <span class="cline-any cline-no">&nbsp;</span>
273
+ <span class="cline-any cline-no">&nbsp;</span>
274
+ <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-no">&nbsp;</span>
276
+ <span class="cline-any cline-no">&nbsp;</span>
277
+ <span class="cline-any cline-no">&nbsp;</span>
278
+ <span class="cline-any cline-no">&nbsp;</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-no">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-no">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
291
+ <span class="cline-any cline-no">&nbsp;</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-no">&nbsp;</span>
303
+ <span class="cline-any cline-no">&nbsp;</span>
304
+ <span class="cline-any cline-no">&nbsp;</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-no">&nbsp;</span>
307
+ <span class="cline-any cline-no">&nbsp;</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-no">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-no">&nbsp;</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
337
+ * Article 12 + 14 – Logging &amp; Human Oversight (templates + prompts for evidence)
338
+ *
339
+ * Output is intentionally operational/technical. It is not legal advice.
340
+ */
341
+ &nbsp;
342
+ import type { RiskLevel } from "../types";
343
+ import type { Citation } from "./bias-metrics";
344
+ &nbsp;
345
+ export interface LoggingTemplate {
346
+ retention: {
347
+ recommendedMinimum: string;
348
+ note: string;
349
+ };
350
+ fields: Array&lt;{
351
+ key: string;
352
+ type: string;
353
+ description: string;
354
+ required: boolean;
355
+ }&gt;;
356
+ }
357
+ &nbsp;
358
+ export interface HumanOversightRecommendation {
359
+ level: RiskLevel;
360
+ recommendations: string[];
361
+ loggingTemplate: LoggingTemplate;
362
+ sources: Citation[];
363
+ }
364
+ &nbsp;
365
+ <span class="cstat-no" title="statement not covered" >export function getHumanOversightAndLoggingTemplate(</span>
366
+ <span class="cstat-no" title="statement not covered" > level: RiskLevel</span>
367
+ <span class="cstat-no" title="statement not covered" >): HumanOversightRecommendation {</span>
368
+ <span class="cstat-no" title="statement not covered" > const sources: Citation[] = [</span>
369
+ <span class="cstat-no" title="statement not covered" > { label: "EU AI Act", reference: "Verordnung (EU) 2024/1689" },</span>
370
+ <span class="cstat-no" title="statement not covered" > { label: "Art. 14", reference: "Human oversight (wirksame Aufsicht, Override, Kompetenz)" },</span>
371
+ <span class="cstat-no" title="statement not covered" > { label: "Art. 12", reference: "Logging / Ereignisprotokollierung (Nachvollziehbarkeit)" },</span>
372
+ <span class="cstat-no" title="statement not covered" > ];</span>
373
+ &nbsp;
374
+ <span class="cstat-no" title="statement not covered" > const baseLogging: LoggingTemplate = {</span>
375
+ <span class="cstat-no" title="statement not covered" > retention: {</span>
376
+ <span class="cstat-no" title="statement not covered" > recommendedMinimum: "6 Monate (Template-Empfehlung)",</span>
377
+ <span class="cstat-no" title="statement not covered" > note: "Aufbewahrungsdauer ist kontextabhängig; dieses Tool gibt keine Rechtsberatung.",</span>
378
+ <span class="cstat-no" title="statement not covered" > },</span>
379
+ <span class="cstat-no" title="statement not covered" > fields: [</span>
380
+ <span class="cstat-no" title="statement not covered" > {</span>
381
+ <span class="cstat-no" title="statement not covered" > key: "timestamp",</span>
382
+ <span class="cstat-no" title="statement not covered" > type: "string (ISO-8601)",</span>
383
+ <span class="cstat-no" title="statement not covered" > description: "Zeitpunkt der Entscheidung",</span>
384
+ <span class="cstat-no" title="statement not covered" > required: true,</span>
385
+ <span class="cstat-no" title="statement not covered" > },</span>
386
+ <span class="cstat-no" title="statement not covered" > {</span>
387
+ <span class="cstat-no" title="statement not covered" > key: "system_version",</span>
388
+ <span class="cstat-no" title="statement not covered" > type: "string",</span>
389
+ <span class="cstat-no" title="statement not covered" > description: "Modell/Artefakt-Version, Hash, Konfiguration",</span>
390
+ <span class="cstat-no" title="statement not covered" > required: true,</span>
391
+ <span class="cstat-no" title="statement not covered" > },</span>
392
+ <span class="cstat-no" title="statement not covered" > {</span>
393
+ <span class="cstat-no" title="statement not covered" > key: "input_reference",</span>
394
+ <span class="cstat-no" title="statement not covered" > type: "string",</span>
395
+ <span class="cstat-no" title="statement not covered" > description: "Referenz auf Input (pseudonymisiert/ID), nicht Rohdaten",</span>
396
+ <span class="cstat-no" title="statement not covered" > required: true,</span>
397
+ <span class="cstat-no" title="statement not covered" > },</span>
398
+ <span class="cstat-no" title="statement not covered" > {</span>
399
+ <span class="cstat-no" title="statement not covered" > key: "output",</span>
400
+ <span class="cstat-no" title="statement not covered" > type: "object|string",</span>
401
+ <span class="cstat-no" title="statement not covered" > description: "Systemoutput (Entscheidung/Score/Antwort)",</span>
402
+ <span class="cstat-no" title="statement not covered" > required: true,</span>
403
+ <span class="cstat-no" title="statement not covered" > },</span>
404
+ <span class="cstat-no" title="statement not covered" > {</span>
405
+ <span class="cstat-no" title="statement not covered" > key: "confidence",</span>
406
+ <span class="cstat-no" title="statement not covered" > type: "number",</span>
407
+ <span class="cstat-no" title="statement not covered" > description: "Konfidenz/Score falls vorhanden",</span>
408
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
409
+ <span class="cstat-no" title="statement not covered" > },</span>
410
+ <span class="cstat-no" title="statement not covered" > {</span>
411
+ <span class="cstat-no" title="statement not covered" > key: "protected_attribute_proxy_used",</span>
412
+ <span class="cstat-no" title="statement not covered" > type: "boolean",</span>
413
+ <span class="cstat-no" title="statement not covered" > description: "Wurden Proxies für Fairness-Messung genutzt?",</span>
414
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
415
+ <span class="cstat-no" title="statement not covered" > },</span>
416
+ <span class="cstat-no" title="statement not covered" > {</span>
417
+ <span class="cstat-no" title="statement not covered" > key: "human_review",</span>
418
+ <span class="cstat-no" title="statement not covered" > type: "object",</span>
419
+ <span class="cstat-no" title="statement not covered" > description: "Human-in-the-loop: reviewer_id, action, rationale",</span>
420
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
421
+ <span class="cstat-no" title="statement not covered" > },</span>
422
+ <span class="cstat-no" title="statement not covered" > {</span>
423
+ <span class="cstat-no" title="statement not covered" > key: "override",</span>
424
+ <span class="cstat-no" title="statement not covered" > type: "boolean",</span>
425
+ <span class="cstat-no" title="statement not covered" > description: "Wurde die AI-Ausgabe überstimmt?",</span>
426
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
427
+ <span class="cstat-no" title="statement not covered" > },</span>
428
+ <span class="cstat-no" title="statement not covered" > {</span>
429
+ <span class="cstat-no" title="statement not covered" > key: "override_reason",</span>
430
+ <span class="cstat-no" title="statement not covered" > type: "string",</span>
431
+ <span class="cstat-no" title="statement not covered" > description: "Begründung für Override",</span>
432
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
433
+ <span class="cstat-no" title="statement not covered" > },</span>
434
+ <span class="cstat-no" title="statement not covered" > {</span>
435
+ <span class="cstat-no" title="statement not covered" > key: "appeal_or_complaint",</span>
436
+ <span class="cstat-no" title="statement not covered" > type: "boolean",</span>
437
+ <span class="cstat-no" title="statement not covered" > description: "Gab es Einspruch/Beschwerde?",</span>
438
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
439
+ <span class="cstat-no" title="statement not covered" > },</span>
440
+ <span class="cstat-no" title="statement not covered" > {</span>
441
+ <span class="cstat-no" title="statement not covered" > key: "incident_flag",</span>
442
+ <span class="cstat-no" title="statement not covered" > type: "boolean",</span>
443
+ <span class="cstat-no" title="statement not covered" > description: "Incident/Anomaly markiert",</span>
444
+ <span class="cstat-no" title="statement not covered" > required: false,</span>
445
+ <span class="cstat-no" title="statement not covered" > },</span>
446
+ <span class="cstat-no" title="statement not covered" > ],</span>
447
+ <span class="cstat-no" title="statement not covered" > };</span>
448
+ &nbsp;
449
+ <span class="cstat-no" title="statement not covered" > const recs: Record&lt;RiskLevel, string[]&gt; = {</span>
450
+ <span class="cstat-no" title="statement not covered" > unacceptable: [</span>
451
+ <span class="cstat-no" title="statement not covered" > "System nicht deployen, bis Red-Flags geklärt sind (technischer Hinweis, keine Rechtsberatung).",</span>
452
+ <span class="cstat-no" title="statement not covered" > "Dokumentieren: welche Art.-5-Red-Flags betroffen sind, welche Evidenzen dagegen/ dafür sprechen.",</span>
453
+ <span class="cstat-no" title="statement not covered" > ],</span>
454
+ <span class="cstat-no" title="statement not covered" > high: [</span>
455
+ <span class="cstat-no" title="statement not covered" > "Human-in-the-loop bei allen hochwirksamen Entscheidungen: Review/Override möglich und praktisch nutzbar.",</span>
456
+ <span class="cstat-no" title="statement not covered" > "Rollen/Kompetenzen dokumentieren: wer darf überstimmen, Schulung, Eskalationspfade.",</span>
457
+ <span class="cstat-no" title="statement not covered" > "Monitoring + Incident-Response: Drift, Bias-Regression, Security, Fehlerraten nach Gruppen.",</span>
458
+ <span class="cstat-no" title="statement not covered" > "Logging so gestalten, dass Post-hoc-Audit und Root-Cause-Analyse möglich sind (ohne unnötige personenbezogene Rohdaten).",</span>
459
+ <span class="cstat-no" title="statement not covered" > ],</span>
460
+ <span class="cstat-no" title="statement not covered" > limited: [</span>
461
+ <span class="cstat-no" title="statement not covered" > "Transparenz im UX: Nutzer informieren, wann/wie AI beteiligt ist; klare Feedback-Kanäle.",</span>
462
+ <span class="cstat-no" title="statement not covered" > "Stichprobenartige Human Review für Qualitäts-/Bias-Monitoring einplanen.",</span>
463
+ <span class="cstat-no" title="statement not covered" > ],</span>
464
+ <span class="cstat-no" title="statement not covered" > minimal: [</span>
465
+ <span class="cstat-no" title="statement not covered" > "Gute Praxis: Versionierung, grundlegendes Logging (Fehler/Incidents) und periodische Qualitätschecks.",</span>
466
+ <span class="cstat-no" title="statement not covered" > ],</span>
467
+ <span class="cstat-no" title="statement not covered" > };</span>
468
+ &nbsp;
469
+ <span class="cstat-no" title="statement not covered" > return { level, recommendations: recs[level], loggingTemplate: baseLogging, sources };</span>
470
+ <span class="cstat-no" title="statement not covered" >}</span>
471
+ &nbsp;</pre></td></tr></table></pre>
472
+
473
+ <div class='push'></div><!-- for sticky footer -->
474
+ </div><!-- /wrapper -->
475
+ <div class='footer quiet pad2 space-top1 center small'>
476
+ Code coverage generated by
477
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
478
+ at 2026-01-07T00:09:13.255Z
479
+ </div>
480
+ <script src="../../prettify.js"></script>
481
+ <script>
482
+ window.onload = function () {
483
+ prettyPrint();
484
+ };
485
+ </script>
486
+ <script src="../../sorter.js"></script>
487
+ <script src="../../block-navigation.js"></script>
488
+ </body>
489
+ </html>
490
+